AWS DevOps Agentに2026年8月25日に追加された新機能「Directed Actions」 (承認付きでミューテーション操作を実行できる機能)を検証するためのコード一式です。
DynamoDBのスロットリングを題材に、
- CloudWatchアラームの発火をきっかけに、DevOps Agentの汎用webhookへインシデントとして転送する
- 担当者にメール(SNS)で通知する
- 担当者がDevOps Agent Web AppのInvestigations画面で調査結果・緩和策を確認し、そこで承認する
- DevOps Agentが緩和策(DynamoDBのキャパシティ変更)を実行する
- 続けて根治のためのPull RequestをGitHub MCP Server経由で作成する(これもWeb App上で承認)
という一連の流れを検証します。承認・実行・PR作成はすべてDevOps Agent Web App側の ネイティブな機能に任せる方針にしたため、自作するのは「CloudWatchアラームをwebhookへ 転送する」「担当者に通知する」という薄い橋渡し部分だけです(Slackボットのような 自作の承認UIは持たない)。全体をコストのかからないサーバーレス構成 (Lambda / SNS / DynamoDB on-demand)で組んでいます。
CloudWatch Alarm (DynamoDB書き込みスロットリング)
│ EventBridge (Alarm State Change → ALARM)
▼
Lambda: investigation-trigger
│ HMAC署名してPOST (DevOps Agent 汎用webhook)
▼
DevOps Agent が調査を自動開始(Investigationsに記録)
│
Lambda: investigation-trigger (同じLambda内で継続)
│ SNS Publish
▼
担当者にメール通知「Investigations一覧で確認してください」
▼
担当者がWeb Appで調査結果・緩和策を確認し、チャットで実行を指示
│ (Directed Actionsの承認UIはWeb App組み込み、ここは自作しない)
▼
DevOps Agent が緩和策を実行 → 続けて根治PRの作成もWeb App上で承認
▼
根治PRがGitHubに作成される(マージは人間が行う)
| スタック | 内容 |
|---|---|
DevOpsAgentDemoWorkloadStack |
「障害の起きる側」。DynamoDBテーブル(意図的に低プロビジョンド)、CloudWatchアラーム、手動起動のロードジェネレータLambda、参考シナリオ用のセキュリティグループ |
DevOpsAgentAgentSpaceStack |
DevOps AgentのAgent Space本体、AWS監視アカウントのassociation、GitHub MCP Serverのassociation |
DevOpsAgentElevatedRoleStack |
Directed Actions実行用の昇格IAMロール(このデモで使う操作だけに絞った最小権限) |
DevOpsAgentMitigationPipelineStack |
webhook転送Lambda、SNSトピック(+メール購読) |
- DynamoDBテーブルはプロビジョンド1RCU/1WCU(スロットリングをわざと再現するため)。月額ごく僅か
- Lambdaは全てARM64、リクエスト課金。ロードジェネレータは手動起動のみでスケジュール実行しない
- SNSはメール購読のみで実質無料
- VPCはNAT Gatewayなし(参考シナリオのセキュリティグループを置くためだけの入れ物)
- Secrets Managerは使わず、SSM Parameter Store(Standard tier、無料)でwebhook認証情報を管理
- 検証が終わったら
cdk destroy --allで即座に削除する運用を前提にしている
- DevOps Agentの汎用webhook作成(コンソール操作のみ、API/CLI/IaC非対応): Agent Space → Capabilitiesタブ → WebhookセクションでGenerate webhook、 認証方式はHMACを選択。表示されるwebhook URLとシークレットはこの画面でしか見えない (シークレットは1度しか表示されない)ので必ず控える。
- Directed Actionsの有効化・昇格ロールの登録: 2026年8月時点でCloudFormationに未対応で
AWS CLI/SDKからのみ設定できる。
cdk deploy後にscripts/enable-directed-actions.shを実行する。 - GitHub PAT: 個人アカウントの対象リポジトリに対する
repoスコープのPersonal Access Token (根治PR作成用。GitHub MCP associationへの登録も同スクリプトで行う) - 1で控えたwebhook URL・シークレットをSSM Parameter Store(SecureString)に登録:
aws ssm put-parameter --name /devopsagent-mitigation/webhook-url --type SecureString --value https://event-ai.ap-northeast-1.api.aws/webhook/generic/... aws ssm put-parameter --name /devopsagent-mitigation/webhook-secret --type SecureString --value ...
- Agent SpaceをAWSコンソールで開き、Web AppのURL(Investigations一覧ページ)を控えて
.envのWEBAPP_INVESTIGATIONS_URLに設定する(固定のURLパターンがドキュメントに 無いため、実際に開いて確認する必要がある)
cp .env.example .env # 値を埋める(.envはコミットされない)
npm install
npm run synth # 差分確認
npm run deploy # 実際にデプロイ(全スタック)
# Directed Actionsの有効化・昇格ロール登録・GitHub MCP認証情報の設定
AGENT_SPACE_ID=<AgentSpaceIdOutput> \
ELEVATED_ROLE_ARN=<ElevatedRoleArnOutput> \
AWS_ACCOUNT_ID=<デプロイ先アカウントID> \
GITHUB_PAT=<GitHub PAT> \
./scripts/enable-directed-actions.shデプロイ後、SNSのメール購読はAWSから届く確認メールのリンクをクリックして Confirmする必要がある(1回だけ)。
検証が終わったら:
npx cdk destroy --allupdate-associationでGitHub MCPの認証情報(PAT)を渡すフィールド名 (scripts/enable-directed-actions.shのauthorizationTokenは暫定)- Agent Spaceの
operatorAppを省略せずに作った場合の実際の挙動 - Web AppのInvestigations一覧ページの実際のURLパターン(ドキュメントに記載なし、 コンソールで確認する前提にしている)
- 実際の
cdk deploy(検証アカウントへの実デプロイ、実コスト発生)は未実施
検証結果は別途DevelopersIOの記事として公開予定。