⚡ 3秒でわかる!この記事のポイント
- AWS Bedrockは複数の基盤モデルをAPI一つで利用できるマネージドAIサービス
- Claude・Llama・Titanなど主要モデルを用途に応じて使い分け可能
- 生成AIスキルを持つSESエンジニアの需要は2026年で前年比3倍以上
「生成AIを業務システムに組み込みたいが、どのサービスを使えばいいかわからない」「OpenAI APIとAWS Bedrockの違いがわからない」「AI案件に参画したいが、何から学べばいいか」
AWS Bedrockは、Amazon・Anthropic・Meta・Mistralなど複数の基盤モデル(Foundation Model)を単一のAPIで利用できるフルマネージドサービスです。モデルのホスティングやインフラ管理が不要で、エンタープライズ向けのセキュリティとガバナンスを備えています。
2026年、生成AI関連のSES案件は爆発的に増加しており、AWS Bedrockのスキルを持つエンジニアの市場価値は急上昇中です。この記事ではAWS完全攻略シリーズEp.24として、Bedrockの基礎から実践的な実装パターンまでを体系的に解説します。
この記事でわかること
- AWS Bedrockの基本概念とアーキテクチャ
- 利用可能なモデルと選定基準
- APIを使った生成AI実装方法
- RAG(検索拡張生成)の構築
- セキュリティとコスト管理
AWS Bedrockとは

