Claude Code on Amazon Bedrock - Amazon Bedrock 経由への切り替えをスキルで自動化!

記事タイトルとURLをコピーする

はじめに

こんにちは。高橋 (ポインコ兄) です。

Claude Code を使っていて、こんな経験はありませんか?

❌ Error: Rate limit exceeded
❌ Error: Spend limit reached

API の Rate limits や Spend limits に引っかかって作業が止まってしまう …そんな時の解決策が Amazon Bedrock 経由への切り替え です。

blog.serverworks.co.jp

基本的な Bedrock への切り替え方法などはこちらの当社ブログで詳しく解説していますが、本記事では更に...

  • 切り替えをスキルで自動化してコマンド一発に
  • ステータスバーで可視化してプロバイダーとコストを常時表示

この 2 つの実践的テクニックを解説します。

こんな人におすすめ

  • ✅ Bedrock 経由への切り替えをコマンド一発でおこないたい
  • ✅ JSON を手動で編集するのが面倒
  • ✅ 現在のプロバイダーやコストを常時表示したい
  • ✅ チームでスキルを共有したい

なぜ Bedrock 経由に切り替えるのか?

API 制限の壁

Anthropic API には以下の 2 種類の制限があり、大規模なリファクタリングやコードレビューなどで上限に達しやすいです。

  1. Rate limits (レート制限) - 一定時間内に実行できる API リクエスト数やトークン数の上限

    • Requests per minute (RPM): リクエスト数/分
    • Input tokens per minute (ITPM): 入力トークン数/分
    • Output tokens per minute (OTPM): 出力トークン数/分
  2. Spend limits (支出上限) - 各カレンダー月に使用できる最大コスト (MAX プランの例)

    • Tier 1: $100/月、Tier 2: $500/月、Tier 3: $1,000/月、Tier 4: $200,000/月

詳細は Anthropic API - Rate Limits を参照してください。

Amazon Bedrock のメリット

  • API 制限を気にせず使える (従量課金制)
  • ブラウザで簡単に認証 (aws login コマンド使用)
  • Cost Explorer でコストを一元管理
  • Prompt Caching でコスト削減

詳細な料金比較や認証方法については、以下の公式ドキュメントを参照してください。

API と Amazon Bedrock の違い

Claude Code は内部的に接続先を切り替えるだけで、機能は完全に同じです。

項目 Anthropic API Amazon Bedrock
認証 API キー aws login コマンド
モデル ID claude-sonnet-4-6 us.anthropic.claude-sonnet-4-6
Rate limits リクエスト/トークン数の分単位制限 AWS サービスクォータで管理
Spend limits 月次コスト上限あり (Tier制) 従量課金 (上限なし)
MCP サーバー すべて利用可能 claude.ai 統合 MCP は不可 ⚠️

設定は環境変数で切り替えるだけです。

⚠️ MCP サーバーの制限について

Bedrock 経由を利用する場合、一部の MCP サーバーは利用できません。

  • ❌ 利用不可: claude.ai のサードパーティ統合 MCP
    • Slack、Gmail、Google Calendar、Atlassian、Box など
    • これらは Anthropic API 経由でのみ動作します
  • ✅ 利用可: ローカル MCP サーバー
    • ファイルシステム、AWS、データベースなど
    • API / Bedrock どちらでも動作します

詳細は Claude Code - MCP サーバー公式ガイド を参照してください。

料金は同じ?

基本的なトークン単価は API と Bedrock で同じです (Sonnet 4.6: 入力 $3/MTok、出力 $15/MTok)。

ただし、Bedrock には以下のメリットがあります。

  • Prompt Caching: 同じコンテキストの再利用で 90% コスト削減 (自動適用)
  • 従量課金: API のような月次上限なし
  • Cost Explorer: AWS の他サービスと一元管理

詳細な料金については、以下の公式ドキュメントを参照してください。

基本的な切り替え方法

再掲ですが、Claude Code を Amazon Bedrock 経由に切り替える基本的な方法については、以下のブログで詳しく解説しています。

📚 参考記事:Claude Code CLI を Amazon Bedrock 経由で利用する

このブログでは以下を丁寧に説明しています。

  • AWS 認証の設定方法
  • IAM 権限の設定
  • リージョン選択のポイント
  • .claude/settings.local.json の基本設定

