Claude Code を Amazon Bedrock 経由で使う環境を作る(WSL + aws-vault + 国内リージョン)
コーヒーが好きな emi です。
すでに Claude Enterprise 版の Claude Code を使っているのですが、これとは別に Amazon Bedrock 経由の Claude の挙動も確認したいので、同じ端末で両方を切り替えて使えるように環境を整えました。設定内容を記載します。
動作環境
Windows 上の WSL2(Ubuntu)で作業しました。各ツールのバージョンは以下です。
| ツール | バージョン |
|---|---|
| AWS CLI | 2.28.2(Python 3.13.4 / Linux WSL2) |
| Node.js | v22.16.0 |
| Claude Code | 2.1.248 |
| aws-vault | v7.2.0 |
バージョン確認コマンド
emiki@<hostname>:~/work/xx$ aws --version; node --version; claude --version; aws-vault --version
aws-cli/2.28.2 Python/3.13.4 Linux/6.18.33.2-microsoft-standard-WSL2 exe/x86_64.ubuntu.22
v22.16.0
2.1.248 (Claude Code)
v7.2.0
emiki@<hostname>:~/work/xx$
Node.js は Claude Code を動かすために入っています。
データが日本国内にとどまるようにする推論プロファイル
日本企業での利用を考えると、データは国内に留めたいという要望が多いです。
Bedrock で新しめの Claude モデルを呼ぶときは、モデルを単体で指定するのではなく「推論プロファイル」というものを選びます。
推論プロファイルはリクエストを複数リージョンに振り分けてスループットを確保する仕組みで、プロファイル ID の頭にどの範囲にルーティングするかを表すプレフィックスが付きます。プレフィックスが us. だと米国内、jp. だと日本国内にルーティングされます。
リクエストとデータがどのリージョンに流れるかは、どの推論プロファイルを選ぶかで決まります。
推論オプションは大きく 3 つに分かれます。
- In-Region
- リクエストを1つのリージョン内に留める
- 厳格なコンプライアンス要件がある場合向け
- 地理的なクロスリージョン
- データレジデンシーを守りつつ、地域(米国・欧州・APAC など)内の複数リージョンにまたがってルーティングする
jp.(日本国内)やapac.(APAC 内)など
- グローバルなクロスリージョン
- レジデンシーの制約がない場合に、世界中のどこにでもルーティングする
global.
Opus 4.8 の場合、東京はすべての推論オプションが利用可能となっています。
各モデルでどの推論プロファイル(jp. / apac. / global. など)が使えるかはリージョンごとに異なるので、各モデルの詳細ページで確認してください。
今回はデータを国内に留めたいので、jp. で始まる推論プロファイルを調べます。
実行結果▼
emiki@<hostname>:~/work$ aws bedrock list-inference-profiles --region ap-northeast-1 --query "inferenceProfileSummaries[?starts_with(inferenceProfileId, 'jp.')].inferenceProfileId" --output table
--------------------------------------------------
| ListInferenceProfiles |
+------------------------------------------------+
| jp.anthropic.claude-sonnet-4-5-20250929-v1:0 |
| jp.anthropic.claude-haiku-4-5-20251001-v1:0 |
| jp.amazon.nova-2-lite-v1:0 |
| jp.anthropic.claude-sonnet-4-6 |
| jp.anthropic.claude-opus-4-7 |
| jp.anthropic.claude-opus-4-8 |
+------------------------------------------------+
emiki@<hostname>:~/work$
現時点では、最新世代の Opus 5 / Sonnet 5 は jp. で使えないようです。
Bedrock 疎通確認
Claude Code の設定に進む前に、選んだモデルが応答するか、素の Bedrock を呼び出して確かめておきます。
実行結果▼
emiki@<hostname>:~/work$ aws bedrock-runtime invoke-model \
--region ap-northeast-1 \
--model-id "jp.anthropic.claude-sonnet-4-6" \
--body '{"anthropic_version":"bedrock-2023-05-31","max_tokens":50,"messages":[{"role":"user","content":"こんにちは、ひとことで自己紹介して"}]}' \
--cli-binary-format raw-in-base64-out \
/tmp/bedrock-test.json && cat /tmp/bedrock-test.json
{
"contentType": "application/json"
}
{"model":"claude-sonnet-4-6","id":"msg_bdrk_011CerzUcpWUedFA2UJcv7De","type":"message","role":"assistant","content":[{"type":"bash","bash":"こんにちは!私はAnthropic社が作ったAIアシスタントの**Claude**です。なんでもお気軽にどうぞ!😊"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":24,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":50}}
emiki@<hostname>:~/work$
content に日本語の返事が入っていました。これで jp.anthropic.claude-sonnet-4-6 が東京リージョンで応答することを確認できました。
Claude Code を Bedrock 版として起動する bashrc
Claude Code を Bedrock モードにするかどうかは、環境変数 CLAUDE_CODE_USE_BEDROCK で決まります。1 を設定して起動すると Bedrock 版、設定しなければ通常の Claude Enterprise 版のままです。これを使って、通常版はこれまで通り claude で、Bedrock 版は別のコマンド名で起動できるようにします。
私の環境ではクレデンシャルが aws-vault の中にあるので、起動時に aws-vault exec で一時クレデンシャルを発行し、その中で env を使って必要な環境変数を立てて claude を呼びます。~/.bashrc に次の関数を追記しました。
# 通常の Claude Enterprise 版は、そのまま `claude` で起動する(何も変更しない)。
# Bedrock 版は aws-vault サブシェルの外(素のシェル)から実行する。
# Bedrock 版(起動時の主力: Sonnet 4.6)
claude-bedrock() {
aws-vault exec myprofile -- env \
CLAUDE_CODE_USE_BEDROCK=1 \
AWS_REGION=ap-northeast-1 \
ANTHROPIC_MODEL='jp.anthropic.claude-sonnet-4-6' \
ANTHROPIC_SMALL_FAST_MODEL='jp.anthropic.claude-haiku-4-5-20251001-v1:0' \
claude "$@"
}
env と ~/.bashrc の補足
私が普段 Linux を頻繁に使わないので自分のための補足として書いておきます。
-
envコマンド- 「特定の環境変数を設定した状態で、その後ろのコマンドを実行する」ためのコマンド
env CLAUDE_CODE_USE_BEDROCK=1 AWS_REGION=... claude- 「
CLAUDE_CODE_USE_BEDROCKやAWS_REGIONなどを一時的にセットしたうえでclaudeを起動する」の意味
- 「
envで設定した環境変数はそのclaudeの実行中だけ有効(普段のシェルには残らない)
-
~/.bashrc- bash(Linux でよく使うシェル)を起動するたびに自動で読み込まれる設定ファイル
claude-bedrock() { ... }という関数を書いておくと、ターミナルでclaude-bedrockと打つだけでこの中身が実行されるようになる- 毎回長いコマンドを打たずに済む
- 書き足した後は、新しいターミナルを開くか
source ~/.bashrcを実行すると反映される
ANTHROPIC_MODEL が Claude Code のメインモデルです。ANTHROPIC_SMALL_FAST_MODEL は Claude Code が裏で使う軽量モデルです。
jp. に固定して、国内で推論は完結するようにしています。
これで、通常の Claude Enterprise 版は claude、Bedrock 版は claude-bedrock と打つと起動できるようになります。
Bedrock 経由の Claude Code を起動する
claude-bedrock と打ちます。
すると MFA コードを聞かれるので入力します。無事に Claude Code が立ち上がりました。

▐▛███▛█ Claude Code v2.1.248
▝▜██████▀ Sonnet 4.6 · Amazon Bedrock
▝▝ ▝▝ ~/work/xx
✔ Using flicker-free rendering · if you want to go back, use /tui default
· Click to move your cursor in the bash input
· Click to expand collapsed tool results
· By default, bash auto-copies when you select it (/config to change)
· Hold Shift while selecting to use your terminal's native copy instead
Amazon Bedrock と出ていて、モデルも設定した Sonnet 4.6 になっています。初回起動時は「新しいフルスクリーンレンダラーを試すか」という Claude Code 側の案内も出ましたが、これは表示方法の好みの話なので好きな方を選べば大丈夫です。
これで通常の Claude Enterprise 版は claude、東京リージョンの Bedrock 経由の Claude は claude-bedrock で切り替えて使えるようになりました!
/model の一覧を jp. 対応モデルだけに絞る
Bedrock 版でもモデル切り替えは /model で行います。
このまま /model でモデル一覧を出すと、以下のように推論プロファイルが jp. 以外のものも出てきます。

Select model
Switch between Claude models. Your pick becomes the default for new sessions. For other/previous model names, specify with --model.
❯ 1. Default Use the default model (currently Opus 4.8)
1. jp.anthropic.claude-sonnet… ✔ Custom Sonnet model
2. Fable Fable 5 · Most capable for your hardest and longest-running tasks
3. jp.anthropic.claude-opus-4-8 Custom Opus model
4. Haiku Haiku 4.5 · Fastest for quick answers
● High effort (default) ←/→ to adjust
Enter to set as default · s to use this session only · Esc to cancel
私の検証環境は以下のリージョン制限で、東京・大阪・バージニア北部リージョン以外の使用を禁止しているので、jp. 以外のモデルを選択して使おうとすると 403 エラーになります。

このため /model の一覧に jp. 以外のモデルを出さないよう、~/.claude/settings.json の availableModels の設定を行います。
既存の settings.json の設定は変えず、以下の設定だけ足します。Opus は jp. で使えるもののうち最新の 4-8 だけを載せています。
{
"availableModels": [
"jp.anthropic.claude-sonnet-4-6",
"jp.anthropic.claude-opus-4-8",
"jp.anthropic.claude-haiku-4-5-20251001-v1:0"
]
}
Claude Code を起動し直して /model を開くと、jp. だけに絞られて以下のようになりました。

Select model
Switch between Claude models. Your pick becomes the default for new sessions. For other/previous model names, specify with --model.
1. Default Use the default model (currently Opus 4.8)
❯ 2. jp.anthropic.claude-sonnet-4-6 ✔ Custom Sonnet model
1. jp.anthropic.claude-opus-4-8 Custom Opus model
2. Haiku Haiku 4.5 · Fastest for quick answers
● High effort (default) ←/→ to adjust
Enter to set as default · s to use this session only · Esc to cancel
Haiku だけ jp. のフル ID ではなく Haiku という汎用ラベルで表示されていますね。Haiku を選んで一言送ってみました。
▐▛███▛█ Claude Code v2.1.248
▝▜██████▀ Haiku 4.5 · Amazon Bedrock
▝▝ ▝▝ ~/work/xx
❯ /model
⎿ Set model to Haiku 4.5 and saved as your default for new sessions
❯ こんにちは~
Thought for 4s
こんにちは。何かお手伝いできることはありますか?
✻ Cogitated for 4s · done 10:53 AM
返ってきました。表示は汎用ラベルですが、中身は jp. の Haiku が呼ばれています。
モデル切り替えでのエラー
おまけとして、jp. ではないモデルを選んだ場合のエラーと復旧方法も紹介しておきます。
/model で Fable を選んでメッセージを送ってみました。TUI 上の表示は Fable 5 · Amazon Bedrock に変わりました。
❯ /model
⎿ Set model to Fable 5 and saved as your default for new sessions
❯ こんにちは。
✻ 403 {"Message":"User: arn:aws:sts::<AWS アカウント ID>:assumed-role/myprofile/17… · Retrying in 1s · attempt 5/10
403(アクセス拒否)です。Fable は jp. の一覧に無いモデルなので、東京リージョンの国内完結プロファイルでは呼べないことが分かりました。
/model で jp.anthropic.claude-sonnet-4-6 に戻すだけでは直りませんでした。403 になったリクエストがリトライを繰り返したまま残っていて、その間に追加で送ったメッセージもキューに溜まって、結局どれも返ってこない状態になりました。

Esc を押してリトライ中のリクエストを中断すると直りました。
溜まっていたメッセージにも返信がドドドっときました。

(笑)ってついてますね(笑)
問題点
availableModels を書いた ~/.claude/settings.json は、現状 Claude Code の設定ファイルとして通常の Claude Enterprise 版でも Bedrock 版でも共通で読まれています。
つまり Bedrock 版のために availableModels を jp. のモデルだけに絞ると、その絞り込みが通常の Claude Enterprise 版の /model 一覧にも反映されている状態です。
これを Enterprise 版と Bedrock 版で別々にするには settings.json を Enterprise 版と Bedrock 版で分ける方法を考える必要があります。
Claude Code は CLAUDE_CONFIG_DIR という環境変数で設定ディレクトリの場所を変えられるので、claude-bedrock 側だけ別のディレクトリを読ませれば、その中の settings.json も分けられるのではないかと考えています。
この方法は別記事で検証して書く予定です。
おわりに
WSL ターミナルの Claude Code を、Claude Enterprise と Claude on Bedrock で切り替えて使う方法を検証しました。切り替え自体は CLAUDE_CODE_USE_BEDROCK を設定するだけなので、Enterprise 版との共存はすぐに実現できました。
Bedrock 経由の Claude Code は初めていろいろ設定したので勉強になりました。
本記事への質問やご要望については画面下部の「DevelopersIOへのご意見」からお問い合わせいただけます。






