はじめに
AWS Bedrockは日々進化しており、特に以下の2つの機能は運用コストとパフォーマンスに大きな影響を与えます:
- Inference Profile: クロスリージョン推論とコスト追跡
- Prompt Caching: 頻繁に使用するプロンプトのキャッシュによる高速化・コスト削減
本記事では、これらの機能の詳細と実際の使い方を解説します。
Inference Profileとは
概要
Inference Profileは、AWS Bedrockのモデル呼び出しを最適化するための仕組みです。model IDの前に地理的プレフィックス(us.
、eu.
、apac.
)が付いているのを見たことがあるでしょうか?これがInference Profileの識別子です。
なぜus.
プレフィックスが必要なのか
従来のmodel ID(例:anthropic.claude-3-7-sonnet-20250219-v1:0
)では、一部の新しいモデルで以下のエラーが発生します:
Invocation of model ID with on-demand throughput isn't supported
これは、新しいモデルがInference Profileの使用を前提としているためです。正しくは以下のように指定する必要があります:
us.anthropic.claude-3-7-sonnet-20250219-v1:0
地理的プレフィックスの種類
プレフィックス | 対象地域 | 例 |
---|---|---|
us. |
アメリカ地域 | us.anthropic.claude-3-7-sonnet-20250219-v1:0 |
eu. |
ヨーロッパ地域 | eu.anthropic.claude-3-7-sonnet-20250219-v1:0 |
apac. |
アジア太平洋地域 | apac.anthropic.claude-3-7-sonnet-20250219-v1:0 |
日本(東京リージョン)を含むアジア太平洋地域ではapac.
を使用します(jp.
ではありません)。
Inference Profileの2つのタイプ
1. System-defined Inference Profiles(システム定義)
AWSが事前定義したprofileで、以下の特徴があります:
- 自動ルーティング: 複数リージョンへのトラフィック分散
- 負荷分散: 予期しないトラフィック急増への対応
- 高可用性: 一つのリージョンに問題があっても他のリージョンで処理継続
2. Application Inference Profiles(アプリケーション定義)
ユーザーが作成するカスタムprofileで、以下の用途に使用:
- コスト追跡: タグを使用した部門別・プロジェクト別のコスト管理
- 使用量監視: CloudWatchによるメトリクス収集
- アクセス制御: 特定のprofile経由でのみモデル利用を許可
AWS CLIでのInference Profile操作
利用可能なInference Profileの確認
# すべてのinference profileを表示
aws bedrock list-inference-profiles --region us-east-1
# システム定義のみ表示
aws bedrock list-inference-profiles --type-equals SYSTEM_DEFINED --region us-east-1
# アプリケーション定義のみ表示
aws bedrock list-inference-profiles --type-equals APPLICATION --region us-east-1
Application Inference Profileの作成
# 単一リージョン用
aws bedrock create-inference-profile \
--inference-profile-name "engineering-claude-profile" \
--description "Engineering team Claude usage tracking" \
--model-source "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20241022-v2:0" \
--tags '[{"key":"Department","value":"Engineering"},{"key":"Project","value":"AI-Assistant"}]' \
--region us-east-1
# マルチリージョン用(system-defined profileベース)
aws bedrock create-inference-profile \
--inference-profile-name "multi-region-claude" \
--description "Multi-region Claude profile for high availability" \
--model-source "arn:aws:bedrock:us-east-1::inference-profile/us.anthropic.claude-3-5-sonnet-20241022-v2:0" \
--tags '[{"key":"Environment","value":"Production"}]' \
--region us-east-1
Inference Profileを使用したモデル呼び出し
# System-defined inference profileを使用
aws bedrock-runtime invoke-model \
--model-id "us.anthropic.claude-3-7-sonnet-20250219-v1:0" \
--body '{"anthropic_version":"bedrock-2023-05-31","max_tokens":1024,"messages":[{"role":"user","content":[{"type":"text","text":"Hello, world!"}]}]}' \
--cli-binary-format raw-in-base64-out \
response.json \
--region us-east-1
# Application inference profile ARNを使用
aws bedrock-runtime invoke-model \
--model-id "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/your-profile-id" \
--body '{"anthropic_version":"bedrock-2023-05-31","max_tokens":1024,"messages":[{"role":"user","content":[{"type":"text","text":"Explain inference profiles"}]}]}' \
--cli-binary-format raw-in-base64-out \
response.json \
--region us-east-1
Inference Profileの詳細確認と削除
# 詳細情報の取得
aws bedrock get-inference-profile \
--inference-profile-identifier "us.anthropic.claude-3-7-sonnet-20250219-v1:0" \
--region us-east-1
# Application inference profileの削除
aws bedrock delete-inference-profile \
--inference-profile-identifier "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/your-profile-id" \
--region us-east-1
Prompt Cachingとは
概要
Prompt Cachingは、頻繁に使用されるプロンプトの一部をキャッシュすることで、以下を実現する機能です:
- レスポンス時間の短縮: 最大85%の高速化
- コスト削減: 最大90%のコスト削減
- 効率的なリソース利用: 同じ計算を繰り返さない
対応モデル一覧(2025年5月現在)
一般提供(GA)対応モデル:
- Claude 3.7 Sonnet
- Claude 3.5 Haiku
- Claude Sonnet 4(最新※)
- Claude Opus 4(最新※)
- Amazon Nova Micro
- Amazon Nova Lite
- Amazon Nova Pro
(※) ドキュメントには明記されていませんが、価格表にはcache read/writeの項目が存在するため、対応していると判断しました。
限定対応:
- Claude 3.5 Sonnet v2(既存ユーザーのみ、新規アクセス停止)
Prompt Cachingの料金体系
処理タイプ | Anthropicモデル | Amazon Novaモデル |
---|---|---|
Cache Write(初回処理) | 通常料金 + 25% | 追加料金なし(※) |
Cache Read(再利用) | 通常料金の10%(90%割引) | 通常料金の10%(90%割引) |
ストレージ | 無料 | 無料 |
(※) 現在のAWS公式情報では、Amazon NovaモデルはCache Write時の追加料金が発生しない設計となっています(2024年12月AWS公式ブログより)。ただし、サービスの進化に伴い料金体系が変更される可能性があるため、最新の価格表を定期的に確認することを推奨します。
技術的仕様
項目 | 仕様 |
---|---|
キャッシュ有効期間 | 5分(使用のたびにリセット) |
最小トークン数 | 1024トークン(Claude Opus 4、Sonnet 4、3.7、3.5) 2048トークン(Claude Haiku) |
最大キャッシュポイント数 | 4個(Claudeモデル) 1個(Amazon Novaモデル) |
Prompt Cachingの使用方法
Converse APIでの使用例
# Claude 3.7 Sonnetでのプロンプトキャッシング
aws bedrock-runtime converse \
--model-id "anthropic.claude-3-7-sonnet-20250219-v1:0" \
--messages '[
{
"role": "user",
"content": [
{"text": "以下は長いコンテキストです。このドキュメントについて質問に答えてください。[長いドキュメント内容...]"},
{"cachePoint": {"type": "default"}},
{"text": "このドキュメントの要点を3つ教えてください。"}
]
}
]' \
--region us-east-1
# Claude Sonnet 4でのプロンプトキャッシング
aws bedrock-runtime converse \
--model-id "claude-sonnet-4-20250514" \
--messages '[
{
"role": "user",
"content": [
{"text": "システムプロンプト: あなたは専門的なコードレビューアです。以下のガイドラインに従ってください。[詳細なガイドライン...]"},
{"cachePoint": {"type": "default"}},
{"text": "次のPythonコードをレビューしてください: [コード]"}
]
}
]' \
--region us-east-1
InvokeModel APIでの使用例(Claude 3.7 Sonnet)
aws bedrock-runtime invoke-model \
--model-id "anthropic.claude-3-7-sonnet-20250219-v1:0" \
--body '{
"anthropic_version": "bedrock-2023-05-31",
"system": "あなたは技術文書の専門家です。",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "以下のAPIドキュメントを参照してください。[長いAPIドキュメント...]",
"cache_control": {
"type": "ephemeral"
}
},
{
"type": "text",
"text": "このAPIの使用例を教えてください。"
}
]
}
],
"max_tokens": 2048,
"temperature": 0.5
}' \
--cli-binary-format raw-in-base64-out \
response.json \
--region us-east-1
プロンプトキャッシング対応の確認方法
価格表による確認(推奨)
恐らく確実な方法は、AWS公式価格表でプロンプトキャッシングの料金項目があるかを確認することです。対応モデルには必ず「Cache Read」「Cache Write」の料金が記載されています。
APIレスポンスによる確認
実際にAPIを呼び出した際のレスポンスに以下のフィールドが含まれているかチェック:
{
"usage": {
"input_tokens": 1000,
"output_tokens": 500,
"cache_read_input_tokens": 800, // キャッシュから読み取ったトークン数
"cache_write_input_tokens": 200 // キャッシュに書き込んだトークン数
}
}
対応モデル確認スクリプト
#!/bin/bash
echo "=== プロンプトキャッシング対応モデルの確認 ==="
# 2025年5月現在の対応モデル
CACHING_MODELS=(
"anthropic.claude-3-7-sonnet-20250219-v1:0"
"anthropic.claude-3-5-haiku-20241022-v1:0"
"claude-sonnet-4-20250514"
"claude-opus-4-20250514"
"amazon.nova-micro-v1:0"
"amazon.nova-lite-v1:0"
"amazon.nova-pro-v1:0"
)
for model in "${CACHING_MODELS[@]}"; do
echo "✓ $model"
# モデルが実際に利用可能かチェック
if aws bedrock get-foundation-model --model-identifier "$model" --region us-east-1 >/dev/null 2>&1; then
echo " → ✅ 利用可能"
else
echo " → ❌ 利用不可(リージョンまたはアクセス制限)"
fi
echo
done
実用的な活用例
コスト追跡のためのApplication Inference Profile
# 部門別コスト追跡の設定
aws bedrock create-inference-profile \
--inference-profile-name "marketing-ai-usage" \
--description "Marketing department AI model usage" \
--model-source "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-7-sonnet-20250219-v1:0" \
--tags '[
{"key":"Department","value":"Marketing"},
{"key":"CostCenter","value":"MKT-001"},
{"key":"Environment","value":"Production"}
]' \
--region us-east-1
大量ドキュメント処理でのPrompt Caching活用
import boto3
import json
client = boto3.client("bedrock-runtime", region_name="us-east-1")
def analyze_document_with_caching(document_text, questions):
"""
長いドキュメントを一度キャッシュし、複数の質問を効率的に処理
"""
base_prompt = f"""
以下のドキュメントを分析してください:
{document_text}
上記のドキュメントについて回答してください。
"""
results = []
for i, question in enumerate(questions):
messages = [
{
"role": "user",
"content": [
{"text": base_prompt},
{"cachePoint": {"type": "default"}}, # ドキュメント部分をキャッシュ
{"text": f"質問: {question}"}
]
}
]
response = client.converse(
modelId="anthropic.claude-3-7-sonnet-20250219-v1:0",
messages=messages
)
# キャッシュ効果の確認
usage = response.get('usage', {})
cache_read = usage.get('cacheReadInputTokens', 0)
cache_write = usage.get('cacheWriteInputTokens', 0)
print(f"質問 {i+1}: Cache Read={cache_read}, Cache Write={cache_write}")
results.append(response['output']['message']['content'][0]['text'])
return results
# 使用例
document = """
[長いAPIドキュメントやマニュアルの内容...]
"""
questions = [
"このAPIの主な機能は何ですか?",
"認証方法について教えてください。",
"エラーハンドリングの方法は?",
"レート制限はありますか?"
]
answers = analyze_document_with_caching(document, questions)
CloudWatchでのモニタリング
プロンプトキャッシングメトリクスの監視
# CloudWatchダッシュボードでのメトリクス確認用設定
aws cloudwatch put-dashboard \
--dashboard-name "BedrockPromptCaching" \
--dashboard-body '{
"widgets": [
{
"type": "metric",
"properties": {
"metrics": [
["AWS/Bedrock", "CacheReadInputTokenCount"],
[".", "CacheWriteInputTokenCount"]
],
"period": 300,
"stat": "Sum",
"region": "us-east-1",
"title": "Prompt Caching Usage"
}
}
]
}'
Application Inference Profileのコスト分析
AWS Cost Explorerでタグベースの分析:
- Cost Explorer → 「Group by」で「Tag」を選択
- 作成したタグ(Department、Project等)でフィルタリング
- 時系列でのコスト推移を確認
注意事項とベストプラクティス
Inference Profile使用時の注意点
-
IAM権限の設定: 適切な
bedrock:InvokeModel
権限が必要 - リージョン制限: 一部のモデルは特定リージョンでのみ利用可能
- 料金計算: 呼び出し元リージョンの価格体系が適用される
Prompt Caching最適化のコツ
- コンテキストの構造化: 固定部分と変動部分を明確に分離
- 最小トークン数の確保: キャッシュポイント前に十分なトークン数を配置
- キャッシュの有効活用: 5分以内に再利用できるワークフローの設計
- コスト効果の測定: cache hit率とコスト削減効果の継続的な監視
避けるべきアンチパターン
# ❌ 悪い例:タイムスタンプが含まれてキャッシュが無効化される
messages = [
{
"role": "user",
"content": [
{"text": f"現在時刻: {datetime.now()} - ドキュメント分析を行います。[ドキュメント内容]"},
{"cachePoint": {"type": "default"}},
{"text": "質問内容"}
]
}
]
# ✅ 良い例:固定コンテンツのみキャッシュ
messages = [
{
"role": "user",
"content": [
{"text": "ドキュメント分析を行います。[ドキュメント内容]"},
{"cachePoint": {"type": "default"}},
{"text": f"現在時刻: {datetime.now()} - 質問内容"}
]
}
]
まとめ
AWS BedrockのInference ProfileとPrompt Cachingは、本格的なAIアプリケーション運用において必須の機能です:
- Inference Profile: マルチリージョン展開とコスト管理の最適化
- Prompt Caching: 頻繁な処理の高速化とコスト削減
特にClaude Sonnet 4などの最新モデルでは、これらの機能を活用することで大幅なパフォーマンス向上とコスト最適化が期待できます。
実装前に必ず価格表での対応確認と、小規模でのテスト実行を行い、期待する効果が得られることを確認してから本格導入することをお勧めします。
参考URL
- AWS Bedrock Inference Profiles - 公式ドキュメント
- AWS Bedrock Prompt Caching - 公式ドキュメント
- AWS Bedrock 価格表
- Anthropic Prompt Caching - 公式ドキュメント
- AWS CLI Bedrock コマンドリファレンス
- AWS Bedrock Cross-Region Inference - AWSブログ
- Prompt Caching 効果的な活用 - AWSブログ
- Amazon Bedrockプロンプトキャッシング(プレビュー)とインテリジェントルーティング - AWSブログ
- Claude Sonnet 4 - Anthropic公式