Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strands Agents × AWS DevOps Agent 〜自作エージェントに組み込...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for ryu-ki ryu-ki
June 19, 2026
64

Strands Agents × AWS DevOps Agent 〜自作エージェントに組み込んでみた〜

Avatar for ryu-ki

ryu-ki

June 19, 2026

More Decks by ryu-ki

Transcript

  1. やりたかったこと DevOps Agent は Web アプリから操作するのが基本 自分のエージェントから呼び出せたら面白いのでは? チャットで環境の状況を聞く – インシデント調査を起票する

    – 調査結果を取得する – プレビュー時点では boto3 API が使えなかったが... GA のタイミングで使えるようになった – Strands Agents のカスタムツールとして組み込んでみた – 3
  2. ツールと構成 3つのツールを作成 ツール 何をする? devops_agent_chat DevOps Agent とチャットする devops_agent_investigate 調査タスクを起票する

    devops_agent_get_result 調査結果を取得する Strands Agent ├── devops_agent_chat ← 「このアラーム何が起きてる?」 ├── devops_agent_investigate ← 「調査タスクを起票して」 └── devops_agent_get_result ← 「調査結果を教えて」 5
  3. サービス名は devops-agent import boto3 client = boto3.client("devops-agent", region_name="us-east-1") botocore 1.42.79

    (GA)以降で利用可能 それ以前だと UnknownServiceError になります – 7
  4. EventStream のパース type 内容 text ストリーミングテキスト context_usage コンテキスト使用量 final_response 最終応答(これを使う)

    chat_title 自動タイトル レスポンスのキーは "events" ブロックの type は以下の 4 種類 10
  5. チャットの実装 @tool def devops_agent_chat(message: str) -> str: chat = devops_client.create_chat(

    agentSpaceId=AGENT_SPACE_ID, userType="IAM", ) send_resp = devops_client.send_message( agentSpaceId=AGENT_SPACE_ID, executionId=chat["executionId"], content=message, ) # final_response ブロックだけ抽出 ... 11
  6. 調査起票の実装 @tool def devops_agent_investigate( title: str, description: str, priority: str

    = "HIGH" ) -> str: resp = devops_client.create_backlog_task( agentSpaceId=AGENT_SPACE_ID, title=title, description=description, priority=priority, taskType="INVESTIGATION", ) return json.dumps({"taskId": resp["task"]["taskId"], ...}) 起票すると DevOps Agent がバックグラウンドで自律的に調査 13
  7. 結果取得の流れ 1. GetBacklogTask でステータスを確認 2. COMPLETED なら ListJournalRecords で調査ジャーナルを取得 (ステータスは以下のように推移)

    3. ジャーナルから最終回答を抽出 PENDING_TRIAGE → PENDING_START → IN_PROGRESS → COMPLETED 抽出のポイント recordType: "message" かつ role: "assistant" が対象 – その中の type: "text" ブロックの最後が最終回答 – 15
  8. 起票と結果取得を分離した理由 方式 用途 ポーリング ツール内で結果を待って返したい場合 EventBridge Slack 等への完了通知 分離(今回) エージェントに判断を委ねる

    調査完了まで数分〜十数分かかる ポーリングでブロックするのは現実的ではない エージェント自身が「起票→待ち→結果確認」を判断できる 23
  9. まとめ といったことを Claude Code が調査してくれて楽に実装できたが... こういった試行錯誤が楽しかった時期もあったなぁとしみじみしました DevOps Agent を boto3

    経由で Strands のツールとして組み込んだ チャット・調査起票・結果取得の 3 つのツールを実装 EventStream のパースが少し複雑 キーは "events" 、取得すべきは final_response のみ – 起票と結果取得の分離がポイント 25