
AWS DevOps AgentをSlackのメンションで起動し、読み取り調査させてみた
こんにちは、カスタマーサクセス部のやまとです。
はじめに
アラームが鳴ったときの一次調査を、AWS DevOps Agentに任せたいと考えています。
そこで、Slackでエージェントにメンションして調査を頼み、結果を受け取るまでを試してみました。
今回は、エージェントには読み取りと提案だけをさせる形にして、調査を始めるかどうかは人が決める仕組みにしています。
対応の流れ

- Lambdaのエラーで、CloudWatchのアラームがALARMになる
- オペレーターが、Slackでエージェントにメンションして調査を依頼する
- エージェントが調査を作成し、読み取りの権限でアラーム・ログ・メトリクス・Lambdaの設定を調べる
- 途中経過と結果(根本原因・判定・緩和策)が、「Investigation started」のスレッドに届く
- オペレーターが緩和策を確かめ、変更は人の手続き(承認・コードでの変更)で行う
調査の起動は、人のメンションだけにしています。
アラームから自動で起動すると、同じアラームが続けて鳴ったときに調査が重なり、そのぶん費用がかかるためです。
前提
検証環境:東京リージョン(ap-northeast-1)
- AWS DevOps Agentのエージェントスペースを作成し、調査するAWSアカウントを関連付けてある
- エージェントスペースとSlackのプライベートチャンネルを、双方向モードでつないである(つなぎ方はユーザーガイドとこちらの記事)
- エージェントには読み取りの権限だけを渡し、directed actions(承認つきで変更を実行させる機能)は使わない
やったこと
1. 題材のアラームを鳴らす
調査の題材として、会員データの同期バッチを模したLambdaを作りました。
接続先に、どこにもつながらないドキュメント用のアドレス(192.0.2.10)を入れています。
接続がタイムアウトすると、CRITICALのログを出します。
def handler(event, context):
endpoint = os.environ["DB_ENDPOINT"]
port = int(os.environ["DB_PORT"])
log("INFO", "job started", target=f"{endpoint}:{port}")
started = time.time()
try:
with socket.create_connection((endpoint, port), timeout=3):
pass
except OSError as error:
elapsed = round(time.time() - started, 2)
log("CRITICAL", "job failed: could not connect to database",
target=f"{endpoint}:{port}", error=str(error), elapsed_seconds=elapsed)
return {"status": "failed"}
log("INFO", "job finished")
return {"status": "ok"}
CRITICALの行をメトリクスフィルターで数え、1件以上でALARMになるアラームを設定しました。
Lambdaを3回動かすと、約1分後にアラームがALARMになりました。
{"level": "CRITICAL", "job": "member-sync", "message": "job failed: could not connect to database", "target": "192.0.2.10:3306", "error": "timed out", "elapsed_seconds": 3.01}
2. Slack でメンションして調査を依頼する
チャンネルで、エージェントにメンションして次の文を送りました。
調べる範囲と知りたいこと、変更を実行しないことを書いています。
@AWS DevOps Agent - AP (Tokyo) 次のアラートの調査(investigation)を始めてください。
アラーム: Test-CloudWatch-MemberSyncJobCritical(<aws-account-id>、ap-northeast-1)
対象: Lambda 関数 Test-Lambda-MemberSyncJob とそのロググループ
知りたいこと:
1. 原因(根拠にした CloudWatch Logs のクエリと値を添えて)
2. インフラ起因かアプリ起因かの判定と、その理由
3. オペレーターが行う一次対応の提言
調べる範囲は上の関数・ロググループ・アラームと、直近 1 時間に限ってください。変更操作は提案しても実行しないでください。
エージェントはメンションのスレッドに返信し、調査を作成したことと、これから調べる手順を示しました。
- 優先度はHIGH
- 調べる手順は、アラームの定義、Lambdaのメトリクス(Errors・Throttles・Duration・ConcurrentExecutions)、ロググループのクエリ、インフラ起因かアプリ起因かの判定、一次対応の提言の5つ
- 「変更操作は提案のみで実行しません」と明記

3. 「Investigation started」のスレッドで途中経過を追う
依頼と同時に、エージェントはチャンネルに「Investigation started」という投稿を新しく作りました。
途中経過は、この投稿のスレッドに届きます。

