【AWS】AgentCoreのハンズオンをやってみた

以下の記事を見ながら、AgentCoreのハンズオンをやってみます。

Qiita
Strands & AgentCoreハンズオン! MCPマルチエージェントをAWSに簡単デプロイ - Qiita この記事は人力で書きました。 このイベント用の手順書ですが、本記事を読めば1時間ぐらいで誰でも試せます! Claude Codeなど、AIエージェントを「使う」人はかなり増えて...
引用元: Bedrock AgentCore & Strands Agentsハンズオン(JAWS-UG東京)
目次

環境構築、IAMユーザーの作成

以下を参照

環境構築
IAMユーザーの作成

AgentCore入門

CloudWatch:トレース有効化

マネコン > CloudWatch


チェックを入れてSave

AgentCoreを実装

Runtimeを使います。

Runtime(セッション分離を備えた低レイテンシのサーバーレス環境)

# 必要なライブラリをインポート
from dotenv import load_dotenv
from strands import Agent
from bedrock_agentcore.runtime import BedrockAgentCoreApp # 追加

# .envファイルから環境変数をロード
load_dotenv()

# Strandsでエージェントを作成
agent = Agent("jp.anthropic.claude-haiku-4-5-20251001-v1:0")

# ---------- 以下、追加コード--------------

# AgentCoreのサーバーを作成
app = BedrockAgentCoreApp()

# エージェント呼び出し関数を、AgentCoreの開始点に設定
@app.entrypoint
def invoke_agent(payload, context):

    # リクエストのペイロード(中身)からプロンプトを取得
    prompt = payload.get("prompt")
    
    # エージェントを呼び出してレスポンスを返却
    return {"result": agent(prompt).message}

# AgentCoreサーバーを起動
app.run()

・BedrockAgentCoreAppのインポートとインスタンス化(ここでは変数名app)
・@app.entrypointアノテーションでエージェント呼び出し口の設置
・app.run()でAgentCoreサーバー起動

実行するとデフォルト8080番で待ち受け状態になので、リクエストを投げてみる

ローカルでテスト

先程のターミナルが待ち受け状態のため、もう1つターミナルを起動して下記コードでリクエストを投げる。

# 必要なライブラリをインポート
import requests

# ローカルサーバーにリクエストを実施
response = requests.post(
    url="http://localhost:8080/invocations",
    headers={"Content-Type": "application/json"},
    json={"prompt": "JAWS-UGって何?"}
)

# レスポンスを画面に表示
print(response.json())

レスポンスが返ってきました。

AWSへデプロイ(Runtime)

ローカルでテストできたので、AWSにデプロイします。

requirements.txt作成

strands-agents
bedrock-agentcore

AgentCore Runtimeへデプロイ

# .env の内容をターミナルの環境変数に設定
$ export $(cat /workspaces/strands-agentcore/.env | grep -v ^# | xargs)

# AgentCoreのスターターツールキットをインストール
$ pip install bedrock-agentcore-starter-toolkit

# デプロイ準備
$ agentcore configure --entrypoint agentcore.py --name jawsug1109

いくつかQAがあり、今回はすべてEnterで。

Configuring Bedrock AgentCore...
✓ Using file: agentcore.py

🔍 Detected dependency file: requirements.txt
Press Enter to use this file, or type a different path (use Tab for autocomplete):
Path or Press Enter to use detected dependency file: requirements.txt
✓ Using requirements file: requirements.txt

🚀 Deployment Configuration
Select deployment type:
  1. Direct Code Deploy (recommended) - Python only, no Docker required
  2. Container - For custom runtimes or complex dependencies
Choice [1]: 1

Select Python runtime version:
  1. PYTHON_3_10
  2. PYTHON_3_11
  3. PYTHON_3_12
  4. PYTHON_3_13
Choice [3]: 3
✓ Deployment type: Direct Code Deploy (python.3.12)

🔐 Execution Role
Press Enter to auto-create execution role, or provide execution role ARN/name to use existing
Execution role ARN/name (or press Enter to auto-create):
✓ Will auto-create execution role

🏗️  S3 Bucket
Press Enter to auto-create S3 bucket, or provide S3 URI/path to use existing
S3 URI/path (or press Enter to auto-create):
✓ Will auto-create S3 bucket

🔐 Authorization Configuration
By default, Bedrock AgentCore uses IAM authorization.
Configure OAuth authorizer instead? (yes/no) [no]:
✓ Using default IAM authorization

🔒 Request Header Allowlist
Configure which request headers are allowed to pass through to your agent.
Common headers: Authorization, X-Amzn-Bedrock-AgentCore-Runtime-Custom-*
Configure request header allowlist? (yes/no) [no]:
✓ Using default request header configuration
Configuring BedrockAgentCore agent: jawsug1109

Memory Configuration
Tip: Use --disable-memory flag to skip memory entirely

✅ MemoryManager initialized for region: ap-northeast-1
No existing memory resources found in your account

Options:
  • Press Enter to create new memory
  • Type 's' to skip memory setup

Your choice:
✓ Short-term memory will be enabled (default)
  • Stores conversations within sessions
  • Provides immediate context recall

Optional: Long-term memory
  • Extracts user preferences across sessions
  • Remembers facts and patterns
  • Creates session summaries
  • Note: Takes 120-180 seconds to process

Enable long-term memory? (yes/no) [no]:
✓ Using short-term memory only
Will create new memory with mode: STM_ONLY
Memory configuration: Short-term memory only
Network mode: PUBLIC
Setting 'jawsug1109' as default agent
╭──────────────────────────────────────────────────────── Configuration Success ─────────────────────────────────────────────────────────╮
│ Agent Details                                                                                                                          │
│ Agent Name: jawsug1109                                                                                                                 │
│ Deployment: direct_code_deploy                                                                                                         │
│ Region: ap-northeast-1                                                                                                                 │
│ Account: ************                                                                                                                  │
│ Runtime: python3.12                                                                                                                    │
│                                                                                                                                        │
│ Configuration                                                                                                                          │
│ Execution Role: Auto-create                                                                                                            │
│ ECR Repository: N/A                                                                                                                    │
│ Network Mode: Public                                                                                                                   │
│ S3 Bucket: Auto-create                                                                                                                 │
│ Authorization: IAM (default)                                                                                                           │
│                                                                                                                                        │
│                                                                                                                                        │
│ Memory: Short-term memory (30-day retention)                                                                                           │
│                                                                                                                                        │
│                                                                                                                                        │
│ 📄 Config saved to: /workspaces/strands-agentcore/2_agentcore/docker/.bedrock_agentcore.yaml                                           │
│                                                                                                                                        │
│ Next Steps:                                                                                                                            │
│    agentcore launch                                                                                                                    │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

デプロイ開始

$ agentcore launch

IAMロール/ポリシー、S3バケット、MemoryManager、パッケージ作成からのマイクロサーバーデプロイ、Observabilityの有効化(CloudWatch Logs, X-Ray)を全部自動でやってくれました。

╭────────────────────────────────────────────────────────────────────── Deployment Success ───────────────────────────────────────────────────────────────────────╮
│ Agent Details:                                                                                                                                                  │
│ Agent Name: jawsug1109                                                                                                                                          │
│ Agent ARN: arn:aws:bedrock-agentcore:ap-northeast-1:************:runtime/jawsug1109-S1cIbABGna                                                                  │
│ Deployment Type: Direct Code Deploy                                                                                                                             │
│                                                                                                                                                                 │
│ 📦 Code package deployed to Bedrock AgentCore                                                                                                                   │
│                                                                                                                                                                 │
│ Next Steps:                                                                                                                                                     │
│    agentcore status                                                                                                                                             │
│    agentcore invoke '{"prompt": "Hello"}'                                                                                                                       │
│                                                                                                                                                                 │
│ 📋 CloudWatch Logs:                                                                                                                                             │
│    /aws/bedrock-agentcore/runtimes/jawsug1109-S1cIbABGna-DEFAULT --log-stream-name-prefix "2025/11/09/[runtime-logs"                                            │
│    /aws/bedrock-agentcore/runtimes/jawsug1109-S1cIbABGna-DEFAULT --log-stream-names "otel-rt-logs"                                                              │
│                                                                                                                                                                 │
│ 🔍 GenAI Observability Dashboard:                                                                                                                               │
│    https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#gen-ai-observability/agent-core                                                         │
│                                                                                                                                                                 │
│ ⏱️  Note: Observability data may take up to 10 minutes to appear after first launch                                                                              │
│                                                                                                                                                                 │
│ 💡 Tail logs with:                                                                                                                                              │
│    aws logs tail /aws/bedrock-agentcore/runtimes/jawsug1109-S1cIbABGna-DEFAULT --log-stream-name-prefix "2025/11/09/[runtime-logs" --follow                     │
│    aws logs tail /aws/bedrock-agentcore/runtimes/jawsug1109-S1cIbABGna-DEFAULT --log-stream-name-prefix "2025/11/09/[runtime-logs" --since 1h                   │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

動作確認

マネコンから動作確認

ターミナル上からもプロンプトを投げることができましたが、マネコンからテストしてみます。

「Amazon Bedrock AgentCore」> 「エージェントサンドボックス」へアクセス

レスポンスが出力されました。

GUIアプリから動作確認

・マネコンのサイドバー「エージェントランタイム」からエージェント名jawsug1109をクリック
・呼び出しコードからagentRuntimeArnをコピー

CodeSpaceで.envファイルにコピーしたARNをペースト

# AWS認証情報
(略)

# AgentCore設定
AGENT_RUNTIME_ARN=arn:aws:bedrock-agentcore:xxx(以下略)

新規ファイルにフロントエンドのコードをStreamlitで実装

# 必要なライブラリをインポート
from dotenv import load_dotenv
import os, asyncio, boto3, json, uuid
import streamlit as st

# .envファイルから環境変数をロード
load_dotenv(override=True)

# タイトルを描画
st.title("Strands on AgentCore")
st.write("何でも聞いてね!")

# チャットボックスを描画
if prompt := st.chat_input("メッセージを入力してね"):

    # ユーザーのプロンプトを表示
    with st.chat_message("user"):
        st.markdown(prompt)

    # エージェントの回答を表示
    with st.chat_message("assistant"):

        # AgentCoreランタイムを呼び出し
        with st.spinner("考え中…"):
            agentcore = boto3.client('bedrock-agentcore')
            response = agentcore.invoke_agent_runtime(
                agentRuntimeArn=os.getenv("AGENT_RUNTIME_ARN"),
                payload=json.dumps({"prompt": prompt})
            )

        # 結果のテキストを取り出して表示
        response_body = response["response"].read()
        response_data = json.loads(response_body.decode('utf-8'))
        st.write(response_data["result"]["content"][0]["text"])

Runtimeへプロンプト投げる

agentcore = boto3.client(‘bedrock-agentcore’)
agentcore.invoke_agent_runtime(
 agentRuntimeArn=os.getenv(“AGENT_RUNTIME_ARN”),
 payload=json.dumps({“prompt”: prompt})
)

GUIアプリ起動

$ pip install streamlit
$ streamlit run 2_frontend.py

 

運用監視(Observability)

AgentCore Ovservabilityでトレースを確認

・マネコンのサイドバー「エージェントランタイム」からエージェント名jawsug1109をクリック
・「ダッシュボードを表示」をクリック

残念ながらトレースは表示されず。。。

CloudWatchログを確認

・マネコンで「CloudWatch」を検索してアクセス
・ロググループ > 「/aws/bedrock-agentcore/runtimes/xxxxxxxxxxxxxxxxxxxxxxxx」をクリック

こちらは良い具合にログが出力されていました。

まとめ

Strands Agentsで実装したエージェントをAgentCore Runtimeを用いてAWSデプロイし、Observabilityで監視するハンズオンを行いました。
トレースがうまく動作してなかったので、機会を見てリトライしようと思います。

また今回はAgentCore Memoryも作成していたのですが特に使わずでした。
メモリも使ったエージェントも試していきたいと思います。

目次