Contents
AWS Bedrock の概要と利用開始手順
AWS Bedrock は Claude(Anthropic)・Titan(Amazon)・Jurassic‑2(AI21)など複数の大規模言語モデル(LLM)へ、インフラ管理不要で API 経由に統一的にアクセスできるマネージドサービスです。本章では、アカウント作成から最小構成で実際に呼び出すまでの流れを順番に解説します。
アカウント作成と無料利用枠の設定
AWS コンソールで新規アカウントを取得したら、まず Free Tier に登録しておくことが推奨されます。2026 年 6 月時点では毎月 $100 相当の Bedrock クレジットが付与され、利用開始直後に課金が発生しないよう 請求アラート を設定するだけで安全に試すことができます。
重要:Free Tier のクレジット額・対象リージョンは予告なく変更されます。実際のクレジット内容は公式ページで必ず最新情報を確認してください。
IAM ロールとポリシーの構築
Bedrock へ安全にアクセスするには、最小権限の原則に沿った IAM ロールが必要です。以下では推奨ロールとその権限をまとめます。
必要なポリシー一覧
| ポリシー名 | 主なアクション | 推奨付与範囲 |
|---|---|---|
AmazonBedrockFullAccess |
bedrock:InvokeModel, bedrock:GetModelInvocationMetrics |
開発・テスト用ロールに限定 |
CloudWatchLogsFullAccess |
logs:CreateLogGroup, logs:PutLogEvents |
ログ出力のため必須 |
カスタム BedrockModelReadOnly(例) |
bedrock:ListFoundationModels, bedrock:GetFoundationModel |
特定モデルだけを許可したい場合に使用 |
ロール作成後は、EC2・ECS・Lambda など実行環境のインスタンスプロファイルまたはタスクロールへ紐付けます。*:* のような過剰権限は必ず除外してください。
リージョン選択とサービス有効化
現在 Bedrock は ap-northeast-1(東京) と us-east-1(米国東部) で利用可能です。日本国内ユーザーはレイテンシとデータ居住性の観点から東京リージョンを選択することがベストプラクティスとなります。
留意点:Free Tier のクレジットはリージョン単位ではなくアカウント全体で共有されます。東京リージョンで本番運用を開始したら、必ず請求アラートと予算上限を設定し、予期せぬ課金を防止してください。
主要ファウンデーションモデルの特徴比較と選定基準
Bedrock が提供する代表的な LLM を一覧にまとめました。用途・コスト・トークン上限を軸に、自社プロジェクトに最適なモデルを選びましょう。
モデルカタログ(2026 年 6 月時点)
| モデル | 提供元 | 最大トークン数 | 価格($ / 1M トークン)※入力/出力別 | 主な得意タスク | ライセンス |
|---|---|---|---|---|---|
| Claude 3 Haiku | Anthropic | 100k | 入力 $0.25、出力 $0.75 | 会話・要約・創造的ライティング | 商用利用可(生成物の所有権はユーザー) |
| Titan Text G1‑Lite | Amazon | 30k | 入力 $0.12、出力 $0.48 | 検索補助・コード説明・要約 | AWS 標準利用規約に準拠 |
| Jurassic‑2 Jumbo | AI21 Labs | 50k | 入力 $0.20、出力 $0.60 | 長文生成・ストーリーテリング | 再配布は制限あり |
※価格は 2026 年 6 月の公開料金。最新情報は公式料金ページをご確認ください。
選定基準チェックリスト
- トークン上限 – 長いコンテキストが必要なら Claude 3 Haiku が有利です。
- コスト効率 – 大量リクエストを低価格で回すなら Titan Text G1‑Lite を優先します。
- タスク特性 – コード関連は Titan、創造的文章は Claude または Jurassic‑2 が向いています。
実践アドバイス:プロトタイプ段階で「入力 500 トークン / 出力 200 トークン」程度のベンチマークを実施し、コストとレイテンシを比較すると選定ミスが防げます。
プロンプトエンジニアリングの基礎と実践テンプレート
プロンプト設計は LLM の出力品質を左右する重要工程です。本節では基本概念と、代表的なタスク別テンプレート・パラメータ設定例をご紹介します。
基本概念:インストラクション・Few‑shot・Chain‑of‑Thought
- インストラクション設計 は「何を求めるか」を明確に指示し、曖昧さを排除します。
- Few‑shot は数例の入出力ペアをプロンプトに埋め込む手法で、モデルにタスクフォーマットを学習させます。
- Chain‑of‑Thought (CoT) は途中経過の思考ステップを書かせることで、複雑推論や計算問題の正確性が向上します。
タスク別プロンプトテンプレートと推奨パラメータ
| タスク | テンプレート例(Python f‑string 形式) | 推奨パラメータ |
|---|---|---|
| 日本語要約 | """以下のテキストを300文字以内で要約してください。\n\n【本文】\n{input}"" |
temperature 0.2、top_p 0.9、max_tokens 400 |
| コードレビュー | """次の Python 関数について改善点を3つ提示し、修正後コードも示してください。\n\npython\n{code}\n""" |
temperature 0.4、top_p 0.95、max_tokens 800 |
| 複合質問(CoT) | """以下の問題に対してステップバイステップで解答し、最終的な結論を示してください。\n\n問題: {question}"" |
temperature 0.7、top_p 1.0、max_tokens 1200 |
パラメータ調整ポイント
- temperature:低いほど決定的出力(要約・正確回答)に、高いほど創造性が増します。
- top_p(nucleus sampling):0.9 以上で多様性を保ちつつ、極端なトークン選択は抑制できます。
- max_tokens:入力トークン数+期待出力の合計がモデル上限を超えないように設定してください。
実装ヒント:最初はデフォルト(temperature 0.5、top_p 0.9)で試し、品質が不足する場合のみ段階的に調整すると効率的です。
ハンズオン実装:SDK 呼び出しとコンテキスト管理
ここでは TypeScript(AWS SDK v3) と Python(boto3)のサンプルコードを示します。実際のプロジェクトで使えるよう、エラーハンドリングやリトライロジックも併せて記載しています。
TypeScript サンプル(AWS SDK v3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import { BedrockRuntimeClient, InvokeModelCommand, } from "@aws-sdk/client-bedrock-runtime"; const client = new BedrockRuntimeClient({ region: "ap-northeast-1", // IAM ロールまたは環境変数から自動取得されます }); async function invokeClaude(prompt: string) { const command = new InvokeModelCommand({ modelId: "anthropic.claude-v3-haiku", // 簡易表記 contentType: "application/json", accept: "application/json", body: JSON.stringify({ prompt, max_tokens_to_sample: 400, temperature: 0.2, top_p: 0.9, }), }); try { const response = await client.send(command); const payload = JSON.parse(Buffer.from(response.body).toString()); return payload.completion; } catch (err) { console.error("Bedrock 呼び出しエラー:", err); throw err; } } // 使用例 (async () => { const text = "AWS Bedrock は..."; const result = await invokeClaude(`以下の文章を要約してください。\n\n${text}`); console.log("要約結果 →", result); })(); |
Python サンプル(boto3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import boto3, json, time from botocore.exceptions import ClientError client = boto3.client("bedrock-runtime", region_name="ap-northeast-1") def invoke_titan(prompt: str) -> str: body = { "prompt": prompt, "max_tokens_to_sample": 500, "temperature": 0.4, "top_p": 0.95 } try: resp = client.invoke_model( modelId="amazon.titan-text-g1-lite", contentType="application/json", accept="application/json", body=json.dumps(body) ) result = json.loads(resp["body"].read()) return result["completion"] except ClientError as e: print("Bedrock API エラー:", e.response["Error"]["Message"]) raise # 使用例 if __name__ == "__main__": txt = "AWS Bedrock は..." print(invoke_titan(f"以下の文章を300文字で要約してください。\n\n{txt}")) |
コンテキスト維持とトークン最適化手法
会話履歴のスライディングウィンドウ
直近 N 件(例: 5 回)のユーザー・モデル発言を保持し、合計トークン数が上限に近づいたら古いターンを削除します。Python の場合は deque、TypeScript は配列とインデックスで実装できます。
要約リサイクル
長期的な対話履歴が必要なときは、過去の会話全体を要約して「システムプロンプト」へ組み込みます。要約時は temperature 0.1 で安定した出力を得られます。
トークン削減テクニック
- 不要な改行・インデントは除去し、JSON は
separators=(',', ':')でコンパクト化。 - 同一語句の繰り返しは変数置換や短縮形に置き換えることで約 5〜10% の削減が期待できます。
モニタリング:
max_tokens_to_sampleと入力トークン数の合計がモデル上限(例: Claude は 100k)を超えないよう、リクエスト前にトークンカウンターで検証してください。
運用・最適化:テスト評価・セキュリティ・コスト管理とトラブルシューティング
本章では、実運用に向けた品質チェック、A/B テストの実装例、セキュリティベストプラクティス、およびコスト削減策をまとめます。
出力品質チェックリストと A/B テスト実装例
| 項目 | 確認ポイント |
|---|---|
| 正確性 | 事実情報が外部データと合致しているか |
| 一貫性 | 会話全体で指示がぶれていないか |
| 文体・トーン | 指定したフォーマットに沿っているか |
| 安全性 | 不適切表現や機密情報漏洩が無いか |
Python でのシンプルな A/B テスト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import random, json, boto3 client = boto3.client("bedrock-runtime", region_name="ap-northeast-1") def ab_test(prompt: str, model_a: str, model_b: str): chosen_model = model_a if random.random() < 0.5 else model_b resp = client.invoke_model( modelId=chosen_model, contentType="application/json", accept="application/json", body=json.dumps({"prompt": prompt, "max_tokens_to_sample": 300}) ) return json.loads(resp["body"].read())["completion"], chosen_model # 使用例 result, used = ab_test( "次のニュース記事を要約してください。", "anthropic.claude-v3-haiku", "amazon.titan-text-g1-lite" ) print(f"使用モデル: {used}\n結果:\n{result}") |
セキュリティ・ガバナンスのベストプラクティス
- TLS 必須:Bedrock への全通信は TLS 1.2 以上で暗号化されます。機密データを送る場合は、追加で AWS KMS によるペイロード暗号化を検討してください。
- 最小権限 IAM:
bedrock:InvokeModelと対象モデル ARN のみ許可する条件付きポリシー(StringEquals)を設定し、不要な権限は除外します。 - ログ・監査:CloudWatch Logs と CloudTrail を連携させ、すべての API 呼び出しを記録。異常な呼び出し頻度や失敗パターンは CloudWatch アラームで通知します。
コストモニタリングと削減テクニック
| 手法 | 内容 |
|---|---|
| トークン使用量メトリクス | BedrockTokensUsed カスタムメトリクスを CloudWatch に送信し、閾値超過時に SNS 通知。 |
| ハイブリッドモデル戦略 | 大量の低精度タスクは Titan で処理し、高品質が必要な箇所だけ Claude に切り替える。 |
| バッチ呼び出し | 複数リクエストを 1 回にまとめることでヘッダーオーバーヘッドとレイテンシを削減。 |
予算策定のポイント:Free Tier クレジットは毎月リセットされますが、実運用前に「予測トークン数 × 単価」で概算見積もりを作成し、承認済み予算と突き合わせておくと安心です。
よくあるエラーと対処法
| エラーコード | 主な原因 | 推奨対策 |
|---|---|---|
AccessDeniedException |
IAM ポリシー不足 | bedrock:InvokeModel と対象モデル ARN を許可するポリシーを追加 |
ThrottlingException |
同時呼び出し上限超過(デフォルト 10 RPS) | 指数バックオフ付きリトライロジック実装、必要に応じて Service Quotas で増枠申請 |
ModelErrorException (InvalidPrompt) |
プロンプト長・文字種がモデル制約違反 | トークンカウンタで事前チェックし、UTF‑8 エスケープを徹底 |
InternalServerError |
サービス側一時障害 | 5xx リトライ+ CloudWatch 指標で障害期間を把握 |
まとめ
- 利用開始は Free Tier のクレジット取得と IAM ロール設定だけで完了。東京リージョン推奨、請求アラートは必ず設定してください。
- モデル選定はトークン上限・価格・タスク特性を基に比較表を活用し、ベンチマークで実測データを取得すると失敗が減ります。
- プロンプト設計はインストラクション・Few‑shot・CoT を組み合わせ、パラメータは目的別テンプレートで調整してください。
- SDK 実装例とコンテキスト管理手法を取り入れれば、スケーラブルなアプリが短時間で構築可能です。
- 運用フェーズでは品質チェックリスト・A/B テスト・最小権限 IAM・コストメトリクスを組み合わせて安全かつ経済的にサービス提供できます。
本ガイドをベースに、ぜひ実際のプロジェクトで AWS Bedrock を活用し、AI‑駆動アプリケーションの開発スピードと品質向上を体感してください。