1. Amazon Bedrockとは
AWSが提供する生成AIサービス。複数のAI企業が開発した基盤モデル(Foundation Model)をAPIから統一的に利用できるフルマネージドサービス。2023年9月に正式リリース。
サーバーレス設計のため、インフラ構築・管理が不要で、API呼び出しだけで生成AIの機能をアプリケーションに組み込める。
Bedrockの位置づけ
┌─────────────────────────────────────────────────┐
│ あなたのアプリケーション │
└─────────────────┬───────────────────────────────┘
│ API呼び出し
▼
┌─────────────────────────────────────────────────┐
│ Amazon Bedrock(AWSのサービス) │
│ ┌───────────┬───────────┬───────────┐ │
│ │ Claude │ Llama │ Titan │ ... │
│ │(Anthropic)│ (Meta) │ (Amazon) │ │
│ └───────────┴───────────┴───────────┘ │
│ ↑ 各社のモデルをAWSが「仲介」している │
└─────────────────────────────────────────────────┘
Bedrockは「AIモデルの仲介サービス」。各AI企業のモデルを直接契約せず、AWSを通じて統一的に利用できる。
なぜBedrockを使うのか
例えばClaudeを使いたい場合、2つの方法がある。
方法A: Anthropic社に直接契約
- Anthropicでアカウント作成
- Anthropic専用のAPIキー取得
- Anthropic専用のSDKを使用
方法B: Bedrock経由
- AWSアカウントがあればすぐ使える
- AWS SDKで統一的に呼び出し
- 他のAWSサービス(S3、Lambda等)と連携しやすい
- 請求がAWSに一本化
すでにAWSを使っている環境では、Bedrock経由のほうが管理が楽。
2. 利用可能なモデル
テキスト生成
- Anthropic Claude
- Amazon Titan
- Meta Llama
- Mistral
- Cohere
画像生成
- Stability AI (Stable Diffusion)
- Amazon Titan Image
- Amazon Nova Canvas
動画生成
- Amazon Nova Reel
埋め込み(Embedding)
- Amazon Titan Embeddings
- Cohere Embed
※ 2025年6月以降、サーバーレス基盤モデルは初回呼び出し時に自動有効化。手動でのモデルアクセス設定は不要。Anthropicモデルは初回利用時にユースケース詳細の提出が必要な場合がある。
3. Bedrockの主要機能
| 機能 | 説明 | 用途 |
|---|---|---|
| テキスト生成 | プロンプトを送って返答を得る | チャットボット、文章作成 |
| ストリーミング | 返答をリアルタイムに少しずつ受け取る | リアルタイムチャットUI |
| Knowledge Base | 自社ドキュメントを検索させる(RAG) | 社内FAQ、ドキュメント検索 |
| Agents | 複数ステップの処理を自動実行 | 複雑なワークフロー自動化 |
| Guardrails | 不適切な入出力をフィルタ | コンテンツ安全性 |
最初は「テキスト生成」だけで十分。
4. Bedrockの全体構成
Bedrockは「2種類の仕事」をするサービス。
役割A: モデルの情報を調べる(管理系)
- 「どんなモデルが使えるの?」
- 「このモデルの詳細情報は?」
役割B: モデルに質問して答えをもらう(推論系)
- 「このテキストをAIに送って返答がほしい」
この2つは別々のAPIとして分かれている。
┌─────────────────────────────────────────┐
│ Amazon Bedrock サービス │
├─────────────────────────────────────────┤
│ ① 管理用API(Bedrock) │
│ - ListFoundationModels │
│ - GetFoundationModel │
│ - モデル情報取得、管理用 │
├─────────────────────────────────────────┤
│ ② 推論用API(BedrockRuntime) │
│ - InvokeModel (基本的な呼び出し)│
│ - Converse (統一されたAPI) │
│ - InvokeModelWithResponseStream │
│ - ConverseStream (ストリーミング) │
│ - StartAsyncInvoke (非同期処理) │
└─────────────────────────────────────────┘
なぜ2つに分かれているのか
利用頻度と用途が全く違うため。
| 種類 | 使うタイミング | 頻度 |
|---|---|---|
| 管理系 | 開発初期にモデル一覧を確認するとき | たまに |
| 推論系 | ユーザーがチャットするたび | 大量 |
推論系は本番環境で毎秒何回も呼ばれる可能性がある。管理系と混ぜると負荷管理が難しくなるため、AWSは別のエンドポイント(接続先)として分離している。
5. 2つの主要なClient
SDKでは、2種類のAPIに対応する2つのClientが用意されている。
管理用: BedrockClient
パッケージ: @aws-sdk/client-bedrock
できること:
- ListFoundationModels(モデル一覧取得)
- GetFoundationModel(モデル詳細取得)
使う場面: 開発時の調査、管理画面の構築
推論用: BedrockRuntimeClient
パッケージ: @aws-sdk/client-bedrock-runtime
できること:
- InvokeModel(モデル呼び出し)
- Converse(統一形式での呼び出し)
- ConverseStream(ストリーミング)
使う場面: 実際にAIと会話するとき
チャット機能を作るなら、使うのは BedrockRuntimeClient だけ。
6. 推論APIの3つの呼び出し方法
方法1: InvokeModel(低レベルAPI)
モデルごとに異なるリクエスト形式で送る方法。
あなた → InvokeModel → Claude(Claude専用の形式で送る)
あなた → InvokeModel → Llama(Llama専用の形式で送る)
- 特徴: モデル別にリクエスト/レスポンス形式が異なる
- 利点: 細かく制御可能
- 欠点: モデルごとにペイロード形式を理解する必要
- 使用例: 特定モデルの詳細な設定が必要な場合
const payload = {
anthropic_version: "bedrock-2023-05-31",
max_tokens: 1000,
messages: [{ role: "user", content: [{ type: "text", text: prompt }] }],
};
const response = await client.send(
new InvokeModelCommand({
modelId: "anthropic.claude-3-haiku-20240307-v1:0",
contentType: "application/json",
body: JSON.stringify(payload),
})
);
方法2: Converse(高レベルAPI)✨ 推奨
どのモデルでも同じ形式で送れる統一API。
あなた → Converse → Claude(統一形式)
あなた → Converse → Llama(同じ統一形式)
- 特徴: すべてのモデルで統一されたリクエスト/レスポンス形式
- 利点: シンプル、モデル間の切り替えが容易
- 欠点: 細かい制御には向かない場合がある
const command = new ConverseCommand({
modelId: "anthropic.claude-3-haiku-20240307-v1:0",
messages: [
{
role: "user",
content: [{ text: prompt }],
},
],
inferenceConfig: {
maxTokens: 1000,
temperature: 0.7,
},
});
const response = await client.send(command);
方法3: ストリーミング(InvokeModelWithResponseStream / ConverseStream)
通常のAPIは、AIが全部の文章を生成し終わってから返す。
通常: [待機...待機...待機...] → 「こんにちは。今日はいい天気ですね。」(一括)
ストリーミングは、生成途中から少しずつ返す。
ストリーミング: 「こん」→「にちは」→「。今日は」→「いい天気」→「ですね。」
- 特徴: リアルタイムにレスポンスを受け取る
- 利点: 遅延が少ない、大量テキストに適切
- 使用例: チャットボット、リアルタイム生成
ChatGPTのように文字が流れるように表示したいならストリーミングを使う。
呼び出し方法の選び方
Q: 特定モデルの細かい設定が必要?
└─ Yes → InvokeModel
└─ No ↓
Q: リアルタイムに文字を表示したい?
└─ Yes → ConverseStream
└─ No → Converse ← まずはこれから始める
7. 重要な概念
| 用語 | 意味 |
|---|---|
| Foundation Model | Bedrock上で使える事前学習済みAIモデル(Claude、Llamaなど) |
| Model ID | モデルを指定するための識別子。例: anthropic.claude-3-haiku-20240307-v1:0
|
| Inference(推論) | プロンプトを入力してAIに回答を生成させる処理 |
| Token | AIがテキストを処理する単位。料金計算の基準 |
| Message | 会話の1発言。role(user/assistant)とcontent(内容)を持つ |
| Payload | モデルに送信するリクエスト本体(JSON形式) |
| Streaming | リアルタイムにレスポンスを受け取る方式 |
| Provisioned Throughput | 固定費用で高スループットを確保する契約形態 |
トークンについて
AIがテキストを処理する単位。英語では約4文字で1トークン、日本語では1〜2文字で1トークン程度。料金計算の基準になる。
8. 利用開始までの手順
前提条件
- AWSアカウントが存在すること
- IAM Identity Center(旧AWS SSO)が組織で有効化されていること
- Bedrockを使用するための権限セット(
PowerUserAccessまたはAmazonBedrockFullAccessを含むカスタム権限セット)が割り当てられていること
※ IAM Identity Centerの有効化と権限セットの作成は管理者が行う作業。
Step 1: SSO情報の取得
- AWSアクセスポータル(組織のSSO URLにアクセス)にサインイン
- 使用する権限セットを選択し、「Access keys」をクリック
- 「IAM Identity Center credentials」タブから以下の情報を取得:
-
SSO Start URL:
https://your-org.awsapps.com/start形式のURL -
SSO Region: IAM Identity Centerが設定されているリージョン(例:
us-east-1)
-
SSO Start URL:
Step 2: AWS CLIでSSOプロファイルを設定
aws configure sso
対話形式で以下を入力:
SSO session name (Recommended): my-sso
SSO start URL [None]: https://your-org.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [None]: sso:account:access
ブラウザが自動的に開き、SSOログインを求められる。ログイン後、使用するAWSアカウントとロールを選択:
There are 2 AWS accounts available to you.
> DeveloperAccount (123456789011)
ProductionAccount (123456789022)
Using the account ID 123456789011
There are 2 roles available to you.
> PowerUserAccess
ReadOnly
CLI default client Region [None]: us-east-1
CLI default output format [None]: json
CLI profile name [PowerUserAccess-123456789011]: bedrock-dev
Step 3: SSOログイン
設定完了後、以下のコマンドでサインイン:
aws sso login --profile bedrock-dev
ブラウザが開き、認証が完了すると一時的な認証情報がキャッシュされる。
Step 4: 動作確認
aws sts get-caller-identity --profile bedrock-dev
正常に設定されていれば、アカウントIDとロール情報が表示される。
設定ファイルの構造
aws configure ssoを実行すると、~/.aws/configに以下のような設定が保存される:
[profile bedrock-dev]
sso_session = my-sso
sso_account_id = 123456789011
sso_role_name = PowerUserAccess
region = us-east-1
output = json
[sso-session my-sso]
sso_region = us-east-1
sso_start_url = https://your-org.awsapps.com/start
sso_registration_scopes = sso:account:access
AWS SDKはこの設定を自動的に読み取り、SSOセッションから一時的な認証情報を取得する。
セッションの有効期限
SSOセッションには有効期限がある。期限切れの場合は再度aws sso loginを実行する。
# ログアウト(必要な場合)
aws sso logout
モデルアクセスについて(2025年6月以降)
モデルアクセス設定ページは廃止された。 サーバーレス基盤モデルは、アカウント内で初めて呼び出された際に、すべてのAWS商用リージョンで自動的に有効になる。手動でモデルアクセスを有効にする必要はない。
注意点:
- Anthropicモデル: 初回利用時にユースケースの詳細を提出する必要がある場合がある
- AWS Marketplaceモデル: AWS Marketplaceの権限を持つユーザーが、アカウント全体で有効にするために一度モデルを呼び出す必要がある。この一度限りの有効化後、すべてのユーザーがアクセス可能
- アクセス制御: アカウント管理者はIAMポリシーとサービスコントロールポリシーを通じてモデルアクセスを制限可能
利用を開始するには、モデルカタログからモデルを選択してPlaygroundで開くか、InvokeModelまたはConverse APIでモデルを呼び出す。
9. Bedrockを使う流れ(コード視点)
Step 1: BedrockRuntimeClientを作成
→ リージョンを指定、認証情報はSSOプロファイルから自動読み込み
Step 2: Commandを作成
→ どのモデルに、何を送るかを指定
Step 3: client.send(command)で送信
→ AWSにリクエストが飛ぶ
Step 4: レスポンスからAIの返答を取り出す
→ response.output.message.content[0].text
環境変数でプロファイルを指定
SSOプロファイルを使用する場合、環境変数で指定する:
export AWS_PROFILE=bedrock-dev
または、コード実行時に指定:
AWS_PROFILE=bedrock-dev npx ts-node index.ts
最小限のコード例
import {
BedrockRuntimeClient,
ConverseCommand,
} from '@aws-sdk/client-bedrock-runtime';
// ① Clientを作る(リージョン指定)
// 認証情報はAWS_PROFILEまたは~/.aws/configから自動読み込み
const client = new BedrockRuntimeClient({ region: 'us-east-1' });
// ② Commandを作る(モデルIDとメッセージ)
const command = new ConverseCommand({
modelId: 'anthropic.claude-3-haiku-20240307-v1:0',
messages: [
{
role: 'user',
content: [{ text: 'こんにちは' }],
},
],
});
// ③ 送信して結果を受け取る
const response = await client.send(command);
// ④ 返答を取り出す
const reply = response.output?.message?.content?.[0]?.text;
console.log(reply);
各部分の説明
-
BedrockRuntimeClient: Bedrockと通信するための「窓口」。認証情報は環境変数
AWS_PROFILEで指定されたSSOプロファイル、または~/.aws/configから自動で読み込まれる。 - ConverseCommand: 「このモデルに、このメッセージを送って」という指示書。
- modelId: どのAIモデルを使うかの識別子。有効化したモデルのIDを指定。
-
messages: 会話の内容。
role: 'user'はユーザーからの発言、role: 'assistant'はAIの発言。
SSOセッションが切れている場合
コード実行時に認証エラーが発生した場合は、SSOセッションが期限切れの可能性がある:
aws sso login --profile bedrock-dev
を実行して再認証する。
10. 料金体系
基本は従量課金制。
オンデマンド
テキストモデルは入出力トークン数、画像モデルは生成枚数に応じて課金。初期費用なし、最低利用量なし。検証段階や利用量が読めない場合に適している。
バッチモード
大量のプロンプトをまとめて処理。オンデマンドより割安になる場合がある。
プロビジョンドスループット
一定のスループットを事前に確保。安定したパフォーマンスが必要な本番環境向け。
料金例(東京リージョン、Claude 3 Sonnetの場合)
- 入力: $0.008 / 1,000トークン
- 出力: $0.024 / 1,000トークン
リージョンやモデルによって料金が異なるため、公式料金ページで確認すること。
公式料金ページ: https://aws.amazon.com/jp/bedrock/pricing/