AWS DevOps AgentをSlackのメンションで起動し、読み取り調査させてみた

AWS DevOps AgentをSlackのメンションで起動し、読み取り調査させてみた

CloudWatchアラームが鳴ったときの一次調査を、SlackでAWS DevOps Agentにメンションして頼んでみました。依頼から調査の作成、途中経過、根本原因と緩和策が届くまでの流れをまとめます。
2026.10.25

こんにちは、カスタマーサクセス部のやまとです。

はじめに

アラームが鳴ったときの一次調査を、AWS DevOps Agentに任せたいと考えています。
そこで、Slackでエージェントにメンションして調査を頼み、結果を受け取るまでを試してみました。
今回は、エージェントには読み取りと提案だけをさせる形にして、調査を始めるかどうかは人が決める仕組みにしています。

対応の流れ

t104-architecture-diagram

  1. Lambdaのエラーで、CloudWatchのアラームがALARMになる
  2. オペレーターが、Slackでエージェントにメンションして調査を依頼する
  3. エージェントが調査を作成し、読み取りの権限でアラーム・ログ・メトリクス・Lambdaの設定を調べる
  4. 途中経過と結果(根本原因・判定・緩和策)が、「Investigation started」のスレッドに届く
  5. オペレーターが緩和策を確かめ、変更は人の手続き(承認・コードでの変更)で行う

調査の起動は、人のメンションだけにしています。
アラームから自動で起動すると、同じアラームが続けて鳴ったときに調査が重なり、そのぶん費用がかかるためです。

前提

検証環境:東京リージョン(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つ
  • 「変更操作は提案のみで実行しません」と明記

slack-mention-and-accepted

3. 「Investigation started」のスレッドで途中経過を追う

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

slack-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 で、実行時間もタイムアウトに遠く、インフラ起因は否定

devops-agent-webapp-investigation-summary

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

devops-agent-webapp-investigation-timeline

5. 緩和策を人の変更手続きに渡す

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

slack-mitigation-plan

適用のコマンドには、正しい接続先を入れる欄が残っていました。正しい値は調査では特定できず、オペレーターが入れる前提になっているのだと思われます。

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}"

環境変数を部分的に指定すると、指定しなかった変数が消えるという注意も添えられていました。
人はこの手順を、自分の変更手続き(承認・コードでの変更)に組み込めば済みますね。

devops-agent-webapp-mitigation-plan

気をつけたこと

依頼文に範囲と「変更は実行しない」を書いた

範囲を書いたので、エージェントが読んだのは指定したアラーム・ロググループ・関数だけでした。
「変更操作は提案しても実行しない」と書くと、緩和策は手順とコマンドの形で届き、実行はされませんでした。
※ ロールでガードレール敷くことも忘れないようにしましょう。

根拠は Web アプリで確かめた

Slackの投稿は、長いものが「もっと表示する」や「…」で切れていました。
なので詳細を調べるために、Webアプリで確かめ、クエリと値、サブエージェントごとに調べた内容など見てみましょう。

料金

DevOps Agentは、エージェントが作業した時間に対して1秒単位で課金されます[1]。

作業 単価 時間 概算
調査(1回) $0.0083/agent-second 603秒 約$5.00

時間は get-account-usage で取った月間の利用時間の差から出しました。
調査で使ったCloudWatch Logs Insightsのクエリなどには、各サービスの料金が別にかかります。

まとめ

Slackでエージェントにメンションして調査を頼むと、調査の作成、途中経過、根本原因と緩和策までがSlackに届きました。
オペレーターは、この結果や届いた手順を確かめて、自分の変更手続きに組み込むことで効率的に運用できますね。

参考

脚注
  1. https://aws.amazon.com/devops-agent/pricing/ (2026-10-25 確認) ↩︎

この記事をシェアする

関連記事