現在話題的 Amazon Bedrock AgentCore 在東京地區也開始提供一般性服務,似乎已經成為一大趨勢。
功能非常多,跟上著實不易,但我最近總算有點入門了。
在本文中,我想對最主要的 Runtime 功能進行解說。此外,我計畫未來也將撰寫有關各項功能的解說文章。
「Runtime」是指使所創建的代理能夠實際運行的執行環境。
簡言之,就是將在本地開發的代理或使用 Strands 構建的代理部署到 Bedrock 上的管理環境,並使其能夠運行的機制。
利用 Runtime 有以下幾個優點:
僅僅用文字可能難以掌握具體形象,但官方圖示如下所示。
通過構建 Docker 映像並推送至 ECR,僅需使用 AgentCore CLI 或 AWS SDK 進行 Runtime 登記及啟動,即可使其運行。
具體來說,可以視為在 Bedrock 上運行的自製代理的托管環境。
BedrockAgentCore 提供了一個名為 Starter Toolkit 的便利項目,使用該工具能簡單進行部署。
首先,為了使用它,請通過以下命令安裝 bedrock-agentcore-starter-toolkit。
pip install bedrock-agentcore
這次打算使用 StrandsAgents 進行部署。這個 StrandsAgents 非常簡單,因此請務必試試看。
我之前也曾撰寫過 StrandsAgents 的文章,若有興趣可以查看。
不過手中運行的代理,若不加以修改是無法在 Bedrock 的執行環境(Runtime)上使用的。此處將幾乎不改變現有代碼,利用 AgentCore 的 SDK 將其 HTTP 端點化,並便於引入 Runtime。
from strands import Agent
agent = Agent()
agent("請告訴我關於 JAWS-UG 的事")
可使用以下命令先確認其運行效果。
uv run runtime_ex.py
接下來,我們將上述代碼更改為符合 AgentCore 的規範。
同時,還需額外創建以下檔案,具體整理如下:
專案根目錄/
├── runtime_ex.py # 存放代理代碼
├── requirements.txt # 記錄依賴關係
└── __init__.py # 這個可以是空的
requirements.txt
strands-agents
bedrock-agentcore
將代理的代碼修改如下。
from strands import Agent
from bedrock_agentcore.runtime import BedrockAgentCoreApp
agent = Agent()
app = BedrockAgentCoreApp()
@app.entrypoint
def invoke(payload):
user_message = payload.get("prompt", "")
response = agent(user_message)
return str(response)
if __name__ == "__main__":
app.run()
@app.entrypoint
是用於註冊 Runtime 調用的函數的裝飾器。到此為止,已經能夠完成一個基礎的設置,接下來便要將其實際部署到 AgentCore。
首先使用以下命令進行部署前的準備。
uv run agentcore configure --entrypoint runtime_ex.py
上述命令會執行圖片中框線所圍的部分。
這時將自動生成以下檔案。
執行命令後會出現多個選項,基本上按 Enter 一直點擊即可。
這樣就會自動創建
Configuring Bedrock AgentCore...
Entrypoint parsed: file=/Users/hogehoge/Desktop/strands/runtime_ex.py, bedrock_agentcore_name=runtime_ex
Agent name: runtime_ex
🔐 執行角色
按 Enter 自動創建執行角色,或提供現有執行角色 ARN/名稱
之前配置的: arn:aws:iam::hogehoge:role/AmazonBedrockAgentCore
執行角色 ARN/名稱(或按 Enter 自動創建):
✓ 將自動創建執行角色
🏗️ ECR 儲存庫
按 Enter 自動創建 ECR 儲存庫,或提供現有的 ECR 儲存庫 URI
之前配置的: hogehoge.dkr.ecr.us-west-2.amazonaws.com/bedrock-agentcore-agent_core
ECR 儲存庫 URI(或按 Enter 自動創建):
✓ 將自動創建 ECR 儲存庫
🔍 檢測到依賴檔案: requirements.txt
按 Enter 使用此檔案,或輸入其他路徑(使用 Tab 自動補全):
路徑或按 Enter 使用偵測到的依賴檔案:
✓ 使用偵測到的檔案: requirements.txt
🔐 授權配置
Bedrock AgentCore 默認使用 IAM 授權。
是否改用 OAuth 授權?(是/否)[否]:
✓ 使用默認 IAM 授權
🔒 請求標頭白名單
配置允許通過的請求標頭。
常見標頭: Authorization, X-Amzn-Bedrock-AgentCore-Runtime-Custom-*
配置請求標頭白名單?(是/否)[否]:
✓ 使用默認請求標頭配置
配置 BedrockAgentCore 代理: runtime_ex
🧠 記憶配置
✅ 已為區域初始化 MemoryManager: us-west-2
檢測到現有記憶資源:
1. hogehoge
ID: hogehoge
2. hogehoge
ID: hogehogenJl
選項:
• 輸入數字以使用現有記憶
• 按 Enter 創建新記憶
• 輸入 's' 跳過記憶設置
您的選擇:
🧠 記憶配置
✓ 短期記憶默認啟用
• 在會話內儲存對話記錄
• 提供即時上下文回憶
選擇性: 長期記憶
• 提取跨會話的用戶偏好
• 記住事實和模式
• 創建會話摘要
• 注意: 需要 60-90 秒進行處理
啟用長期記憶提取?(是/否)[否]:
✓ 僅使用短期記憶
將創建新記憶,模式: STM_ONLY
記憶配置: 僅短期記憶
生成的 Dockerfile: /Users/hogehoge/Desktop/strands/Dockerfile
生成的 .dockerignore: /Users/hogehoge/Desktop/strands/.dockerignore
將默認代理從 'agent_core' 變更為 'runtime_ex'
╭─────────────────────────────────────────────────────────── 配置成功 ────────────────────────────────────────────────────────────╮
│ 配置完成 │
│ 代理詳情: │
│ 代理名稱: runtime_ex │
│ Runtime: Docker │
│ 區域: us-west-2 │
│ 帳戶: hogehoge │
│ │
│ 配置: │
│ 執行角色: 無 │
│ ECR 儲存庫: 自動創建 │
│ 授權: IAM(默認) │
│ │
│ │
│ 記憶: 短期記憶(保留 30 天) │
│ │
│ 📄 配置已保存至: /Users/hogehoge/Desktop/strands/.bedrock_agentcore.yaml │
│ │
│ 下一步: │
│ agentcore launch │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
到這一步,準備已經完成,可以開始將代理部署到 Runtime。
這裡利用 configure 命令準備的配置檔在 CodeBuild 上進行構建。
執行以下命令以將其部署到 AgentCore。
執行後的日誌顯示,構建已完成並提示請求 agentcore invoke。
uv run agentcore launch
此命令執行的是以下框線部分。
🚀 正在啟動 Bedrock AgentCore(codebuild 模式 - 建議)...
• 在雲中使用 CodeBuild 構建 ARM64 容器
• 不需要本地 Docker(默認行為)
• 生產就緒部署
💡 部署選項:
• agentcore launch → CodeBuild(當前)
• agentcore launch --local → 本地開發
• agentcore launch --local-build → 本地構建 + 雲部署
為代理創建記憶資源: runtime_ex
✅ 已為區域初始化 MemoryManager: us-west-2
⠙ 正在啟動 Bedrock AgentCore... 創建新的 STM 內存...
⠋ 正在啟動 Bedrock AgentCore... 創建記憶: runtime_ex_mem-eyH8CX2jlV
✅ 已創建新記憶: runtime_ex_mem-eyH8CX2jlV(在背景中配置中)
開始為代理 'runtime_ex' 在帳戶 hogehoge (us-west-2) 進行 CodeBuild ARM64 部署
⠙ 正在啟動 Bedrock AgentCore... 正在設置 AWS 資源 (ECR 儲存庫、執行角色)...
獲取或創建代理的 ECR 儲存庫: runtime_ex
儲存庫不存在,創建新 ECR 儲存庫: hogehoge
⠹ 正在啟動 Bedrock AgentCore...✅ ECR 儲存庫可用: hogehoge.dkr.ecr.us-west-2.amazonaws.com/bedrock-agentcore-runtime_ex
獲取或創建代理的執行角色: runtime_ex
使用 AWS 區域: us-west-2、帳戶 ID: hogehoge
角色名稱: hogehoge
⠙ 正在啟動 Bedrock AgentCore...角色不存在,創建新角色: hogehoge
⠹ 正在啟動 Bedrock AgentCore...開始為代理 'runtime_ex' 創建執行角色流程
✓ 角色創建中: hogehoge
創建 IAM 角色: hogehoge
⠴ 正在啟動 Bedrock AgentCore...✓ 角色創建: arn:aws:iam::hogehoge
⠋ 正在啟動 Bedrock AgentCore...✓ 附加執行策略: hogehogeBedrockAgentCoreRuntimeExecutionPolicy-runtime_ex
角色創建完成並準備與 Bedrock AgentCore 一同使用
✅ 執行角色可用: arn:aws:iam::hogehoge:role/AmazonBedrockAgentCoreSDKRuntime-us-west-2-d69978d78f
準備 CodeBuild 專案並上傳來源...
⠏ 正在啟動 Bedrock AgentCore... 獲取或創建代理的 CodeBuild 執行角色: runtime_ex
角色名稱: hogehoge
⠇ 正在啟動 Bedrock AgentCore... CodeBuild 角色不存在,創建新角色: AmazonBedrockAgentCoreSDKCodeBuild-us-west-2-d69978d78f
創建 IAM 角色: AmazonBedrockAgentCoreSDKCodeBuild-us-west-2-d69978d78f
⠏ 正在啟動 Bedrock AgentCore...✓ 角色創建: arn:aws:iam::hogehoge:role/AmazonBedrockAgentCoreSDKCodeBuild-us-west-2-d69978d78f
附加內聯策略: CodeBuildExecutionPolicy 到角色: AmazonBedrockAgentCoreSDKCodeBuild-us-west-2-d69978d78f
⠸ 正在啟動 Bedrock AgentCore...✓ 策略已附加: CodeBuildExecutionPolicy
等待 IAM 角色生成...
⠇ 正在啟動 Bedrock AgentCore...CodeBuild 執行角色創建完成: arn:aws:iam::hogehoge:role/AmazonBedrockAgentCoreSDKCodeBuild-us-west-2-d69978d78f
⠸ 正在啟動 Bedrock AgentCore...使用 .dockerignore,包含 44 個模式
⠋ 正在啟動 Bedrock AgentCore...上傳來源至 S3: runtime_ex/source.zip
⠏ 正在啟動 Bedrock AgentCore...創建 CodeBuild 專案: bedrock-agentcore-runtime_ex-builder
開始 CodeBuild 構建(這可能需要幾分鐘)...
⠴ 正在啟動 Bedrock AgentCore...開始 CodeBuild 監控...
⠇ 正在啟動 Bedrock AgentCore...🔄 排隊開始(總計: 0s)
⠸ 正在啟動 Bedrock AgentCore...✅ 排隊完成,耗時 1.2s
🔄 配置開始(總計: 1s)
⠏ 正在啟動 Bedrock AgentCore...✅ 配置完成,耗時 9.3s
🔄 下載來源開始(總計: 11s)
⠸ 正在啟動 Bedrock AgentCore...✅ 下載來源完成,耗時 1.2s
🔄 構建開始(總計: 12s)
⠏ 正在啟動 Bedrock AgentCore...✅ 構建完成,耗時 14.1s
🔄 後構建開始(總計: 26s)
⠹ 正在啟動 Bedrock AgentCore...✅ 後構建完成,耗時 5.8s
🔄 完成開始(總計: 32s)
⠧ 正在啟動 Bedrock AgentCore...✅ 完成,耗時 1.2s
🎉 CodeBuild 成功完成,耗時 0m 32s
CodeBuild 成功完成
✅ CodeBuild 專案配置已保存
部署至 Bedrock AgentCore...
將記憶配置傳遞至代理: runtime_ex_mem-eyH8CX2jlV
⠸ 正在啟動 Bedrock AgentCore...✅ 代理已創建/更新: arn:aws:bedrock-agentcore:us-west-2:017820658462:runtime/runtime_ex-JSXMBUGk3e
觀測已啟用,配置交易搜索...
⠙ 正在啟動 Bedrock AgentCore...CloudWatch 日誌資源策略已配置
⠋ 正在啟動 Bedrock AgentCore...X-Ray 追蹤目的地已配置
⠹ 正在啟動 Bedrock AgentCore...X-Ray 索引規則已配置
✅ 交易搜尋已完全配置
🔍 GenAI 觀測儀表板:
https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#gen-ai-observability/agent-core
輪詢以檢查端點是否就緒...
⠦ 正在啟動 Bedrock AgentCore...代理端點: arn:aws:bedrock-agentcore:us-west-2:hogehoge:runtime/runtime_ex-JSXMBUGk3e/runtime-endpoint/DEFAULT
部署成功完成 - 代理: arn:aws:bedrock-agentcore:us-west-2:hogehoge:runtime/runtime_ex-JSXMBUGk3e
╭───────────────────────────────────────────────────────────── 部署成功 ─────────────────────────────────────────────────────────────╮
│ ✅ CodeBuild 部署成功! │
│ │
│ 代理詳情: │
│ 代理名稱: runtime_ex │
│ 代理 ARN: hogehoge │
│ ECR URI: hogehoge.dkr.ecr.us-west-2.amazonaws.com/bedrock-agentcore-runtime_ex:latest │
│ CodeBuild ID: hogehoge │
│ │
│ 🚀 ARM64 容器已部署到 Bedrock AgentCore │
│ │
│ 下一步: │
│ agentcore status │
│ agentcore invoke '{"prompt": "Hello"}' │
│ │
│ 📋 CloudWatch 日誌: │
│ /aws/bedrock-agentcore/runtimes/runtime_ex-JSXMBUGk3e-DEFAULT --log-stream-name-prefix "2025/10/17/[runtime-logs]" │
│ /aws/bedrock-agentcore/runtimes/runtime_ex-JSXMBUGk3e-DEFAULT --log-stream-names "otel-rt-logs" │
│ │
│ 🔍 GenAI 觀測儀表板: │
│ https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#gen-ai-observability/agent-core │
│ │
│ ⏱️ 注意: 觀測數據可能需要長達 10 分鐘才能在第一次啟動後顯示 │
│ │
│ 💡 查詢日誌: │
│ aws logs tail /aws/bedrock-agentcore/runtimes/runtime_ex-JSXMBUGk3e-DEFAULT --log-stream-name-prefix "2025/10/17/[runtime-logs]" --follow │
│ aws logs tail /aws/bedrock-agentcore/runtimes/runtime_ex-JSXMBUGk3e-DEFAULT --log-stream-name-prefix "2025/10/17/[runtime-logs]" --since 1h │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
啟動可以使用以下命令進行。
這次我們詢問了有關 JAWS-UG 的問題。
uv run agentcore invoke '{"prompt": " JAWS-UG 說明"}'
回應如下。
Response:
{"result": {"role": "assistant", "content": [{"text": "JAWS-UG是,日本AWS用戶組(Japan AWS User Group)的簡稱。\n\n## 概要\n-
**正式名稱**: Japan AWS User Group\n- **目的**: AWS(Amazon Web Services)用來進行日本的用戶之間的資訊交換・交流\n- **運營型態**:
社群基地的非營利組織\n\n## 主要活動\n1. **舉辦學習會・講座**\n - AWS的新服務介紹\n - 實用的技術會議\n -
實作型的學習會\n\n2. **區域支部活動**\n - 在全國各地有支部存在\n - 根據地區特性舉辦活動\n\n3. **線上活動**\n -
在Slack等平台進行溝通\n - 資訊共享・問題回應\n\n## 參加的好處\n- 與AWS技術者建立人脈\n- 獲取最新的AWS資訊\n-
分享實務經驗\n- 職涯發展的機會\n\n## 參加方式\n- 確認官方網站或SNS上的資訊\n- 登錄參加學習會\n-
參加線上社區\n\nJAWS-UG是,從想學習AWS的初學者到上級者均可參加的日本最大規模的AWS社群之一。"}]}}
這部分可以通過使用 Amazon Bedrock AgentCore 的 GenAI 觀測工具更容易理解。
移動到 CloudWatch 控制台後,將可以見到 GenAI 觀測的新增資訊。
此時出現了在預覽期間沒有的 Model Invocation。
在儀表板上,可以跟蹤剛才在 Runtime 處理的日誌。
這次只是簡單地向 LLM 提問,但也可以查看它是如何處理的。
對於需要連接多個代理的結構來說,這會是一個不錯的功能。
此外,下面還可以查看更詳細的處理日誌。
這次處理似乎沒有問題,但若發生錯誤等,除錯會變得非常簡單。
一般而言,將根據使用量進行收費。
CPU: $0.0895/vCPU 時間
記憶: $0.00945/GB 時間
詳細資訊請參考以下官方網站。
本文介紹了如何使用 Amazon Bedrock AgentCore 將自製代理部署到 Runtime 並使其運行的流程。
步驟實在簡單,讓人忍不住想這樣真的可以嗎?
不過,一旦掌握流程後,就能將使用 Strands 等所創建的代理直接部署並運行到 Bedrock 上,而這樣「開發 → 測試 → 實際運行」的整個過程都可在管理下進行,也是極大的吸引力。