基本的な切り替えができたら、次からが本題です。スキルで自動化し、ステータスバーで可視化する方法を解説します。

切り替えをスキルで自動化する

なぜスキル化が必要なのか?

プロジェクトごとに .claude/settings.local.json を手動で編集するのは、JSON 構文を誤るリスクがあったり、切り替えるたびにファイルを開く手間があります。

{
  "env": {
    "CLAUDE_CODE_USE_BEDROCK": "1",
    "AWS_REGION": "us-east-1"
  }
}

これをスキル化すれば、コマンド一発で切り替えられます。

Claude Code のスキルとは?

Claude Code のスキルは、/command-name の形式で呼び出せるカスタムコマンドです。

  • Markdown ファイルで仕様を記述
  • シェルスクリプトで実装
  • プロジェクト固有 or グローバルで配置可能

詳細は Claude Code - スキル開発ガイド を参照してください。

実装例:/switch-provider スキルの作成

ステップ1: スキルディレクトリを作成

mkdir -p ~/.claude/skills/switch-provider

ステップ2: SKILL.md を作成

~/.claude/skills/switch-provider/SKILL.md:

---
name: switch-provider
description: Switch between Anthropic API and Amazon Bedrock
disable-model-invocation: true
---

# Switch Provider

Switch Claude Code's LLM provider between Anthropic API and Amazon Bedrock.

## Usage

