🧑‍💻

Claude CodeをAWS Bedrockで使いながら、エイリアスでMaxプランを呼び出す

に公開

個人のナレッジやdotfilesの管理ではClaudeのMaxプランでClaude Codeを使っています。

ある案件で「Claude CodeをAWS Bedrock経由で使ってほしい」という指定が入り、Bedrock版のセットアップが必要になりました。
ただ個人作業では引き続きMaxプランを使いたいので、同じマシンでBedrockとMaxプランをコマンドで切り替えられるようにしました。

全体像

claude        # デフォルト:Bedrock(案件用)
cc-my         # エイリアス:Anthropic API直接(個人Maxプラン)

デフォルトをBedrockにしておき、個人用のエイリアスcc-myを叩くとMaxプランに切り替わります。

前提:Bedrockのモデルアクセス申請

Bedrockで Anthropic系モデルを呼び出すには、事前にAWSコンソールの「Amazon Bedrock > Model catalog」から使いたいモデル(今回はClaude Sonnet 4.6)のモデルアクセス申請が必要です。未申請のままだと、IAM権限が揃っていてもモデル呼び出し時に AccessDeniedException が返ります。

クライアント側が案件用のAWSアカウントで既に申請を済ませている場合が多いはずなので、不明な場合は担当者に確認してください。

1. AWSの認証情報を設定する

~/.aws/configにプロファイルとリージョン、~/.aws/credentialsにアクセスキーを書きます。

# ファイルがなければ作成
mkdir -p ~/.aws
touch ~/.aws/config ~/.aws/credentials
# ~/.aws/config
[profile <プロファイル名>]
region = us-east-1
# ~/.aws/credentials
[<プロファイル名>]
aws_access_key_id = <アクセスキーID>
aws_secret_access_key = <シークレットアクセスキ>

<プロファイル名>はAWS設定内で使うラベルなので、任意の名前で問題ありません。AWSの基本設定はクライアントから共有してもらった内容をベースにしています。

認証情報が正しく読み込まれているかはAWS CLIのaws sts get-caller-identityで確認できます。未インストールの場合は以下のいずれかでインストールします。

# Homebrew
brew install awscli

# mise
mise use -g aws-cli
aws sts get-caller-identity --profile <プロファイル>
# → UserId / Account / Arn が返れば認証成功

BedrockコマンドでAccessDeniedExceptionが出てもエラー文中にIAMユーザーのARNが含まれていれば認証自体は成功しています。Claude Codeに必要なのはbedrock:InvokeModel権限なので、不足している場合は管理者に依頼してください。

2. ~/.zshrc.localにBedrockの環境変数を書く

~/.zshrcに直接追記しても動作に問題はありません。
ただ私はdotfilesリポジトリを公開しているため、AWSアカウントIDやプロファイル名のようにわざわざ公開する必要のない値はコミットに含めたくなく、~/.zshrc.localに分離しています。
これらは厳密な機密情報ではないものの、Account IDはIAMロールARNの推測材料になり得ますし、プロファイル名にクライアント名などを含めていれば業務情報が漏れます。

プライベートリポジトリでdotfilesを管理している場合も、マシン固有の値を共有config側に混ぜないことで見通しがよくなるため、同様の分離は有効だと思います。

# ~/.zshrc.local

# for claude code (AWS Bedrock)
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=us-east-1
export AWS_PROFILE=<プロファイル名>
export ANTHROPIC_MODEL=arn:aws:bedrock:us-east-1:<account-id>:inference-profile/us.anthropic.claude-sonnet-4-6

~/.zshrc側には以下を追加しておきます。ファイルが存在するときだけ読み込むので、ファイルがなくてもエラーになりません。

[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local

環境変数のポイント

変数名 説明
CLAUDE_CODE_USE_BEDROCK "1" で有効 / 空文字または未設定で無効 Claude Code独自のフラグ。"1" のときだけBedrock経由に切り替わる
AWS_REGION リージョン名 Bedrockのリージョン。ARNに含まれるリージョンと合わせる必要がある
AWS_PROFILE プロファイル名 ~/.aws/credentials に設定したプロファイル名
ANTHROPIC_MODEL ARN文字列 使用するモデルの推論プロファイルARN

ARN(Amazon Resource Name)はAWSリソースの一意な識別子です。
ここではarn:aws:bedrock:<region>:<account-id>:inference-profile/<profile-id>という形式で、Bedrockの推論プロファイル(inference profile)を指定しています。<profile-id>には利用するモデルのID(例: us.anthropic.claude-sonnet-4-6)が入ります。

これらの環境変数はClaude Code公式ドキュメントに記載されている設定に基づいています。

Set the following environment variables to enable Bedrock:

# Enable Bedrock integration
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=us-east-1  # or your preferred region

— Claude Code on Amazon Bedrock

また、認証ドキュメントでは、Claude Codeが認証方式を選ぶ優先順位の1つとして次のように記載されています。

Cloud provider credentials, when CLAUDE_CODE_USE_BEDROCK, CLAUDE_CODE_USE_VERTEX, or CLAUDE_CODE_USE_FOUNDRY is set.

— Authentication — Claude Code Docs

CLAUDE_CODE_USE_BEDROCK=1でBedrockが有効化されることがわかります。
空文字にした場合の挙動は公式ドキュメントに明記されていませんが、「when ... is set」という条件付きの記述と、私の環境で動作確認で空文字で上書きするとAnthropic APIへの接続にフォールバックすることを確認しています。

3. VS CodeのClaude Code拡張にも環境変数を設定する(未検証)

私はターミナルからの利用しか試していませんが、VS CodeのClaude Code拡張から使う場合はターミナルの環境変数が引き継がれないため、ユーザー設定(settings.json)にも環境変数を追加する必要があるようです。

"claudeCode.environmentVariables": [
    {
        "name": "CLAUDE_CODE_USE_BEDROCK",
        "value": "1"
    },
    {
        "name": "AWS_PROFILE",
        "value": "<プロファイル名>"
    }
]

4. 個人のMaxプラン用エイリアスを追加する

先ほどと同じく~/.zshrc.localに以下を追加します。Bedrockをデフォルトにしつつ、個人用エイリアスでMaxプランに切り替える構成です。

alias cc-my="CLAUDE_CODE_USE_BEDROCK= ANTHROPIC_MODEL= claude"

CLAUDE_CODE_USE_BEDROCKを空文字にすればAnthropic APIへの直接接続に切り替わります。ANTHROPIC_MODELはBedrock ARNのままだと切り替え後にモデル指定として解釈できないため、合わせて空文字にしています。

aliasで空文字にして無効化すべきなのは、Bedrock固有の値(ARNなど)が入っている変数です。AWS_PROFILEAWS_REGIONのようなAWS系の変数は、CLAUDE_CODE_USE_BEDROCKが空になった時点で認証の経路から外れるため、aliasで触らなくても動作には影響しません。

5. 切り替わったか確認する

Claude Code起動後に/statusを実行すると、現在のバックエンドが表示されます。

Bedrock(claude)の場合:

API provider:     Amazon Bedrock

Maxプラン(cc-my)の場合:

Login method:     Claude Max account

まとめ

  • Claude CodeをBedrock経由で動かすには、~/.awsのAWSプロファイルに加えてCLAUDE_CODE_USE_BEDROCK=1ANTHROPIC_MODEL(inference profileのARN)を環境変数として設定します
  • ~/.zshrc.localにマシン固有の設定を分離することで、account IDやAWSプロファイル名を公開dotfilesに含めずに済みます。dotfilesを複数マシンで共有する運用とも相性がいいです
  • Bedrockをデフォルトにしたうえで、Bedrock固有の値(ARNなど)が入った環境変数だけを空文字で上書きするaliasを用意すれば、1コマンドでMaxプランに切り替えられます。切り替わったかは/statusで確認できます
  • 同じような要領で、AWS_PROFILECLAUDE_CONFIG_DIRの切り替えにより複数のBedrockアカウントや複数のMaxプランの使い分けにも応用できそうです
chot Inc. tech blog

Discussion