Bedrockを使ってみよう
この章では、Amazon BedrockでAnthropic Claudeを使い始める初回利用フォーム提出から、コンソールPlaygroundでの対話、LambdaからのConverse API呼び出しまでをハンズオン形式で学習します。これにより、BedrockでClaudeを呼び出す最初の一歩ができるようになります。
1. 本章の概要
1.1 本章の目的
生成AIをAWS内から呼び出すには、AWSのマネージド生成AI基盤である Amazon Bedrock が起点になります。まずはBedrockで扱いたいモデル(Anthropic Claude)の利用申請を済ませ、コンソール上とLambda経由の2つの呼び出し方を体験して、BedrockでClaudeを使うための最短ステップを押さえます。本章は、AI基盤講座で最初にBedrockを触るハンズオンです。
1.2 ハンズオンの流れ
Anthropic Claudeの初回利用フォームを提出してモデルを呼び出せる状態にしたあと、コンソールのPlaygroundで対話を試します。最後にLambda関数からConverse APIを呼び出して1問1答のシンプルな応答を得るところまでを扱います。
1.3 事前準備
前提となる講座
この章では、以下の知識を前提としています。自信がない場合は先に関連講座を実施してみましょう。
| 講座名 | 必要な知識 |
|---|---|
| Lambda概要 | Lambda関数の作成・実行、実行ロールなどのLambdaの基本操作 |
必要なツール
この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。
| ツール名 | 関連箇所 | 理由 |
|---|---|---|
| Python | Pythonのインストール | Bedrockを呼び出すLambda関数のコードを記述・実行するために使用する |
必要なアカウント
この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。
| アカウント名 | 関連箇所 | 理由 |
|---|---|---|
| AWSアカウント | AWSアカウントの作成 | BedrockとLambdaを利用する環境として使用する |
2. ハンズオンの概要
2.1 今回使うモデル
本章と、本講座以降のハンズオンでは、Anthropic Claude を使っていきます。ClaudeはAnthropic社が開発している基盤モデルで、対話や要約・コード生成・複雑な指示への追従など、汎用的な用途で高い性能を発揮するのが特徴です。
Claudeには、性能・レイテンシ・料金のバランスが異なる主要なグレードがあります。
| モデル | 特徴 | 向いているケース |
|---|---|---|
| Haiku | 最も軽量で、応答が速く単価も安い | 大量呼び出し・要約・分類など、シンプルなタスクを高頻度で扱う場面に向く |
| Sonnet | 性能・レイテンシ・料金のバランスが取れている | 対話・生成・エージェント・RAGなど、汎用的な用途に使える |
| Opus | 最も高性能で、複雑な推論や長文の扱いに強いが、単価は高い | 難易度の高い分析・専門領域の生成・エージェントの高度な推論に向く |
| Fable | 最上位クラスで、長時間の自律実行や高度なコーディング・ビジョン処理に対応する | 数日にわたる自律タスク実行や、複雑なドキュメント理解を必要とする用途に向く |
Fable は 2026年6月に一般提供が開始されたばかりの新しいモデルです。今後、仕様・料金・提供リージョンなどの情報が更新される可能性があるため、実案件で採用を検討する際は Claude Fable 5(AWS公式ドキュメント) で最新情報を確認してください。
本講座のハンズオンでは、汎用的な用途に適した Sonnet を採用します。多くの実案件で「まず Sonnet で試して、必要に応じて Haiku・Opus・Fable に切り替える」のが現実的な進め方であり、本講座のハンズオン内容も Sonnet で問題なく完走できるためです。
なお、Haiku や Opus・Fable を試したい場合は、以降の手順でモデル選択箇所を差し替えれば同じ流れで動作します。料金の相場感を掴む目的で、Haiku と Sonnet を並べて呼び出しコストを比較してみるのも良い体験になります。
2.2 Bedrockのモデル利用と初回利用フォーム
Bedrockでは、リージョンで提供されているサーバーレスの基盤モデルは、SDKやAPI・コンソールから初回に呼び出したタイミングで自動的に利用可能になります。以前は「モデルアクセス」画面から1つずつ有効化する運用でしたが、この画面は2025年に廃止されました。
ただし、Anthropic Claude モデル は例外的に、初回利用時に「First Time Use (FTU) フォーム」の提出が必要です。用途と関連URLを申告するフォームで、1アカウント(または組織の管理アカウント)で1回提出すれば、以降は自動的に呼び出せる状態になります。本章では、これから使うClaude Sonnetを対象にこのフォームを提出します。
2.3 Playgroundとは
PlaygroundはBedrockのコンソール上でモデルと対話できる画面です。コードを書かずにモデルの応答を確かめられるため、モデル選定や、プロンプトの検討時に使います。
2.4 Converse APIとは
Bedrockには、モデルとチャット形式でやり取りするための Converse API が用意されています。プロバイダごとにフォーマットが異なる基盤モデル呼び出しを、messages(ユーザとモデルのやり取り)を配列で渡す統一形式で扱えるようになっており、モデルを差し替えても呼び出しコードを大きく変えずに済みます。
本章ではこの Converse API を Lambda から呼び出します。ここではもっともシンプルな1問1答の使い方だけを扱い、会話履歴を持たせるマルチターン会話やツール呼び出しといった応用は、この後の LambdaによるBedrockの応用操作を身につけよう で紹介します。
2.5 ハンズオン全体の流れ
まずコンソールからAnthropicの初回利用フォームを提出し、Claude Sonnetを呼び出せる状態を作ります。次にPlaygroundでモデルとの対話を確認して料金・トークン感覚をつかみ、その後LambdaからConverse APIをシンプルに呼び出して、コード経由でもモデルが応答することを確認します。
3. Bedrockの初回利用
Bedrockでモデルを呼び出せるようにするために、まずAnthropic Claudeの初回利用フォームを提出します。その後、コードを書く前にコンソールのPlaygroundで実際にモデルと対話し、応答・トークン数・レイテンシの感覚を掴みます。
3.1 Anthropic Claudeの初回利用フォームを提出する
AWSマネジメントコンソールで Amazon Bedrock を開き、リージョンが 東京リージョン(ap-northeast-1)になっていることを確認します。
左メニューの「モデルカタログ」を開き、Anthropicの Claude Sonnet を選択します。初回に開いたタイミングで用途を尋ねるフォーム(Use case details)が表示されるので、以下のような内容で入力・送信します。
- 用途の説明: 「学習目的でBedrockを試す」など、実際の用途を記入する
- 関連URL: 会社サイトや、個人の場合はGitHubプロフィール・ポートフォリオページなどを記入する
フォーム送信直後にモデルへのアクセスが付与されます。以降はPlaygroundやAWS CLIから通常通り呼び出せます。
| ⚠️ フォームが表示されない場合 |
|---|
| 同じAWSアカウント(または組織の管理アカウント)で過去に提出済みの場合、フォームは表示されません。この手順はスキップして、次の「Playgroundで対話してみる」に進んでください。 |
| ⚠️ 呼び出し時に「利用不可」や AccessDeniedException が返る場合 |
|---|
選択したリージョンで対象モデルが提供されていない可能性があります。左上のリージョンセレクタで バージニア北部リージョン(us-east-1)に切り替えてモデルカタログを再度確認してください。バージニア北部リージョンで利用する場合、以降の手順もそのリージョンで実施します。 |
3.2 Playgroundで対話してみる
Claude Sonnetを呼び出せる状態になったら、Playgroundからモデルと対話してみます。
左メニューの「Playground」を開きます。中央に「Select a model to get started」と表示されるので、「モデルを選択」をクリックします。

