Amazon Bedrock AgentCore を使うと簡単に高度なエージェントを構築することができます。AgentCore Starter Toolkit CLI を使えばたった数行のコードとコマンドでエージェントを AgentCore Runtime にデプロイし利用することができます。
AgnetCore Runtime はアプリケーションから呼び出すことができ自社の社内アプリケーションやプロダクトに組み込んで自由度高く統合できる一方、UI は提供されていないため自前で構築する必要があります。
そこで利用できるのが、GenU です。
GenU(Generative AI Use Cases)は、AWS 有志で開発している OSS の生成AIの業務活用アプリケーションで、UI・認証 (SAML)・デプロイ基盤が揃っており、デプロイされた AgentCore を簡単に紐付けて利用することができるため、AgentCore でデプロイされた多数の社内のエージェントのハブとなるエージェントプラットフォームとして利用することができます。
OSS なのでもちろんライセンスコストはかからず Bedrock と AgentCore Runtime の完全従量課金制なので、スモールスタートの PoC でも、1万人以上の組織においても手軽に利用することができます。
実践:5ステップで社内展開
Step 1: エージェント開発(5分)
普通にAgentCore CLIでエージェントを書きます。
# agent.py
from strands import Agent, tool
from strands.models import BedrockModel
from bedrock_agentcore.runtime import BedrockAgentCoreApp
import boto3
import json
app = BedrockAgentCoreApp()
@tool
def search_docs(keyword: str) -> str:
"""社内ドキュメントを検索"""
# 実際はS3やElasticsearchと連携
return f"「{keyword}」に関する社内文書を3件見つけました"
@app.entrypoint
async def entrypoint(payload):
messages = payload.get("messages", [])
prompt = payload.get("prompt", [])
model_id = payload.get("model", {}).get("modelId", "global.anthropic.claude-sonnet-4-5-20250929-v1:0")
model_region = payload.get("model", {}).get("region", "us-east-1")
session = boto3.Session(region_name=model_region)
model = BedrockModel(model_id=model_id, boto_session=session)
agent = Agent(messages=messages, model=model, tools=[search_docs])
async for msg in agent.stream_async(prompt):
if "event" in msg:
yield msg
if __name__ == "__main__":
app.run()
# requirements.txt
strands-agents
strands-agents-tools
uv
boto3
bedrock-agentcore<=0.1.5
bedrock-agentcore-starter-toolkit==0.1.14
ポイント:
- (必須): AgentCore Runtime はレスポンスの型に制約がありませんが、GenU は Strands の Stream Response を受け取ることを期待しているため
async for msg in agent.stream_async(message):の結果をyield msgする必要があります - (オプション) GenUからは
payload.get("model", {}).get("modelId")でモデルが渡ってくるので、これを使えばUI上でモデル切り替え可能になります。
Step 2: デプロイ(3分)
# 初回のみ設定
agentcore configure --entrypoint agent.py
# デプロイ
agentcore launch
デプロイ完了後、ARNが表示されます:
Agent ARN: arn:aws:bedrock-agentcore:us-west-2:123456789:runtime/agent-abc123
Step 3: GenU設定(1分)
parameter.ts に追加するだけ:
const envs: Record<string, Partial<StackInput>> = {
'': {
agentCoreRegion: 'us-west-2',
agentCoreExternalRuntimes: [
{
name: '社内文書検索エージェント',
arn: 'arn:aws:bedrock-agentcore:us-west-2:123456789:runtime/agent-abc123',
},
],
},
};
Step 4: GenUデプロイ(1分 + 待ち時間)
npm run cdk:deploy:quick
Step 5: 完成
GenU の UI にアクセスすると、AgentCoreメニューに「社内文書検索エージェント」が表示されます。
もう使えます。
何が嬉しいのか?
1. UI開発ゼロ
GenUが提供するチャットUIがそのまま使えます。
- Web アプリ
- ストリーミング表示
- 会話履歴
- モデル切り替え
- レスポンシブ対応
2. 認証が標準装備
- Cognito認証
- SAMLフェデレーション(EntraID等)対応
- ユーザー管理機能
- アクセスログ
社内システムとのSSO連携も簡単です。
3. 複数エージェントの管理
agentCoreExternalRuntimes: [
{ name: '文書検索', arn: 'arn:...' },
{ name: 'データ分析', arn: 'arn:...' },
{ name: 'コード生成', arn: 'arn:...' },
]
用途別にエージェントを分けて、ユーザーが選択できます。
実際のユースケース
社内ヘルプデスクエージェント
@tool
def search_faq(question: str) -> str:
"""FAQを検索"""
# Pinecone等のベクトルDBで社内FAQを検索
@tool
def create_ticket(title: str, description: str) -> str:
"""問い合わせチケット作成"""
# Jira/ServiceNow API連携
データ分析エージェント
@tool
def query_redshift(sql: str) -> str:
"""社内DWHに問い合わせ"""
# Redshift Data APIで安全にクエリ実行
@tool
def generate_chart(data: dict) -> str:
"""グラフ生成"""
# S3に画像保存してURLを返す
コードレビューエージェント
@tool
def get_pr_diff(pr_number: int) -> str:
"""PRの差分取得"""
# GitHub API連携
@tool
def analyze_security(code: str) -> str:
"""セキュリティチェック"""
# Semgrep等のツール連携
コスト
Agent 推論(Bedrock + AgentCore Runtime):
約 $0.002~$0.1 / リクエスト (モデルやタスクにより異なります)
x 1人平均1日5回 x 50 人 x 20 営業日 = 約 $10~500 / 月
GenU基盤 (推論以外、RAG などは立てない):
約$5/月(全体)
---
合計: 50 人で約 $15~505 / 月 => 一人当たり $0.3~$10 / 月
アプリ自体や AgentCore Runtime にほぼコストはかからずモデルの消費トークンが支配的な構図です。
Agent の実行コストに幅があるのはタスクの種類によってトークン消費量が異なるのとモデルの単価が異なるためです。具体的には上記の試算では Nova 2 Light の入力 2K / 出力 1K ~ Claude Sonnet 4.5 の入力 10K / 出力 5K でのざっくり計算です。多数の Agent をスケールさせるためにはモデル自体の単価でコストが 10 倍以上変わってくるため特に利用者数や実行数が多い場合はモデルの選定が重要です。
まとめ
AgentCore + GenUの組み合わせで:
- 開発: エージェントロジックだけに集中
-
デプロイ:
agentcore launch一発 - 社内展開: parameter.ts に1行追加
- 運用: UI・認証・ログ全部込み
フロントエンド開発に時間を使わず、エージェントの中身に集中できます。
AIエージェントの社内展開の仕方に迷ったらGenUで展開、というのも選択肢としてありなのではないでしょうか?