スレッドに届いた順に並べると、次のとおりです。
| 時刻 | 種類 | 内容 |
|---|---|---|
| 13:00 | Investigation started | 調査の開始。Webアプリで調査を開くリンクつき |
| 13:03〜13:04 | Observation | メトリクスの出所はメトリクスフィルター。Lambdaは Errors=0・Throttles=0、実行時間は最大3010ms(タイムアウトは15000ms)。実行回数とCRITICALの数がどちらも3で一致 |
| 13:04〜13:05 | Finding | アプリ起因(DB接続の失敗をアプリが捕まえてCRITICALを出している)。環境変数 DB_ENDPOINT が到達できないアドレスを指している |
| 13:05 | Symptom | アラームがALARMに変わった時刻としきい値 |
| 13:05 | Observation | CRITICALのログ3件の原文 |
| 13:10 | Root cause investigation complete | 根本原因のまとめ |
| 13:10 | Mitigation plan | 緩和策(手順とコマンド) |
| 13:10 | Long-term solution | 恒久対策の変更要件 |
観測(Observation)を積み上げて、発見(Finding)、根本原因へと進む順で届くので、スレッドを上から読めば判断の筋道を追えます。
4. 根本原因と判定を確かめる
今回の調査は依頼から約10分で完了しました。
スレッドとWebアプリの概要には、次のようにまとまっていました。
- 根本原因: 環境変数
DB_ENDPOINTが到達できないアドレス(192.0.2.10)を指していて、接続が毎回約3秒でタイムアウトしている - 判定: アプリ起因。Lambdaは
Errors=0・Throttles=0で、実行時間もタイムアウトに遠く、インフラ起因は否定

Slackの投稿は長いと途中で切れるので、根拠を確かめるときは「View investigation」からWebアプリを開きます。
調査タイムラインでは、別々のサブエージェントがログとメトリクスを並行して調べ、最後に別のサブエージェントが緩和策を作っていました。

5. 緩和策を人の変更手続きに渡す
緩和策は、準備・事前検証・適用・事後検証・ロールバックの順に、AWS CLIのコマンドつきで届きました。
冒頭には「提案のみで、いずれの変更操作も未実行」と書かれていました。

適用のコマンドには、正しい接続先を入れる欄が残っていました。正しい値は調査では特定できず、オペレーターが入れる前提になっているのだと思われます。
aws lambda update-function-configuration \
--function-name Test-Lambda-MemberSyncJob \
--region ap-northeast-1 \
--environment "Variables={DB_ENDPOINT=<到達可能な正しいDBエンドポイント>,DB_PORT=3306,JOB_NAME=member-sync}"
環境変数を部分的に指定すると、指定しなかった変数が消えるという注意も添えられていました。
人はこの手順を、自分の変更手続き(承認・コードでの変更)に組み込めば済みますね。

気をつけたこと
依頼文に範囲と「変更は実行しない」を書いた
範囲を書いたので、エージェントが読んだのは指定したアラーム・ロググループ・関数だけでした。
「変更操作は提案しても実行しない」と書くと、緩和策は手順とコマンドの形で届き、実行はされませんでした。
※ ロールでガードレール敷くことも忘れないようにしましょう。
根拠は Web アプリで確かめた
Slackの投稿は、長いものが「もっと表示する」や「…」で切れていました。
なので詳細を調べるために、Webアプリで確かめ、クエリと値、サブエージェントごとに調べた内容など見てみましょう。
料金
DevOps Agentは、エージェントが作業した時間に対して1秒単位で課金されます[1]。
| 作業 | 単価 | 時間 | 概算 |
|---|---|---|---|
| 調査(1回) | $0.0083/agent-second | 603秒 | 約$5.00 |
時間は get-account-usage で取った月間の利用時間の差から出しました。
調査で使ったCloudWatch Logs Insightsのクエリなどには、各サービスの料金が別にかかります。
まとめ
Slackでエージェントにメンションして調査を頼むと、調査の作成、途中経過、根本原因と緩和策までがSlackに届きました。
オペレーターは、この結果や届いた手順を確かめて、自分の変更手続きに組み込むことで効率的に運用できますね。
参考
- AWS DevOps Agent ユーザーガイド
- Connecting Slack
- AWS DevOps Agent 料金
- 【アップデート】AWS DevOps Agent の Slack連携に双方向コミュニケーション機能が追加されました
- Slack通知のボタンから、Lambda経由でAWS DevOps Agentの調査を起動してみた
https://aws.amazon.com/devops-agent/pricing/ (2026-10-25 確認) ↩︎







