LambdaとEventBridgeを使ってDevOps AgentにSREレポートを定期生成させてみた

LambdaとEventBridgeを使ってDevOps AgentにSREレポートを定期生成させてみた

DevOps Agentのアーティファクト機能を使ってSREレポートの自動生成を試してみました。LambdaとEventBridge Schedulerを使えば定期的なレポート生成は可能ですが、オペーレーターアプリのUI上での表示制限という課題もありました。
2026.05.25

リテールアプリ共創部@大阪の岩田です。

DevOps Agentに週次や月次でSREレポートのようなものを自動生成させて、チーム内で共有すると便利そうだと思って検証してみました。現状だと実務利用にはちょっと課題があるかなという結果だったのですが、うまくいかなかった部分含めて検証した内容をご紹介します。

DevOps Agentのアーティファクト

DevOps Agentには「アーティファクト」を作成する機能があり、チャットから依頼すればグラフィカルなレポート等を生成してくれます。公式ドキュメントではアーティファクトについて以下のように解説しています。

Chat artifacts – Generate structured reports and documents, such as operational health summaries, error reports, and incident analyses. Artifacts appear in a dedicated panel and support versioned editing within the conversation.

https://docs.aws.amazon.com/devopsagent/latest/userguide/working-with-devops-agent-on-demand-devops-tasks.html

実際にチャットからアーティファクトの生成を試してみたところ、「2026/4/19 ~ 2026/4/25とその前週を比較してシステムの健全性をレポートにまとめて」と雑に依頼しただけでレポートを作成してくれました。

dop-agent-chat.jpg

作成されたアーティファクトは先程のチャット内で確認できるのに加えてオペレーターアプリの「アーティファクト」に一覧表示されます。

dop-agent-artifacts.jpg

一覧に表示されているアーティファクトをクリックすると詳細が開きます。

dop-agent-report.jpg

雑に指示しただけでもそれなりに情報がまとまっています。ちゃんとスキルを作り込んでどんな情報が欲しいか指示すれば良い感じのレポートが自動生成できそうですよね?

あとはLambdaとEventBridge Schedulerを使って週次や月次でAIにレポート作成を依頼し、人間はオペレーターアプリからレポートを確認するように運用設計すればシステムの稼働状況を把握しやすくなりそうです。

LambdaからSREレポートの自動生成を依頼してみる

今度はオペーレーターアプリのチャット機能ではなく、Lambdaからレポート生成を依頼してみましょう。Lambdaのコードは以下の通りです。

sre-report/app.py
from pprint import pprint
import boto3
from datetime import datetime, timedelta
import os
from zoneinfo import ZoneInfo

client = boto3.client('devops-agent')
agent_space_id = os.environ['AGENT_SPACE_ID']

def get_last_week_range() -> str:
    JST = ZoneInfo("Asia/Tokyo")
    today = datetime.now(JST)

    days_since_sunday = (today.weekday() + 1) % 7
    this_sunday = today - timedelta(days=days_since_sunday)
    last_sunday   = this_sunday - timedelta(weeks=1)
    last_saturday = last_sunday + timedelta(days=6)

    fmt = lambda d: f"{d.year}/{d.month}/{d.day}"
    return f"{fmt(last_sunday)} ~ {fmt(last_saturday)}"

def lambda_handler(event, context):
    last_week_range = get_last_week_range()

    create_chat_res = client.create_chat(
            agentSpaceId=agent_space_id,
            userType='IAM'
        )
    pprint(create_chat_res)
    send_msg_res = client.send_message(
        agentSpaceId=agent_space_id,
        executionId=create_chat_res['executionId'],
        content=f'{last_week_range}とその前週を比較してシステムの健全性をレポートにまとめて',
        )
    pprint(send_msg_res)

CreateChat APIでチャットを開始すると、レスポンスでexecutionIdという項目が返却されるので、このIDを指定してSendMessageでメッセージを送信します。

このLambdaを以下のSAMテンプレートでデプロイします。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
  AgentSpaceId:
    Type: String
    Description: DevOps AgentのスペースID
Globals:
  Function:
    Timeout: 10
    Environment:
      Variables:
        AGENT_SPACE_ID: !Ref AgentSpaceId
Resources:
  SreReportFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: sre-report/
      Handler: app.lambda_handler
      Runtime: python3.14
      Architectures:
        - x86_64
      Events:
        CloudWatchEvent:
          Type: Schedule
          Properties:
            Schedule: cron(0 0 ? * MON *)
      Policies:
        - Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - aidevops:CreateChat
                - aidevops:SendMessage
              Resource: "*"

デプロイできたらLambdaをテスト実行してみましょう。

Lambdaのテスト実行成功

無事にテスト実行が完了しました!あとはこのLambdaがEventBridge Schedulerで定期実行され、週次でSREレポートが自動生成されるはず...

Lambdaから生成したアーティファクトがオペレーターアプリ上で確認できない??

Lambdaのテスト実行がうまくいったので、オペーレーターアプリからアーティファクトを確認してみました。すると...

オペーレーターアプリ上のアーティファクトが増えていない...

あれ?アーティファクトが増えていません。先程のLambdaは正常終了したのですがDevOps Agentがアーティファクト生成までたどり着かなかったのでしょうか?

先ほどのLambda実行ロールにaidevops:ListJournalRecordsの権限を付与した上で以下のLambdaを実行してみました。

import boto3
import os
import json

client = boto3.client('devops-agent')
agent_space_id = os.environ['AGENT_SPACE_ID']

