
DevOps Agent の調査完了を EventBridge と SNS でメール通知してみた
はじめに
DevOps Agent の自動調査が終わった後、メール通知したい場合はどうするのか。DevOps Agent から Slack 通知は用意されていますがメール通知は用意されていないです。そこで EventBridge でイベントを拾って SNS 経由でメール送信する構成を試しました。実際に調査完了メールを受信できたので、設定内容と届いたメール本文を共有します。
前提となる GuardDuty x DevOps Agent の設定手順は以下の記事で紹介しています。
確認結果
EventBridge + SNS で調査完了メールを受信できました。GuardDuty の検知内容や AI による調査レポートは、メール本文に含められません。
aws.aidevops イベントの detail オブジェクトにはステータスとメタデータのみが格納されており、調査レポートのテキストは含まれていません。スキーマの詳細は後述します。

今回の検証構成
SNS トピックにメールアドレスをサブスクライブし、確認メールのリンクをクリック済みです。
| 区分 | リソース | 用途 |
|---|---|---|
| 事前準備 | DevOps Agent(エージェントスペース) | GuardDuty の調査を実行する |
| 事前準備 | SNS トピック | メール通知の送信先 |
| 本記事の手順 | EventBridge ルール | 調査完了イベントを SNS に転送する |
EventBridge ルールの設定
EventBridge コンソールで新しいルールを作成します。イベントパターンは以下の JSON を使います。ソースは aws.aidevops、detail-type には調査時のライフサイクルイベントを列挙します。Investigation Completed だけでなく Failed、Timed Out、Cancelled も含めることで、調査が失敗・タイムアウトした場合も通知されるようにしてみました。
{
"detail-type": ["Investigation Completed", "Investigation Failed", "Investigation Timed Out", "Investigation Cancelled"],
"source": ["aws.aidevops"]
}

ターゲットには SNS トピックを指定します。

メール本文のカスタマイズ
ターゲット設定で InputTransformer を使うと、イベントから取り出した値をメール本文に埋め込めます。
拾えるフィールド一覧
InputPathsMap で取り出せるフィールドは、aws.aidevops イベントの detail オブジェクトに含まれるものに限ります。
| 変数 | イベントのパス | 内容 |
|---|---|---|
account |
$.account |
AWS アカウント ID |
region |
$.region |
リージョン |
detailType |
$.detail-type |
イベント種別(例: Investigation Completed) |
agentSpace |
$.detail.metadata.agent_space_id |
エージェントスペース ID |
taskId |
$.detail.metadata.task_id |
タスク ID |
status |
$.detail.data.status |
ステータス(例: COMPLETED) |
priority |
$.detail.data.priority |
優先度(例: HIGH) |
startedAt |
$.detail.data.created_at |
タスク作成日時 |
endedAt |
$.detail.data.updated_at |
最終更新日時 |
summaryId |
$.detail.data.summary_record_id |
サマリーレコード ID |
AWS 公式ドキュメントに記載されているイベントスキーマは以下のとおりです。
"detail": { "version": "1.0.0", "metadata": { "agent_space_id": "...", "task_id": "...", "execution_id": "..." }, "data": { "task_type": "INVESTIGATION", "priority": "CRITICAL", "status": "COMPLETED", "created_at": "...", "updated_at": "...", "summary_record_id": "..." } }出典: AWS DevOps Agent events detail reference - AWS DevOps Agent
詳細な調査内容を取得するには、メール本文の Console URL からコンソールを開くか、summary_record_id を使って別途内容を取得する必要がありました。
試してみた設定
まず InputPathsMap でイベントの各フィールドに変数名を割り当てます。
{
"account": "$.account",
"agentSpace": "$.detail.metadata.agent_space_id",
"detailType": "$.detail-type",
"endedAt": "$.detail.data.updated_at",
"priority": "$.detail.data.priority",
"region": "$.region",
"startedAt": "$.detail.data.created_at",
"status": "$.detail.data.status",
"summaryId": "$.detail.data.summary_record_id",
"taskId": "$.detail.metadata.task_id"
}
次に InputTemplate でメール本文の形式を定義します。<変数名> の形で参照します。agentSpace(エージェントスペース ID)と taskId を組み合わせてコンソール URL を生成しています。
"AWS DevOps Agent: <detailType>\n\nStatus : <status>\nPriority : <priority>\n\nConsole : https://<agentSpace>.aidevops.global.app.aws/investigation/<taskId>\n\nStarted : <startedAt>\nEnded : <endedAt>\nSummary ID : <summaryId>\n\nTask ID : <taskId>\nAccount : <account> (<region>)"
こんな感じです。

届いたメール内容
InputTransformer の設定を適用して実際に届いたメールです。調査が終わったことはわかりますが、結局どうだったのかはコンソールを確認しないとわからないオチです。

まとめ
DevOps Agent の調査完了後にメール通知したいなら、現状ですと EventBridge ルールで aws.aidevops のイベントを受け取り、SNS 経由でメール通知する構成になりました。イベントに含まれるのはステータスやメタデータのみで、調査レポートの本文は届きません。メールはあくまで「調査が終わった」トリガーとして使い、詳細はコンソール URL から確認しないとわかりません。
おわりに
調査が終わったことをすぐ知りたいだけならこの構成で十分ですが、AI の調査レポートをそのままメールに載せられれば理想的だと感じました。間に Lambda で DevOps Agent の結果を取得するのもありなのですが、今後のアップデートで SNS 連携追加されてもおかしくはないので頑張りすぎないことにしました。