AWS Bedrockは、基盤モデル(FM: Foundation Model)を簡単に利用するためのフルマネージドサービスです。以下の特徴があります:
Bedrockの主な特徴
| 特徴 | 内容 |
|---|---|
| マルチモデル | Claude, Llama, Titan, Mistralなど複数モデルを統一APIで利用 |
| フルマネージド | モデルのホスティング・スケーリングが自動 |
| プライバシー | 入出力データがモデル学習に使われない |
| カスタマイズ | ファインチューニング・RAGでモデルをカスタマイズ |
| ガバナンス | Guardrailsでコンテンツフィルタリング・PII保護 |
| VPC統合 | PrivateLink経由でVPC内から安全にアクセス |
利用可能な主要モデル
┌────────────────────────────────────────────┐
│ AWS Bedrock │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Anthropic │ │ Meta │ │ Amazon │ │
│ │ Claude 4 │ │ Llama 4 │ │ Titan │ │
│ │ Sonnet │ │ 405B │ │ Text/IMG │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Mistral │ │ Cohere │ │ Stability│ │
│ │ Large │ │ Command │ │ SDXL │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────┘
| モデル | 提供元 | 強み | 主な用途 |
|---|---|---|---|
| Claude 4 Sonnet | Anthropic | 高精度・長文理解 | チャット・分析・コーディング |
| Claude 4 Haiku | Anthropic | 低コスト・高速 | 分類・要約・軽量タスク |
| Llama 4 405B | Meta | オープンソース | カスタマイズ自由度が高い |
| Amazon Titan | Amazon | AWS統合 | 埋め込み・画像生成 |
| Mistral Large | Mistral | 多言語対応 | 欧州言語対応・分析 |
Bedrock APIの基本実装
SDKのセットアップ
# AWS CLIの設定確認
aws configure list
# Bedrockの利用可能モデル一覧
aws bedrock list-foundation-models \
--region us-east-1 \
--query "modelSummaries[].modelId" \
--output table
テキスト生成(Converse API)
2024年以降、BedrockはモデルCに依存しないConverse APIを提供しています:
// src/services/bedrock.ts
import {
BedrockRuntimeClient,
ConverseCommand,
} from '@aws-sdk/client-bedrock-runtime';
const client = new BedrockRuntimeClient({ region: 'us-east-1' });
// テキスト生成
async function generateText(prompt: string, modelId: string = 'anthropic.claude-sonnet-4-20250514') {
const command = new ConverseCommand({
modelId,
messages: [
{
role: 'user',
content: [{ text: prompt }],
},
],
inferenceConfig: {
maxTokens: 4096,
temperature: 0.7,
topP: 0.9,
},
});
const response = await client.send(command);
const text = response.output?.message?.content?.[0]?.text;
return text;
}
// 使用例
const summary = await generateText(
'以下のSES案件情報を200字で要約してください:\n' + projectDescription
);
ストリーミングレスポンス
import { ConverseStreamCommand } from '@aws-sdk/client-bedrock-runtime';
async function* streamText(prompt: string) {
const command = new ConverseStreamCommand({
modelId: 'anthropic.claude-sonnet-4-20250514',
messages: [
{
role: 'user',
content: [{ text: prompt }],
},
],
inferenceConfig: {
maxTokens: 4096,
temperature: 0.7,
},
});
const response = await client.send(command);
if (response.stream) {
for await (const event of response.stream) {
if (event.contentBlockDelta?.delta?.text) {
yield event.contentBlockDelta.delta.text;
}
}
}
}
// Express.jsでのストリーミングエンドポイント
app.post('/api/chat', async (req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
for await (const chunk of streamText(req.body.message)) {
res.write(`data: ${JSON.stringify({ text: chunk })}\n\n`);
}
res.write('data: [DONE]\n\n');
res.end();
});
画像理解(マルチモーダル)
import { readFileSync } from 'fs';
async function analyzeImage(imagePath: string, question: string) {
const imageBytes = readFileSync(imagePath);
const command = new ConverseCommand({
modelId: 'anthropic.claude-sonnet-4-20250514',
messages: [
{
role: 'user',
content: [
{
image: {
format: 'png',
source: { bytes: imageBytes },
},
},
{ text: question },
],
},
],
});
const response = await client.send(command);
return response.output?.message?.content?.[0]?.text;
}
// 使用例: 設計図の分析
const analysis = await analyzeImage(
'./architecture-diagram.png',
'このシステム構成図のセキュリティ上の問題点を指摘してください'
);
RAG(検索拡張生成)の構築
Knowledge Basesの設定
Bedrock Knowledge Basesを使って、社内ドキュメントを参照するAIを構築します:
import {
BedrockAgentRuntimeClient,
RetrieveAndGenerateCommand,
} from '@aws-sdk/client-bedrock-agent-runtime';
const agentClient = new BedrockAgentRuntimeClient({ region: 'us-east-1' });
async function ragQuery(query: string, knowledgeBaseId: string) {
const command = new RetrieveAndGenerateCommand({
input: { text: query },
retrieveAndGenerateConfiguration: {
type: 'KNOWLEDGE_BASE',
knowledgeBaseConfiguration: {
knowledgeBaseId,
modelArn: 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-20250514',
retrievalConfiguration: {
vectorSearchConfiguration: {
numberOfResults: 5,
},
},
generationConfiguration: {
inferenceConfig: {
textInferenceConfig: {
maxTokens: 2048,
temperature: 0.3,
},
},
},
},
},
});
const response = await agentClient.send(command);
return {
answer: response.output?.text,
citations: response.citations?.map(c => ({
text: c.generatedResponsePart?.textResponsePart?.text,
sources: c.retrievedReferences?.map(r => r.location),
})),
};
}
// 使用例: 社内FAQ
const result = await ragQuery(
'SES契約の更新手続きはどうすればいいですか?',
'KB-XXXXX'
);
RAGのアーキテクチャ
ユーザー質問
│
▼
┌──────────────────┐
│ Bedrock KB API │
│ │
│ 1. 質問を埋め込み│ ← Amazon Titan Embeddings
│ 2. ベクトル検索 │ ← OpenSearch Serverless
│ 3. 関連文書取得 │ ← S3上のドキュメント
│ 4. コンテキスト │
│ 付きプロンプト │
│ 5. 回答生成 │ ← Claude Sonnet
│ │
└──────────────────┘
│
▼
回答(出典付き)
Terraformでの構築
# Knowledge Base
resource "aws_bedrockagent_knowledge_base" "docs" {
name = "company-docs-kb"
role_arn = aws_iam_role.kb_role.arn
knowledge_base_configuration {
vector_knowledge_base_configuration {
embedding_model_arn = "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0"
}
type = "VECTOR"
}
storage_configuration {
type = "OPENSEARCH_SERVERLESS"
opensearch_serverless_configuration {
collection_arn = aws_opensearchserverless_collection.kb.arn
vector_index_name = "bedrock-knowledge-base-index"
field_mapping {
vector_field = "embedding"
text_field = "text"
metadata_field = "metadata"
}
}
}
}
# データソース(S3)
resource "aws_bedrockagent_data_source" "s3" {
knowledge_base_id = aws_bedrockagent_knowledge_base.docs.id
name = "company-documents"
data_source_configuration {
type = "S3"
s3_configuration {
bucket_arn = aws_s3_bucket.documents.arn
}
}
}
Guardrails(ガードレール)
コンテンツフィルタリング
import { CreateGuardrailCommand, BedrockClient } from '@aws-sdk/client-bedrock';
const bedrock = new BedrockClient({ region: 'us-east-1' });
// ガードレールの作成
const guardrail = await bedrock.send(new CreateGuardrailCommand({
name: 'ses-app-guardrail',
description: 'SESアプリケーション用ガードレール',
blockedInputMessaging: 'この質問にはお答えできません。',
blockedOutputsMessaging: '回答を生成できませんでした。',
// コンテンツフィルター
contentPolicyConfig: {
filtersConfig: [
{ type: 'SEXUAL', inputStrength: 'HIGH', outputStrength: 'HIGH' },
{ type: 'VIOLENCE', inputStrength: 'HIGH', outputStrength: 'HIGH' },
{ type: 'HATE', inputStrength: 'HIGH', outputStrength: 'HIGH' },
{ type: 'INSULTS', inputStrength: 'MEDIUM', outputStrength: 'HIGH' },
],
},
// PII(個人情報)保護
sensitiveInformationPolicyConfig: {
piiEntitiesConfig: [
{ type: 'EMAIL', action: 'ANONYMIZE' },
{ type: 'PHONE', action: 'ANONYMIZE' },
{ type: 'NAME', action: 'ANONYMIZE' },
{ type: 'CREDIT_DEBIT_CARD_NUMBER', action: 'BLOCK' },
],
},
// トピック制限
topicPolicyConfig: {
topicsConfig: [
{
name: 'competitor-info',
definition: '競合他社の具体的な価格情報や内部情報',
type: 'DENY',
},
],
},
}));
コスト管理
料金体系
| モデル | 入力(1Kトークン) | 出力(1Kトークン) |
|---|---|---|
| Claude 4 Sonnet | $0.003 | $0.015 |
| Claude 4 Haiku | $0.0008 | $0.004 |
| Llama 4 70B | $0.00099 | $0.00099 |
| Amazon Titan Text | $0.0003 | $0.0004 |
コスト最適化戦略
// モデルルーティング: タスクの複雑さに応じてモデルを切り替え
function selectModel(task: string, complexity: 'low' | 'medium' | 'high') {
switch (complexity) {
case 'low':
// 分類・簡単な質問 → Haiku(最安)
return 'anthropic.claude-haiku-4-20250514';
case 'medium':
// 一般的な生成・要約 → Llama(コスパ良)
return 'meta.llama4-70b-instruct-v1:0';
case 'high':
// 複雑な分析・コーディング → Sonnet(高精度)
return 'anthropic.claude-sonnet-4-20250514';
}
}
// プロンプトキャッシュの活用
// 同じシステムプロンプトを繰り返す場合、キャッシュで最大90%コスト削減
利用量のモニタリング
# CloudWatchメトリクスで利用量を監視
aws cloudwatch get-metric-statistics \
--namespace AWS/Bedrock \
--metric-name InvocationCount \
--start-time 2026-03-01T00:00:00Z \
--end-time 2026-03-12T23:59:59Z \
--period 86400 \
--statistics Sum \
--dimensions Name=ModelId,Value=anthropic.claude-sonnet-4-20250514
SES現場での活用パターン
社内チャットボット構築
要件: 社内マニュアルに基づくQ&Aボット
技術スタック:
- AWS Bedrock (Claude Sonnet) + Knowledge Bases
- Amazon OpenSearch Serverless(ベクトルDB)
- AWS Lambda + API Gateway(バックエンド)
- React(フロントエンド)
ドキュメント自動生成
要件: API仕様からドキュメントを自動生成
技術スタック:
- AWS Bedrock (Claude Sonnet)
- S3(OpenAPI spec保存)
- Step Functions(ワークフロー管理)
- CodePipeline(CI/CD連携)
単価への影響
生成AIスキルはSES市場で最も需要が高い分野の一つです:
- Bedrock API基本操作 → 月額5〜10万円のスキルアップ
- RAG構築経験 → 月額75〜100万円の案件に対応可能
- Guardrails + セキュリティ設計 → エンタープライズ案件で必須
- マルチモデル設計 + コスト最適化 → AIアーキテクト案件で重宝(月額100〜130万円)
まとめ
AWS Bedrockは、生成AIをエンタープライズで安全に活用するための最適なプラットフォームです。
この記事のまとめ
- Bedrockは複数の基盤モデルを統一APIで利用可能
- Converse APIでモデル非依存の実装が可能
- Knowledge BasesでRAGを簡単に構築
- GuardrailsでコンテンツフィルタリングとPII保護
- 生成AIスキルはSES市場で最高クラスの需要
AWS完全攻略シリーズの他の記事も合わせてご覧ください: