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

引用元: Bedrock AgentCore & Strands Agentsハンズオン(JAWS-UG東京)
環境構築、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-agentcoreAgentCore 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 launchIAMロール/ポリシー、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も作成していたのですが特に使わずでした。
メモリも使ったエージェントも試していきたいと思います。