モデル選択のダイアログが開きます。以下の順で選択し、右下の「適用」をクリックします。
カテゴリ: モデルプロバイダーから「Anthropic」を選ぶモデル: 一覧から「Claude Sonnet」の最新バージョンを選ぶ(「レガシー」ラベルが付いたものは旧世代なのでスキップ)推論: 推論プロファイル → クロスリージョンから「JP Anthropic Claude Sonnet …」を選ぶ

推論プロファイルには「JP」「Global」の2種類のクロスリージョン推論プロファイルが用意されており、それぞれ振り分け先の範囲が異なります(Bedrock概要 で扱ったクロスリージョン推論の仕組みです)。
JP: 東京リージョン(ap-northeast-1)を主軸に、大阪リージョン(ap-northeast-3)など日本国内のリージョンに閉じてトラフィックを振り分けるGlobal: 日本以外も含む世界の対応リージョンに広くトラフィックを振り分ける。スループットや高負荷時のスロットリング耐性はJPより高いが、推論処理が日本国外で実行される可能性がある
なお、Globalを選んでも保存データ(CloudWatchログ・Knowledge Baseなど)はソースリージョンから移らず、日本国外で動くのは推論処理そのものだけです。それでも「推論処理を日本国内に閉じたい」というデータ処理場所の制約がある業務利用ではJPが選ばれやすいため、本章でもJPを使います。スループットを重視する場合は、Globalに差し替えても以降の手順はそのまま動作します。
適用するとPlaygroundのチャット画面に切り替わり、画面上部に選択したモデル名(例: Claude Sonnet 4.6)が表示されます。なお、Claude Sonnet 4.6 は本章作成時点の最新版で、閲覧時期によっては後続バージョン(4.7・5 など)がリリースされている場合があります。その場合はモデル選択の際に、その時点で最新のバージョンを選んで構いません。
下部の入力欄に以下のプロンプトを貼り付けます。
AWSのAmazon Bedrockについて、初学者向けに3つのポイントで説明してください。
プロンプトを入力したら、右下の「実行」をクリックします。