def lambda_handler(event, context):
    res = client.list_journal_records(
        agentSpaceId=agent_space_id,
        executionId='<先ほどLambdaのログに出力されたExecutionId>',
        order='DESC'
    )
    contens = [i['content'] for i in res['records']]
    for c in contens:
        print(json.loads(c))

出力されたログは以下の通りでした。システム健全性レポートを作成しました!と出力されており、ちゃんとDevOps Agentはアーティファクトを生成してくれているように見えます。

Lambda実行ロールからListJournalRecordsした結果

別ユーザーが作成したアーティファクトはオペーレーターアプリ上に表示されない

色々とイジくり回していて気づいたのですが、オペーレーターアプリのUI上で別ユーザーが作成したアーティファクトは表示されないように制御されているようです。開発者ツールで確認するとアーティファクト一覧を取得するAPIのレスポンスには先ほどLambdaから作成したアーティファクトが含まれているものの、オペーレーターアプリのUIには現在オペーレーターアプリを操作しているユーザーが作成したアーティファクトしか表示されていません。確かにUIの表示も「あなたのアーティファクト」と記載されており、これは「他のユーザーが作成したアーティファクトは見えませんよ」と言っていると解釈できますね。

開発者ツールから確認したアーティファクト一覧取得のレスポンス

とはいえAPIのレスポンスには他ユーザーのアーティファクトのIDも含まれているので、ブラウザのURLにアーティファクトのIDを直接入力し、https://<エージェントスペースID>.aidevops.global.app.aws/artifacts/<アーティファクトのID>にアクセスすると...

URLを直接入力するとSREレポートが確認できた

先ほどLambdaから生成したSREレポートがオペーレーターアプリのUIから確認できました!!開発者ツールを確認しながら一手間かませる必要はありますが、一応週次や月次で半自動生成させたレポートをオペーレーターアプリから確認することは可能でした。

この手間を避けるために、アーティファクトの生成が完了したことを検知してLambdaからアーティファクトの内容を取得してSlack通知のようなアーキテクチャも考えたのですが、以下の理由から断念しました。

  • DevOps AgentがEventBridgeに発行するイベントにはアーティファクトの作成完了のようなイベントが存在しない
  • 各種のグラフなど、グラフィカルな表示がアーティファクトの強みであり、レポートの文章だけをSlackに通知するとアーティファクトの良さが薄れる
    • かといってアーティファクトに含まれるJSONデータを元に自分で画像を生成してSlackに添付するのは手間がかかりすぎる

(余談)チャットはエージェントスペース内のユーザーアカウントごとに分離される

これは余談になりますが、「チャット」についてはエージェントスペース内で共有されるリソースではなくユーザーごとに分離したリソースです。確かにユーザーAのチャット履歴がユーザーBから閲覧できるのはまずそうですよね。ドキュメントを確認してみると、ドキュメントにも以下の記述がありました。

Conversation history is retained for 90 days and is private to your user account within the Agent Space.

https://docs.aws.amazon.com/devopsagent/latest/userguide/working-with-devops-agent-on-demand-devops-tasks.html

private to your user account within the Agent Space.とのことです。

DevOps AgentのAPI仕様を見ながらチャットに関する仕様を確認してみましょう。チャットを開始する流れは、以下のようになります。

  • CreateChatを実行してチャットを開始
    • レスポンスからexecutionId を取得
  • 取得したexecutionIdを指定してSendMessageで実際のチャットメッセージを送信

この処理の流れから考えると最初のCreateChatで生成されたexecutionIdがエージェントスペース内のユーザーと紐づいていそうです。CreateChatのAPI仕様について詳細を確認すると、クエリパラメータにuserTypeというEnum値が存在することが分かります。

userType

The authentication type of the user

Valid Values: IAM | IDC | IDP

妥当な値はIAMIDCIDPの3種となっており、これらの値はエージェントスペースにアクセスする際の認証方法に対応していると考えられます。

dop-agent-operator-access.jpg

このことからもCreateChat APIがAPI呼び出し元のプリンシパルを識別して利用していることが読み取れます。さらに、userIdというパラメータについて以下の記載がありました。

  • userId

    The user identifier for the chat. This field is deprecated and will be ignored — the service resolves user identity from the authenticated session.

廃止されたパラメータということですが、注意書きに記載されているthe service resolves user identity from the authenticated session.がポイントです。API呼び出し時に付与されているSigV4の署名からAPI 呼び出し元のプリンシパルを識別して「チャット」というリソースに紐づけているということだと理解しました。

一方で「アーティファクト」については先程開発者ツールから確認できたようにユーザーアカウントを横断して共有されるリソースのようです。APIのパラメーターから推測すると思想的には「アーティファクト」というリソースはknowledgeItemTypeがARTIFACTである「ナレッジアイテム」であると考えられます。スキル等も「ナレッジアイテム」になるので、ユーザーアカウントごとに分離されないのは自然なように思います。

一方でユーザーアカウントごとに分離されたリソースである「チャット」からオペーレーターアプリ上の全ユーザー共有のリソースである「アーティファクト」が生成されるという仕様には注意が必要だと感じました。無いとは思いますが、「アーティファクト」に個人情報を埋め込むようなことがあると、同一オペーレーターアプリ上の別ユーザーアカウントからも参照できてしまうので...

まとめ

オペーレーターアプリ上の標準的な操作では別ユーザーアカウントの作成したアーティファクトが表示されないという課題はあるものの、レポート作成の自動化は実現可能なことが確認できました。

開発者ツールからIDを確認してURL直打ちという手間が許容できるなら今回紹介したような処理を組んでみるのも良いのでは無いでしょうか。

参考

この記事をシェアする

関連記事