\`\`\`bash
# Switch to Bedrock (default profile)
/switch-provider bedrock

# Switch to Bedrock (custom profile)
/switch-provider bedrock bedrock-claude-code

# Switch to Anthropic API
/switch-provider api
\`\`\`

## Current setting

Provider is stored in `.claude/settings.local.json` in the current project.

## Available providers

- **api**: Anthropic API (default)
- **bedrock**: Amazon Bedrock

When switching to Bedrock, ensure AWS credentials are configured and Bedrock models are enabled in AWS Console.

ステップ3: 切り替えスクリプトを作成

~/.claude/skills/switch-provider/scripts/switch.sh:

#!/bin/bash

set -e

provider="${1:-api}"
settings_file=".claude/settings.local.json"

# settings.local.json が存在しない場合は作成
if [ ! -f "$settings_file" ]; then
  echo '{"env":{}}' > "$settings_file"
fi

case "$provider" in
  api)
    # Bedrock 設定を削除
    jq '.env |= del(.CLAUDE_CODE_USE_BEDROCK, .AWS_REGION, .AWS_PROFILE)' \
      "$settings_file" > "${settings_file}.tmp"
    mv "${settings_file}.tmp" "$settings_file"
    echo "✅ Switched to Anthropic API"
    echo ""
    echo "Set your API key in settings.local.json:"
    echo '  "ANTHROPIC_API_KEY": "sk-ant-..."'
    ;;
  
  bedrock)
    # Bedrock 設定を追加
    profile="${2:-default}"
    
    jq '.env |= . + {
      "CLAUDE_CODE_USE_BEDROCK": "1",
      "AWS_REGION": "us-east-1",
      "AWS_PROFILE": "'$profile'"
    }' "$settings_file" > "${settings_file}.tmp"
    mv "${settings_file}.tmp" "$settings_file"
    echo "✅ Switched to Amazon Bedrock"
    echo ""
    echo "Verify AWS credentials:"
    echo "  aws sts get-caller-identity --profile $profile"
    echo ""
    echo "If expired, login again:"
    echo "  aws login --profile $profile"
    ;;
  
  *)
    echo "❌ Unknown provider: $provider"
    echo ""
    echo "Available providers:"
    echo "  - api"
    echo "  - bedrock"
    exit 1
    ;;
esac

echo ""
echo "Updated: $settings_file"
echo ""
echo "Restart Claude Code to apply changes."

スクリプトに実行権限を付与します。

chmod +x ~/.claude/skills/switch-provider/scripts/switch.sh

ステップ4: SKILL.md を更新して Bash から呼び出せるようにする

Claude Code のスキルは Bash ツールを使って呼び出します。ステップ2で作成した SKILL.md を以下のように更新します。

---
name: switch-provider
description: Switch between Anthropic API and Amazon Bedrock
disable-model-invocation: true
allowed-tools:
  - Bash
---

#  Switch Provider

Switch Claude Code's LLM provider between Anthropic API and Amazon Bedrock.

## Usage

\`\`\`bash
# Switch to Bedrock (default profile)
/switch-provider bedrock

# Switch to Bedrock (custom profile)
/switch-provider bedrock bedrock-claude-code

# Switch to Anthropic API
/switch-provider api
\`\`\`   

## Implementation

When user invokes this skill, run:

\`\`\`bash
bash ~/.claude/skills/switch-provider/scripts/switch.sh <provider> [profile]
\`\`\`

Where:
- `<provider>` is either `api` or `bedrock`
- `[profile]` is the optional AWS profile name (defaults to `default` if not specified)

使い方

claude

Bedrock に切り替え (デフォルトプロファイル):

> /switch-provider bedrock

✅ Switched to Amazon Bedrock
Updated: .claude/settings.local.json

Verify AWS credentials:
  aws sts get-caller-identity --profile default

If expired, login again:
  aws login --profile default

Bedrock に切り替え (プロファイル指定):

> /switch-provider bedrock bedrock-claude-code

✅ Switched to Amazon Bedrock
Updated: .claude/settings.local.json

Verify AWS credentials:
  aws sts get-caller-identity --profile bedrock-claude-code

If expired, login again:
  aws login --profile bedrock-claude-code

API に戻す:

> /switch-provider api

✅ Switched to Anthropic API
Updated: .claude/settings.local.json
Set your API key in settings.local.json

再起動すれば設定が反映されます。

ステータスバーでプロバイダーとコストを可視化する

「今 API と Bedrock どっち使ってるんだっけ?」

そんな疑問を解消するために、Claude Code のステータスバーに現在のプロバイダーとコストを表示します。

ステータスバーとは?

Claude Code の画面下部に表示される情報バーです。デフォルトでは以下が表示されます。

🤖 Claude Sonnet 4.6 │ 📊 Tokens: 1,234

これをカスタマイズして、プロバイダーとコスト情報を追加します。

詳細は Claude Code - ステータスバー公式ガイド を参照してください。

実装方法

ステータスバーは シェルスクリプト でカスタマイズします。Claude Code が JSON でセッション情報を渡してくれるので、それを元に表示内容を生成します。

ステップ1: ステータスバースクリプトを作成

~/.claude/statusline-command.sh:

#!/bin/bash

# Claude Code から渡される JSON を読み込む
input=$(cat)
# モデル情報を取得
model=$(echo "$input" | jq -r '.model.display_name // .model.id // "unknown"')

# プロバイダーを settings.local.json から判定
use_bedrock=$(jq -r '.env.CLAUDE_CODE_USE_BEDROCK // ""' .claude/settings.local.json 2>/dev/null)

# プロバイダーのバッジを生成
if [ "$use_bedrock" = "1" ]; then
  provider="bedrock"
  provider_badge="☁️ Bedrock"
else
  provider="anthropic"
  provider_badge="🌐 API"
fi

# トークン使用率を取得
input_tokens=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
output_tokens=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')

# コストを計算 (Sonnet 4.6 の料金で計算)
cost=$(echo "scale=4; ($input_tokens * 3 + $output_tokens * 15) / 1000000" | bc)

# ステータスラインを出力(1行目)
echo "🤖 ${model} (${provider_badge}) │ 💵 Session: \$${cost}"

# 2行目: トークン使用率 (オプション)
echo "📊 Input: ${input_tokens} tokens │ Output: ${output_tokens} tokens"

スクリプトに実行権限を付与します。

chmod +x ~/.claude/statusline-command.sh

ステップ2: Claude Code の設定に登録

~/.claude/settings.json:

{
  "statuslineCommand": "~/.claude/statusline-command.sh"
}

ステップ3: Claude Code を再起動して確認

claude

ステータスバーが以下のように表示されます。

🤖 Claude Sonnet 4.6 (☁️ Bedrock) │ 💵 Session: $0.0342
📊 Input: 8520 tokens │ Output: 1240 tokens

API に切り替えた場合:

🤖 Claude Sonnet 4.6 (🌐 API) │ 💵 Session: $0.0342
📊 Input: 8520 tokens │ Output: 1240 tokens

これで、今どちらを使っているか一目で分かるようになります。

[応用] 今月の Bedrock コストも表示する

Bedrock を使っている場合、AWS Cost Explorer から今月のコストを取得して表示できます。

Cost Explorer API の詳細は AWS Cost Explorer API リファレンス を参照してください。

~/.claude/statusline-command.sh に以下を追加:

# Bedrock の場合、今月のコストを取得
if [ "$provider" = "bedrock" ]; then
  start_date=$(date -u +"%Y-%m-01")
  end_date=$(date -u +"%Y-%m-%d")
  aws_profile=$(jq -r '.env.AWS_PROFILE // "default"' .claude/settings.local.json 2>/dev/null)

  bedrock_cost=$(aws ce get-cost-and-usage \
    --region us-east-1 \
    --profile "$aws_profile" \
    --time-period "Start=${start_date},End=${end_date}" \
    --granularity MONTHLY \
    --metrics UnblendedCost \
    --group-by Type=DIMENSION,Key=SERVICE \
    --query 'ResultsByTime[0].Groups[].[Keys[0],Metrics.UnblendedCost.Amount]' \
    --output text 2>/dev/null \
    | grep "Bedrock Edition" \
    | awk '{sum += $NF} END {printf "%.4f", sum}')

  if [ -n "$bedrock_cost" ] && [ "$bedrock_cost" != "None" ]; then
    printf "💰 Bedrock %s: \$%.4f\n" "$(date +%Y-%m)" "$bedrock_cost"
  fi
fi

表示例:

🤖 Claude Sonnet 4.6 (☁️ Bedrock) │ 💵 Session: $0.0342
📊 Input: 8520 tokens │ Output: 1240 tokens
💰 Bedrock 2026-04: $127.45

注意点

  • Cost Explorer API は1 日に最大 3 回更新 (リアルタイムではない)
  • API 自体にも $0.01/request の料金がかかる
  • 頻繁に呼び出すとコストが膨らむので、キャッシュ推奨

詳細は AWS Cost Explorer 料金 を参照してください。

よくあるトラブルと対処法

モデルが見つからない

Error: Model not found: us.anthropic.claude-sonnet-4-6

解決策: AWS Console で Bedrock モデルを有効化してください。

認証エラー

Error: The security token included in the request is expired

原因: 認証情報が期限切れになっています。

解決策: aws login で再ログインしてください。

aws login --profile bedrock-claude-code

ブラウザで AWS マネジメントコンソールにサインインすると、新しい認証情報が取得されます。

確認方法: 認証情報が有効かどうかを確認するには、以下を実行します。

aws sts get-caller-identity --profile bedrock-claude-code

成功すると以下のような出力が表示されます。

{
    "UserId": "AIDACKCEVSQ6C2EXAMPLE:user@example.com",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/PowerUserAccess/user@example.com"
}

Tips:

  • 認証情報は一時的なもので、有効期限があります
  • 期限切れになった場合は aws login で再ログインするだけ
  • 複数のプロファイルを使い分けることで、アカウント切り替えも簡単

リージョン エラー

Error: Bedrock is not available in region: ap-northeast-3

解決策: Bedrock が利用可能なリージョンに変更してください。

例えば:

  • us-east-1 (米国東部 バージニア北部)
  • us-west-2 (米国西部 オレゴン)
  • ap-northeast-1 (アジアパシフィック 東京リージョン)

注意: ap-northeast-3 (アジアパシフィック 大阪リージョン) は Bedrock 未対応です。

利用可能なリージョンは Amazon Bedrock リージョン を参照してください。

詳細なトラブルシューティングは Claude Code - トラブルシューティング を参照してください。

参考資料

関連ブログ記事

Claude Code 公式ドキュメント

Amazon Bedrock

あとがき

本記事では、Claude Code の API/Amazon Bedrock 切り替えをスキルで自動化し、ステータスバーで可視化する方法を解説しました。 Claude Code をより便利に、より安全に、よりコスト意識を持って使えるようになります。ぜひお試しください。

兄いわく「スキルやステータスバーの実装は、Claude Code に自然言語でお願いしてもできますよ〜」だそうです。 確かに、このブログを読み込ませて「こんな感じのことをやりたいんだけど」と相談してみても良いかもしれませんね。

それではまた、ごきげんよう。

高橋 悠佑 (ポインコ兄) (執筆記事一覧)

健康志向です