数秒〜十数秒で回答が返ります。モデル名の右横に 入力トークン数・出力トークン数・レイテンシー(ミリ秒)が表示されるので、どれくらいトークンを消費したか、応答までにどれくらい時間がかかったかを確認できます。トークン数はBedrockの料金の基準になるため、Playgroundは料金感を掴む用途にも使えます。

Playgroundに応答が返ってくれば、Claude Sonnetを呼び出せる状態が整っています。
4. LambdaからBedrockを呼び出す
Playgroundでモデルの動きが確認できたので、次はLambdaからBedrockを呼び出します。呼び出しに使う推論プロファイル ID を控えたうえで、実行用のIAMロールを作成し、Lambda関数にConverse APIをシンプルに呼び出すコードを書いて、Playgroundで見たのと同じ体験がコードからも得られることを確認します。
4.1 推論プロファイル ID を控える
LambdaからConverse APIを呼び出す際に指定する 推論プロファイル ID を、まず控えておきます。Claude Sonnet 4.6 は東京リージョンでは推論プロファイル経由での呼び出しが必要で、Playgroundで選んだプロファイル(JP Anthropic Claude Sonnet 4.6)の ID をLambdaでも使います。
Bedrockコンソール左メニューの「推論プロファイル」を開きます。「システム定義の推論プロファイル」一覧が表示されるので、検索フィールドで名前を入力するか、リストから JP Anthropic Claude Sonnet 4.6 の行を探します。「推論プロファイル ID」列に表示されている jp.anthropic.claude-sonnet-4-6 のような 推論プロファイル ID を、右のコピーアイコンから控えておきます。

| 💡 ポイント |
|---|
モデルカタログ画面に表示される anthropic.claude-sonnet-4-6 はモデル ID(基盤モデル自体の識別子)で、こちらではありません。推論プロファイル ID(jp. プレフィックス付き)は、モデルとルーティング先リージョンをまとめた呼び出しエンドポイントの識別子です。東京リージョンではこちらを使う必要があります。 |
4.2 Lambda関数用のIAMロールを作成する
Bedrockを呼び出せるIAMロールを用意しないと、Lambdaからモデル呼び出しに失敗します。今回はLambdaの実行ロールに、Bedrockのモデル呼び出し権限を付与したロールを新しく作成します。
まずロールの器を作り、そのあとに Bedrock 呼び出し権限をインラインポリシーで追加する順で進めます。
ロールを作成する
IAMコンソールで左メニューの「ロール」を開き、右上の「ロールを作成」をクリックします。

ステップ1「信頼されたエンティティを選択」で、以下を選択して右下の「次へ」をクリックします。
信頼されたエンティティタイプ: 「AWSのサービス」を選ぶ(Lambdaが引き受けるロールのため)サービスまたはユースケース: 「Lambda」を選ぶユースケース: 「Lambda」を選ぶ

ステップ2「許可を追加」で、検索フィールドに AWSLambdaBasicExecutionRole と入力し、表示されたポリシーのチェックボックスをオンにします。CloudWatch Logsへの書き込みに必要な最低限の権限を付与するAWS管理ポリシーです。

そのまま画面下部までスクロールして、右下の「次へ」をクリックします(許可の境界を設定 はオプションなので触りません)。

ステップ3「名前、確認、および作成」で、ロール名に bedrock-hello-lambda-role を入力します。

下にスクロールして信頼ポリシー・許可ポリシーの内容を確認したら、右下の「ロールを作成」をクリックします。

「ロール bedrock-hello-lambda-role が作成されました」の緑バナーが表示され、ロール一覧に bedrock-hello-lambda-role が現れれば、ロールの作成は完了です。

Bedrock 呼び出し権限をインラインポリシーで追加する
続いて、作成したロールに Bedrock 呼び出し権限を追加します。ロール一覧から bedrock-hello-lambda-role をクリックして詳細画面を開き、「許可を追加」→「インラインポリシーを作成」を選択します。

ポリシーエディタが開きます。右上のタブを JSON に切り替えて、以下の内容を貼り付けます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "*"
}
]
}
bedrock:InvokeModel は、Bedrock でのモデル呼び出しに対応するIAMアクションです。InvokeModel API だけでなく、今回コードで直接使う Converse API もこの権限で許可されます(Converse は内部的に InvokeModel を呼び出す形になっており、bedrock:Converse という独立したアクションは存在しません)。
なお、本章では検証を優先して "Resource": "*" を指定していますが、実運用では呼び出しを許可するモデル(推論プロファイル)の ARN を明示して権限を絞るのがベストプラクティスです。IAM 権限の絞り方は Guardrailsで安全なモデル呼び出しを設計しよう の IAM 設計のセクションで、Guardrails 適用強制の Condition と一緒に扱います。
貼り付けたら、右下の「次へ」をクリックします。

「確認して作成」画面で、ポリシー名に bedrock-hello-lambda-policy を入力します。下部の「このポリシーで定義されている許可」で Bedrock サービスの権限が付与されていることを確認し、右下の「ポリシーの作成」をクリックします。

「ポリシー bedrock-hello-lambda-policy が作成されました」の緑バナーが表示され、bedrock-hello-lambda-role の許可ポリシー一覧に AWSLambdaBasicExecutionRole(AWS管理)と bedrock-hello-lambda-policy(カスタマーインライン)の2つが並んでいれば、ロールの準備は完了です。

4.3 Lambda関数を作成する
Bedrock を呼び出す Lambda 関数を作成します。先ほど作成した実行ロール bedrock-hello-lambda-role を割り当てたうえで、タイムアウトと環境変数(推論プロファイル ID)を設定するところまで進めます。
関数の器を作る
Lambdaコンソールで左メニューの「関数」を開き、右上の「関数を作成」をクリックします。

「関数を作成」画面で、以下の設定を入力します。
作成方法: 「一から作成」を選ぶ(サンプルは使わず自分でコードを書くため)関数名:bedrock-helloを入力(Bedrock の動作確認用と分かる名前)ランタイム: 「Python 3.14」を選ぶ(本章でのサンプルコードに合わせる)

