𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
AWS Bedrock入門|SESエンジニア向け生成AI基盤の実践ガイド

AWS Bedrock入門|SESエンジニア向け生成AI基盤の実践ガイド

AWSBedrock生成AISESエンジニア
目次
⚡ 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の全体アーキテクチャ

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 SonnetAnthropic高精度・長文理解チャット・分析・コーディング
Claude 4 HaikuAnthropic低コスト・高速分類・要約・軽量タスク
Llama 4 405BMetaオープンソースカスタマイズ自由度が高い
Amazon TitanAmazonAWS統合埋め込み・画像生成
Mistral LargeMistral多言語対応欧州言語対応・分析

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完全攻略シリーズの他の記事も合わせてご覧ください:

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修