🤖

Strands Agents SDKとAWS Knowledge MCPを活用した技術質問エージェントの構築

に公開

はじめに

MEGAZONEの阿河です。
Strands Agents SDKとAWS Knowledge MCP Serverを組み合わせることで、AWSに関する技術質問に対して回答するエージェントを構築します。

膨大なAWSドキュメントから必要な情報を手動で探す労力を減らしつつ、公式に沿った信頼ある情報を得ることができます。

参照ドキュメント:

目次

Part 1: ローカル環境での実行フロー
Part 2: AWS Knowledge MCPツールの統合
Part 3: Bedrock AgentCore Runtimeでのデプロイ
Part 4: エージェントのテスト

Part1. ローカル環境での実行フロー

0) プロジェクト作成

mkdir -p make-strands && cd make-strands
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install strands-agents bedrock-agentcore bedrock-agentcore-starter-toolkit boto3

1) エージェントコード作成

aws_knowledge_agent.pyを作成。

import os
from strands import Agent
from bedrock_agentcore import BedrockAgentCoreApp

app = BedrockAgentCoreApp()

agent = Agent(
    system_prompt="""あなたはAWSの技術質問に回答する専門エージェントです。
    ユーザーの質問に対して、正確で詳細な回答を提供し、必要に応じて関連するAWSサービスや
    ベストプラクティスについても説明してください。""",
    model="us.anthropic.claude-3-7-sonnet-20250219-v1:0"
)

@app.entrypoint
def invoke(payload):
    """エージェントの呼び出しハンドラー"""
    user_message = payload.get("prompt", "AWSについて教えてください")
    
    try:
        result = agent(user_message)
        return {"result": result.message}
    except Exception as e:
        app.logger.error(f"エージェントエラー: {e}")
        return {"error": "エージェントの処理中にエラーが発生しました"}

if __name__ == "__main__":
    app.run()

2) モデルアクセスの有効化(AWSコンソール)

  • Bedrockコンソールで Claude 3.7 Sonnet へのアクセスを有効化
  • リージョンは us-east-1 を使用

3) ローカル起動と疎通確認(ローカル)

python aws_knowledge_agent.py
# 別ターミナルで
curl -X POST http://localhost:8080/invocations \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Hello!"}'

期待応答: {"result": "..."} が返ること。

{"result": {"role": "assistant", "content": [{"text": "# Hello! Welcome to AWS Support\n\nI'm your AWS technical support agent. I'm here to answer any questions you might have about AWS services, features, best practices, or technical issues.\n\nSome topics I can help with include:\n- AWS service capabilities and use cases\n- Architecture design guidance\n- Troubleshooting AWS resources\n- Understanding AWS pricing and cost optimization\n- Security best practices\n- Recent AWS feature announcements\n\nWhat AWS-related question can I assist you with today?"}]}}% 

4) デプロイ準備と実行(ローカル→AWS)

requirements.txt を作成:

strands-agents
bedrock-agentcore
bedrock-agentcore-starter-toolkit
boto3

AgentCore CLIで構成・デプロイ:

agentcore configure -e aws_knowledge_agent.py -r us-east-1
agentcore launch

AWSコンソール画面で、デプロイされていることを確認できます。
現在ブログを書いている時点では、Amazon Bedrock AgentCoreのAgent Runtimeのセクションで確認できます。

5) デプロイ後のテスト(ローカル)

CLIでの呼び出し:

agentcore invoke '{"prompt": "S3のセキュリティベストプラクティスは?"}'
{"result": {"role": "assistant", "content": [{"text": "# Amazon S3 のセキュリティベストプラクティス\n\nAmazon 
S3のセキュリティベストプラクティスとして、以下のポイントを実装することをお勧めします:\n\n## アクセス管理\n- 
**デフォルトでパブリックアクセスをブロック**: 
S3ブロックパブリックアクセス機能を有効にし、意図しないデータ公開を防ぎます\n- **最小権限の原則**: 
IAMポリシーとバケットポリシーでは、必要な権限のみを付与します\n- **バケットポリシーとIAMポリシーの定期的なレビュー**:
不要な権限がないか確認します\n\n## データ保護\n- **サーバー側の暗号化**: S3のデータを保存時に暗号化します(SSE-S3, 
SSE-KMS, SSE-Cなどのオプションが利用可能)\n- **転送中の暗号化**: 
HTTPS(TLS)を使用して、データ転送時の暗号化を確保します\n- **バージョニングの有効化**: 
偶発的または悪意のある削除からデータを保護します\n\n## モニタリングと監査\n- **AWS CloudTrailの有効化**: すべてのS3 
APIアクティビティを記録します\n- **S3アクセスログの有効化**: バケットへのアクセス要求の詳細ログを記録します\n- **AWS 
Config**: S3バケットの設定変更を追跡し、コンプライアンス要件に対する評価を実施します\n\n## セキュリティ検証\n- 
**S3オブジェクトロックの使用**: 
コンプライアンスモードまたはガバナンスモードで、一定期間オブジェクトの変更・削除を防止します\n- 
**MFAを要求する削除の設定**: 重要なオブジェクトの削除時にMFA認証を要求します\n- **プライベートVPCエンドポイント**: 
VPC内からS3へのプライベート接続を確立し、公共インターネットを経由せずにアクセスします\n\n## その他の重要事項\n- 
**バケットと共有されるプレ���ィックスへのアクセス管理**: S3 Access 
Pointsを使用して、特定のユースケースに合わせたアクセスポリシーを設定\n- **クロスアカウントアクセスの注意深い管理**: 
必要な場合のみ許可し、定期的にレビューします\n- **AWS Macie**: 
機密データの自動検出とセキュリティリスク評価\n\nこれらのベストプラクティスを実装することで、S3バケットとデータのセキ
ュリティを大幅に強化できます。組織のセキュリティ要件に合わせて適切に組み合わせて実装することをお勧めします。"}]}}

6) ログと状態確認(AWSコンソール)

  • CloudWatch Logs: /aws/bedrock-agentcore/runtimes/{agent-id}-DEFAULT
  • ECR: bedrock-agentcore-{agent-name}

参照ドキュメント:

Part 2: AWS Knowledge MCPツールの統合

2.1 シンプルなMCP統合の実装

手順1: メインエージェントファイルの更新

既存のaws_knowledge_agent.pyファイルを以下のように更新します:

import os
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp.client.streamable_http import streamablehttp_client
from bedrock_agentcore import BedrockAgentCoreApp

os.environ["AWS_DEFAULT_REGION"] = "us-east-1"

app = BedrockAgentCoreApp()

mcp = MCPClient(
    lambda: streamablehttp_client(
        "https://knowledge-mcp.global.api.aws"
    )
)

@app.entrypoint
def invoke(payload):
    """エージェントの呼び出しハンドラー"""
    user_message = payload.get("prompt", "AWSについて教えてください")
    
    try:
        with mcp:
            agent = Agent(
                model="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
                system_prompt="""あなたはAWSの技術質問に回答する専門エージェントです。
                AWS Knowledge MCP Serverを使用して、常に最新の公式情報を参照してください。
                
                ユーザーの質問に対して、AWSの公式ドキュメントを参照して正確で詳細な回答を提供してください。
                特に、AWSの公式ドキュメントを参照して、信頼性の高い情報を提供することを心がけてください。""",
                tools=mcp.list_tools_sync()
            )
            
            result = agent(user_message)
            return {"result": result.message}
    except Exception as e:
        app.logger.error(f"エージェントエラー: {e}")
        return {"error": "エージェントの処理中にエラーが発生しました"}

if __name__ == "__main__":
    app.run()

手順2: requirements.txtの更新

requirements.txtファイルを以下のように更新します:

strands-agents
bedrock-agentcore
bedrock-agentcore-starter-toolkit
boto3
mcp

手順3: 依存関係のインストール

source .venv/bin/activate

pip install -r requirements.txt

2.3 ローカルでの動作確認

python aws_knowledge_agent.py

curl -X POST http://localhost:8080/invocations \
  -H "Content-Type: application/json" \
  -d '{"prompt": "AWS S3について教えてください"}'

Part 3: Bedrock AgentCore Runtimeでのデプロイ

3.1 requirements.txtの確認

既に更新済みのrequirements.txtファイルの内容を確認します:

cat requirements.txt

内容は以下のようになっているはずです:

strands-agents
bedrock-agentcore
bedrock-agentcore-starter-toolkit
boto3
mcp

3.2 AgentCore CLIでの設定とデプロイ

手順1: プロジェクトの設定

agentcore configure -e aws_knowledge_agent.py -r us-east-1

手順2: デプロイの実行

agentcore launch

新しいシンプルな実装でエージェントがデプロイされます。

Part 4: エージェントのテスト

https://aws.github.io/bedrock-agentcore-starter-toolkit/api-reference/cli.html

デプロイされたエージェントをテストします:

agentcore invoke '{"prompt": "AWS S3のセキュリティベストプラクティスは?"}' -a aws_knowledge_mcp
{"result": {"role": "assistant", "content": [{"text": "これらの情報を踏まえて、AWS S3のセキュリティベストプラクティスについて詳細にまとめます。\n\n# 
AWS S3のセキュリティベストプラクティス\n\nAmazon 
S3はAWSの主要なストレージサービスであり、適切なセキュリティ対策を実装することが非常に重要です。以下に、AWSが推奨するS3のセキュリティベストプラクティス
をまとめました。

//めっちゃ長いので略。是非実際にお試しください。

終わりに

この記事では、Strands Agents SDKとAWS Knowledge MCP Serverを組み合わせて、AWSに関する技術質問に回答するエージェントを簡単に構築する手順を説明しました。

まだまだ改善の余地はありますが、このエージェントを基に、AWSの技術サポートやドキュメント検索の自動化を実現できます。

最後まで読んでいただきありがとうございました!

MEGAZONE株式会社 Tech Blog

Discussion