続いて画面下部の「▼ その他の設定」を展開します。「カスタム実行ロール」のトグルをオンにして、IAM アクセス許可 に先ほど作成した bedrock-hello-lambda-role を選択します。指定できたら、右下の「関数を作成」をクリックします。

「関数 "bedrock-hello" を正常に作成しました」の緑バナーが表示され、関数の詳細画面に遷移すれば、関数の器の作成は完了です。

タイムアウトを1分に伸ばす
デフォルトのタイムアウトは3秒で、Bedrockの応答(数秒〜十数秒)を受け取り切る前に Lambda がタイムアウトしてしまいます。1分 に伸ばします。
関数詳細画面で「設定」タブを開き、左メニューの「一般設定」を選択して、右上の「編集」をクリックします。

「基本設定を編集」画面で、タイムアウトを 1 分 0 秒 に変更します。他の項目(メモリ・実行ロールなど)はそのままで、右下の「保存」をクリックします。

環境変数に推論プロファイル ID を設定する
続いて、先ほど控えた推論プロファイル ID を Lambda の環境変数として設定します。コードにハードコードしてしまうとモデルを差し替えたくなった時にコード変更&再デプロイが必要になりますが、環境変数にしておけば Lambda コンソール側で値を書き換えるだけで対応できます。実運用でも「開発/本番でモデルを切り替える」「新モデルへの入れ替え」などで環境変数化がよく採用されます。
「設定」タブの左メニューから「環境変数」を選択して、右上の「編集」をクリックします。

「環境変数を編集」画面で「環境変数の追加」から、以下を入力して右下の「保存」をクリックします。
| キー | 値 |
|---|---|
MODEL_ID |
先ほど控えた推論プロファイル ID(例: jp.anthropic.claude-sonnet-4-6) |

これで Lambda 関数の器・タイムアウト・環境変数の準備が整いました。続いてコードを書いていきます。
4.4 Lambda関数のコードを書く
Lambda関数のコードを、Bedrock の Converse API を1回呼び出して応答テキストを返すシンプルな形に書き換えます。先ほど設定した環境変数 MODEL_ID をコードから読み込む形にします。
Lambda関数の「コード」タブを開き、エクスプローラーで lambda_function.py を選択して、以下の内容に置き換えます。
import os
import boto3
MODEL_ID = os.environ["MODEL_ID"]
REGION = "ap-northeast-1"
bedrock = boto3.client("bedrock-runtime", region_name=REGION)
def lambda_handler(event, context):
question = event.get("question", "こんにちは")
response = bedrock.converse(
modelId=MODEL_ID,
messages=[{"role": "user", "content": [{"text": question}]}],
)
answer = response["output"]["message"]["content"][0]["text"]
return {"answer": answer}
コードを解説します。
MODEL_ID = os.environ["MODEL_ID"]
REGION = "ap-northeast-1"
bedrock = boto3.client("bedrock-runtime", region_name=REGION)
os.environ["MODEL_ID"] で、先ほど Lambda に設定した環境変数から推論プロファイル ID を読み込みます。boto3.client("bedrock-runtime", ...) で Bedrock ランタイム API のクライアントを作成しています。ここが Lambda から Bedrock を呼び出すための入口です。
response = bedrock.converse(
modelId=MODEL_ID,
messages=[{"role": "user", "content": [{"text": question}]}],
)
converse を呼び出してモデルに質問を投げます。messages はユーザとモデルのやり取りを表す配列で、今回は「ユーザからの質問1件」だけを含む1問1答の形式にしています。会話履歴を積んで文脈を保つマルチターン会話や、モデルにツールを渡すツール呼び出しループは、この後の LambdaによるBedrockの応用操作を身につけよう で扱います。
answer = response["output"]["message"]["content"][0]["text"]
Converse のレスポンス構造から、モデルの応答テキストだけを取り出しています。response["output"]["message"]["content"] は複数のブロックを含む配列(テキストだけでなくツール呼び出しなども入り得る)ですが、シンプルな1問1答では最初のテキストブロックを取ってくれば十分です。
コードを貼り付けたら、左サイドバーの DEPLOY セクションにある「Deploy」ボタン(ショートカット: ⇧⌘U / Windows は Ctrl+Shift+U)を押して、Lambda に反映します。左下の「Undeployed Changes」の警告表示が消えれば、デプロイは完了です。

| 💡 ポイント |
|---|
| 今回書いたのは、Bedrockを呼び出すための必要最低限のコードです。実運用では、エラー時のリトライやタイムアウト制御に加えて、有害・機密の入出力を止める Guardrails・呼び出し状況の可視化・IAM のリソース単位での最小化などの観点が加わります。Guardrails と IAM 設計は Guardrailsで安全なモデル呼び出しを設計しよう で、AgentCore 経由呼び出しの可視化は AgentCore Observabilityでエージェントを可視化しよう で扱います。 |
4.5 動作確認する
Lambda関数のコード画面から、テストイベントを作って動作を確認します。
左サイドバー下部の TEST EVENTS セクションで「+ Create new test event」をクリックします。

右側に「Create new test event」パネルが開くので、以下を入力して右上の「Save」ボタンを押します。
Event Name:hello-testEvent JSON: 以下のJSONを貼り付ける
{
"question": "AWSのAmazon Bedrockを初学者向けに3つのポイントで説明してください。"
}

保存が完了すると、TEST EVENTS の「Private saved events」配下に hello-test が追加されます。追加された行にマウスを載せると再生ボタン(Invoke Function with Saved Test Event)が表示されるので、それを押してテストを実行します。

数秒〜十数秒で OUTPUT タブに実行結果が表示され、Response 欄に以下のようなJSONが返れば成功です。
{
"answer": "# Amazon Bedrockを初学者向けに解説..."
}

Playgroundで試したときと同じような応答がLambdaからも返れば、コード経由でもBedrockを呼び出せる状態が整っています。Response の下の Function Logs にはリクエストIDや実行時間(Duration)が出るので、CloudWatch Logsを開かなくてもこの画面で最小限の実行ログは確認できます。
5. 不要リソースの削除
Bedrockのオンデマンド呼び出しはリクエスト都度の課金で、待機中の料金は発生しません。Lambda関数とIAMロールも放置してもリクエストがなければ課金は発生しませんが、今後のハンズオンで作り直すため、ここで一旦削除しておく方が整理された状態を保てます。
5.1 Lambda関数を削除する
Lambdaコンソールの「関数」一覧で、bedrock-hello の行の左端のチェックボックスをオンにします。右上の「アクション」ドロップダウンから「削除」を選び、確認ダイアログで削除を実行します。

5.2 IAMロールを削除する
IAMコンソールの「ロール」一覧で、検索フィールドに bedrock-hello-lambda-role と入力してロールを絞り込みます。行の左端のチェックボックスをオンにして、右上の「削除」ボタンから削除を実行します。ロールに紐づけていたインラインポリシー(bedrock:InvokeModel を許可するポリシー)もロールと一緒に削除されるため、個別に削除する必要はありません。

6. まとめ
この章では、Anthropic Claudeの初回利用フォーム提出から、Playground対話、LambdaからのBedrock Converse API呼び出しまでを体験しました。
- Anthropicの初回利用フォームを提出し、Claude Sonnetを呼び出せる状態にできる
- Playgroundから対話し、応答・トークン数・レイテンシを確認して料金感を掴める
- LambdaからBedrockのConverse APIをシンプルに1回呼び出し、コード経由でモデルの応答を確認できる
- Playgroundで試したときと同じ体験を、コード経由でも再現できることを確認できる
次の章では、Bedrock Knowledge BasesでS3上のドキュメントを使ったRAGの構築をハンズオン形式で体験します。