【AWS re:Invent 2025】新サービス「AWS DevOps Agent」を検証してみた

technologies

目次

  1. はじめに
  2. AWS DevOps Agentとは
  3. AWS DevOps Agentを設定してみる
  4. テストシナリオをハンズオンしてみる(1)
  5. テストシナリオをハンズオンしてみる(2)
  6. おわりに

1. はじめに

こんにちは!ベンジャミンの松延(まつのぶ)です!
AWS re:Invent 2025に現地参加しKeynoteに参加しました。AWS re:Invent期間中に様々な新サービスや新機能が発表されましたので、最新情報をシェアできればと考えております。


2. AWS DevOps Agentとは

AWS re:Invent 2025のKeynote(Opening Keynote with Matt Garman: KEY001)にて、新サービスである「AWS DevOps Agent」が発表されました。
AWS DevOps Agentは、インシデント対応を加速しシステム信頼性を高めるために設計された「Frontier Agent(フロンティアエージェント)」と呼ばれる自律型AIエージェントです。

AWS公式ドキュメント

1. 主な機能

AWS DevOps Agentの主な機能は下記になります。

  • インシデント発生時の対応支援
    • メトリクス、ログ、トレース、最近のコードデプロイ情報など、運用ツールチェーンに跨るデータを自動分析
    • 根本原因の候補を提示し、復旧のための具体的な緩和策も提案
    • チケット管理システム(例:ServiceNow)、外部監視ツール、チャットツール(例:Slack)との連携が可能で、ステークホルダーへの通知や調査経過の記録も行う
  • 運用改善・将来の障害予防
    • 過去のインシデントや運用パターンを分析し、「どこに観測性が足りないか/どういう構成がリスクか」などを可視化し、改善案(runbook)を出してくれる

2. DevOps Agent Spaceについて

DevOps Agent Space(エージェントスペース)とは、AWS DevOps Agentがアクセスできるツール・AWSアカウント・インフラ・ユーザ権限をまとめた独立した論理コンテナを指すようです。

各Agent Spaceは完全に独立して動作し、使用できるAWSアカウント、接続する外部ツール(GitHub、Datadogなど)、アクセスできるユーザがスペースごとに分離されています。
そのため、環境・チーム・サービス単位でDevOps Agentの権限とデータを隔離することができます。

  1. AWS アカウントの分離
    • スペースごとに専用IAMロールを使用し、そのスペースに許可されたAWSアカウントやリソースにのみアクセス可能
  2. 外部ツール統合の分離
    • CI/CD、観測ツール、チャットツールなどへの接続はスペース単位で独立
    • 例外としてGitHub Appなど一部の認証情報はアカウントレベル共有
  3. ユーザアクセスの分離
    • どのユーザがどのスペースを操作できるかを細かく制御できる
    • 組織構造に合わせたアクセス制御が実現できる
  4. データの分離
    • インシデント履歴、調査内容、推奨事項などの情報はスペースごとに独立

AWS公式ドキュメント

3. DevOps Agent Space Web Appについて

各スペースには専用のWebアプリがあり、運用チームはコンソールにログインしなくてもインシデント対応が可能になっています。

用途説明
チーム分離チーム・部門ごとにスペースを分け、責務を明確化
環境分離本番・検証・開発環境を分けて誤操作を防止
サービス単位管理マイクロサービスごとにスペースを作成
コンプライアンス要件アクセス制御やデータ保持ポリシーを分離して適用したい場合

AWS公式ドキュメント

4. DevOps Agent runbookについて

AWS DevOps Agentがインシデント対応や予防評価を行う際に参照するガイドライン・ヒント集です。

特に、組織固有の環境構成や運用ルールを事前にrunbookとして登録しておくことで、エージェントがより正確で高速な調査・分析を行えるようになります。

AWS公式ドキュメント

5. Topologyについて

AWS DevOps AgentにおけるTopology(トポロジー)は、アプリケーションを構成するAWSリソースや、その間の関係性を自動的に可視化したものです。

AWS DevOps Agentがアプリケーション内部のリソースを自動検出し、それらがどのように接続され、依存しあっているかをグラフとして表現します。このトポロジーは、インシデント調査や原因分析、再発防止のための推奨事項を生成する際の重要になります。

AWS公式ドキュメント

6. Capabilitiesについて

AWS DevOps Agentは単体でもインシデント調査を自動化できますが、既存のDevOpsエコシステム(CI/CD、EKS、監視基盤、チケット管理、Slackなど)と接続することで、さらに強力なインシデント調査・自動化を実現することが可能になっています。

6-1. Cloud

複数の AWS アカウントにまたがるリソースを調査できるようにするための設定です。

企業や組織では、「本番」「開発」「検証」や「複数ビジネスユニット」など、AWSアカウントが分かれていることが一般的です。
アプリケーションが複数アカウントにまたがって構築されている場合、インシデント調査でも横断的なリソース可視化が不可欠です。
AWS DevOps Agentにセカンダリアカウントを追加することで、複数アカウント間のリソース依存関係を一元的に調査・分析できるようになります。

AWS公式ドキュメント

6-2. Telemetry

インシデント調査を高度化するために、外部の監視・観測(Telemetry)システムと連携できる機能を提供しています。

① Built-in, 2-way integration(双方向組み込み連携:Dynatrace)

Dynatraceで実現できることは下記となります。

  • Dynatrace MCP serverのデータを直接取り込み、トポロジーを拡張
  • Dynatrace側からAWS DevOps Agentの調査を開始できる
  • DevOps AgentがDynatraceのメトリクス/ログなどを直接参照して分析
  • DevOps Agentの調査結果・根本原因・推奨対策がDynatrace UIに反映される
② Built-in, 1-way integration(片方向組み込み連携:CloudWatch, Datadog, New Relic, Splunk)

CloudWatchで実現できることは下記になります。

  • 追加設定なしで即利用可能
  • トポロジー拡張&Telemetry introspectionが可能
    • AWSアカウントに設定したIAM ロール経由で操作

Datadog, New Relic, Splunkで実現できることは下記になります。

  • 監視ツール側のイベント → DevOps Agentの調査を開始(Webhooks)
  • DevOps Agent が各監視ツールのMCP serverへ接続しメトリクス確認

AWS公式ドキュメント

6-3. Pipeline

DevOps AgentをGitHubやGitLabなどのCI/CDパイプラインと連携させることが可能になっています。

CI/CDと接続することで、DevOps Agentは以下を自動的に行えるようになります。
「どのデプロイが原因で障害が起きたのか」 を機械的に突き止めることができるようになると考えています。

  • デプロイイベントの監視
  • コード変更とインシデントの関連付け
  • デプロイが原因の問題を素早く特定

AWS公式ドキュメント

6-4. Communications

DevOps AgentをServiceNowやPagerDutyなどのチケット管理システム、Slackなどのチャットツールと連携させることが可能になっています。

インシデント対応ワークフローに DevOps Agent を組み込み、MTTR(平均復旧時間)を短縮することが目的になっています。
チケットやアラートが発生したタイミングで DevOps Agentが自動で調査を開始し、Slackなどに状況を通知したり要約を送ってくれるようになります。

AWS公式ドキュメント

6-5. MCP Server

DevOps AgentはMCP(Model Context Protocol)サーバーを利用することが可能です。
MCPを使用することで、DevOps Agentの分析能力を強化することが可能になっています。

  • 外部システムのデータを調査時に利用
  • カスタムメトリクス・ログ・状態データを参照
  • 提供されたMCPツールを通じて、高度な分析が可能

AWS公式ドキュメント

6-6. Webhook

Webhookを利用すると、外部システム(監視ツール・チケットシステム・アラート基盤など)がHTTP リクエストを送信するだけで AWS DevOps Agentのインシデント調査を自動で開始することが可能になっています。前提条件は下記となっています。

  • DevOps AgentでAgent Spaceが作成済みであること
  • AWS DevOps Agentコンソールへアクセス可能であること
  • Webhookリクエストを送信する外部システムが準備できていること

AWS公式ドキュメント

7. パブリックプレビュー期間中の利用料金について

AWS DevOps Agentはバージニア北部リージョン(us-east-1)でパブリックプレビュー版として提供されています。パブリックプレビュー期間中は無料利用可能となっています。

ただし、他のAWSサービスやAWS以外のサービスへのクエリやAPI呼び出しに対して利用料金が発生する場合があります。例えば、インシデント解決調査中にAWS DevOps Agentがメトリクスやログクエリを実行する場合などです。

AWS公式ドキュメント

8. 利用制限について

パブリックプレビュー期間中の制限は下記となっています。

  • エージェントスペース: 10
  • DevOps Agentのインシデント解決時間:20時間
  • DevOps Agent のインシデント予防時間:10時間
  • チャットメッセージ数:1,000件/月

同時実行可能なインシデント解決調査タスクの数は3件、同時実行可能なインシデント予防評価タスクの数は1件です。

AWS公式ドキュメント


3. AWS DevOps Agentを設定してみる

キーノートが終了した後にAWS DevOps Agentについて簡単にハンズオンしてみましたので、内容シェアさせていただきます。

3-1. DevOps Agentの設定

1. AWSマネジメントコンソールにアクセスし、リージョンをバージニア北部を選択

AWS DevOps Agentは発表時点ではバージニア北部(us-east-1)のみ提供されていますので、必ずリージョンをバージニア北部に指定してください。

2. AWSマネジメントコンソールから「DevOps」と入力し、検索結果から「AWS DevOps Agent」を選択

3. AWS DevOps Agentコンソールが表示される

4. 「Begin setup」を選択

5. Agent Space作成画面に遷移する

Agent Spaceの作成画面では下記を設定する必要があります。

設定項目説明
Agent Space NameAgent Space名を設定する
DescriptionAgent Spaceの説明を設定する
Give this Agent Space AWS resource accessこのDevOps Agent用のIAMロールを指定する
(1)DevOps Agent用のIAMロールを新規作成する
(2)既存のDevOps Agent用のIAMロールを指定する
(3)IAMポリシーテンプレートを指定する
Include AWS tagsタグを指定
Enable web appWebアプリがAgent SpaceにアクセスするためのIAMロールを指定する
(1)Webアプリが使用するAgent Space用IAMロールを新規作成する
(2)Webアプリが使用する既存のAgent Space用IAMロールを指定する
(3)IAMポリシーテンプレートを指定する

6. Agent Spaceの各種を設定し、「Create」を選択

検証目的のため、下記設定値としました。

設定項目説明
Agent Space Nametest-matsunobu-agent-space
Descriptionhands-on
Give this Agent Space AWS resource accessAuto-create a new DevOps Agent role
Include AWS tags
Enable web appAuto-create a new DevOps Agent role

7. Agent Spaceの作成が完了すると、Agent Spaceの詳細画面が表示される

Topology画面は下記になります。AWSアカウント内に構築されているリソースが検出されています。「Topology sources」には、AWSアカウント内に構築されているAWSリソース数が上位表示されています。画像の例だと、「AWS::AppSync::FunctionConfiguration」がリソース数が一番多いことがわかります。

「Topology graph」には、各AWSリソース間の依存関係をグラフ表示しています。画像の例だと、Containerカテゴリにて各AWSリソース間の依存関係をグラフ表示しています。

グラフ化できるカテゴリは、System/Container/Components/All Resourcesから選択可能となっています。

AWS公式ドキュメント

Capabilities画面は下記になります。

Web app画面は下記になります。

「Operator access」を選択すると専用Webアプリが表示されます。

3-2. 補足:自動作成されるAgent Space用IAMロールについて

Agent Space用に自動作成されるIAMロールについても確認してみました。

3-2-1. DevOpsAgentRole-AgentSpace

DevOps Agent用のIAMロールです。

AIOpsAssistantPolicy

AWSマネージドポリシーである「AIOpsAssistantPolicy」が付与されていました。

AIDevOpsAllowAwsSupportActionsPolicy

こちらはカスタマーマネージドポリシーが付与されており、下記のようなポリシーとなっています。
DevOps Agentがsupport/aidevops/eks/synthetics/route53/resource-explorer-2/codedeployへアクセスするためのポリシーが記載されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAwsSupportActions",
            "Effect": "Allow",
            "Action": [
                "support:CreateCase",
                "support:DescribeCases"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowExpandedAIOpsAssistantPolicy",
            "Effect": "Allow",
            "Action": [
                "aidevops:GetKnowledgeItem",
                "aidevops:ListKnowledgeItems",
                "eks:AccessKubernetesApi",
                "synthetics:GetCanaryRuns",
                "route53:GetHealthCheckStatus",
                "resource-explorer-2:Search",
                "codedeploy:GetDeploymentTarget"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
信頼ポリシー

信頼ポリシーについては下記のようになっています。プリンシパルに新たに「aidevops.amazonaws.com」が追加されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "aidevops.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:aidevops:us-east-1:123456789012:agentspace/*"
                }
            }
        }
    ]
}

3-2-2. DevOpsAgentRole-WebappAdmin

Webアプリがアクセスするために必要なIAMロールです。

AIDevOpsBasicOperatorActionsPolicy

こちらはカスタマーマネージドポリシーが付与されており、下記のようなポリシーとなっています。
Webアプリがaidevopsやsupportへアクセスするためのポリシーが記載されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowBasicOperatorActions",
            "Effect": "Allow",
            "Action": [
                "aidevops:GetAgentSpace",
                "aidevops:GetAssociation",
                "aidevops:ListAssociations",
                "aidevops:CreateBacklogTask",
                "aidevops:GetBacklogTask",
                "aidevops:UpdateBacklogTask",
                "aidevops:ListBacklogTasks",
                "aidevops:ListJournalRecords",
                "aidevops:DiscoverTopology",
                "aidevops:InvokeAgent",
                "aidevops:ListGoals",
                "aidevops:ListRecommendations",
                "aidevops:ListExecutions",
                "aidevops:GetRecommendation",
                "aidevops:UpdateRecommendation",
                "aidevops:CreateKnowledgeItem",
                "aidevops:ListKnowledgeItems",
                "aidevops:GetKnowledgeItem",
                "aidevops:UpdateKnowledgeItem",
                "aidevops:DeleteKnowledgeItem",
                "aidevops:ListPendingMessages",
                "aidevops:InitiateChatForCase",
                "aidevops:EndChatForCase",
                "aidevops:DescribeSupportLevel",
                "aidevops:GetAccountUsage",
                "aidevops:SendChatMessage"
            ],
            "Resource": "arn:aws:aidevops:us-east-1:123456789012:agentspace/*"
        },
        {
            "Sid": "AllowSupportOperatorActions",
            "Effect": "Allow",
            "Action": [
                "support:DescribeCases",
                "support:InitiateChatForCase",
                "support:DescribeSupportLevel"
            ],
            "Resource": "*"
        }
    ]
}
信頼ポリシー

信頼ポリシーについては下記のようになっています。プリンシパルに新たに「aidevops.amazonaws.com」が追加されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "aidevops.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:aidevops:us-east-1:123456789012:agentspace/*"
                }
            }
        }
    ]
}

4. テストシナリオをハンズオンしてみる(1)

AWS公式ドキュメントにてテストシナリオが提供されています。Lambda関数のテストシナリオについて、ハンズオンしてみました。

1. 下記CloudFormation(Cfn)テンプレートを「AWS-AIDevOps-lambda-test.yaml」というファイル名で保存します。

AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS AIDevOps Lambda Error Test Stack'

Resources:
  # IAM Role for Lambda function
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWS-AIDevOpsLambdaTestRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Lambda-Test-Role
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # Lambda function that generates errors
  TestLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: AWS-AIDevOps-test-lambda
      Runtime: python3.12
      Handler: index.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        ZipFile: |
          import json
          import random
          import time
          from datetime import datetime

          def lambda_handler(event, context):
              print(f"AWS AIDevOps Test Lambda - {datetime.now()}")
              print(f"Event: {json.dumps(event)}")
              
              # Intentionally generate errors for testing
              error_scenarios = [
                  "Simulated database connection timeout",
                  "Test API rate limit exceeded", 
                  "Intentional validation error for AWS AIDevOps testing"
              ]
              
              # Always throw an error for testing purposes
              error_message = random.choice(error_scenarios)
              print(f"Generating test error: {error_message}")
              
              # This will create a Lambda error that CloudWatch will detect
              raise Exception(f"AWS AIDevOps Test Error: {error_message}")
      Description: AWS AIDevOps beta test function - intentionally generates errors
      Timeout: 30
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-Lambda
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # CloudWatch Alarm for Lambda errors
  LambdaErrorAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: AWS-AIDevOps-Lambda-Error-Test
      AlarmDescription: AWS-AIDevOps beta test - Lambda error rate alarm
      MetricName: Errors
      Namespace: AWS/Lambda
      Statistic: Sum
      Period: 60
      EvaluationPeriods: 1
      Threshold: 0
      ComparisonOperator: GreaterThanThreshold
      Dimensions:
        - Name: FunctionName
          Value: !Ref TestLambdaFunction
      TreatMissingData: notBreaching

Outputs:
  LambdaFunctionName:
    Description: Lambda Function Name for testing
    Value: !Ref TestLambdaFunction
    
  LambdaFunctionArn:
    Description: Lambda Function ARN
    Value: !GetAtt TestLambdaFunction.Arn
    
  AlarmName:
    Description: CloudWatch Alarm Name
    Value: !Ref LambdaErrorAlarm
    
  TestCommand:
    Description: AWS CLI command to test the function
    Value: !Sub 'aws lambda invoke --function-name ${TestLambdaFunction} --payload "{\"test\":\"AWS AIDevOps validation\"}" response.json'

2. Cfnコンソールで、テンプレートファイルのアップロードを選択

3. ファイルを選択から先ほど保存した「AWS-AIDevOps-lambda-test.yaml」を選択

4. スタック名を「AWS-AIDevOps-Lambda-Test」と入力

5. Cfnスタックをデプロイ

下記のように、Lambda関数、Lambda関数用IAMロール、CloudWatchアラームが作成されているはずです。

Lambda関数のソースコードは下記となっています。

import json
import random
import time
from datetime import datetime

def lambda_handler(event, context):
    print(f"AWS AIDevOps Test Lambda - {datetime.now()}")
    print(f"Event: {json.dumps(event)}")
    
    # Intentionally generate errors for testing
    error_scenarios = [
        "Simulated database connection timeout",
        "Test API rate limit exceeded", 
        "Intentional validation error for AWS AIDevOps testing"
    ]
    
    # Always throw an error for testing purposes
    error_message = random.choice(error_scenarios)
    print(f"Generating test error: {error_message}")
    
    # This will create a Lambda error that CloudWatch will detect
    raise Exception(f"AWS AIDevOps Test Error: {error_message}")

また、CloudWatchアラームでは、Lambda関数にてエラーが発生した際にアラート発報されるようになっています。

6. Lambda関数にて、テストイベントを作成しテスト実行

テスト用のペイロードはこちらになります。

{
  "test": "AWS AIDevOps validation",
  "timestamp": "2024-01-01T00:00:00Z"
}

ソースコードから各テストは意図的なエラーを生成しているようなので、テスト結果はエラーとなります。

7. CloudWatchアラームにて、アラート状態であることを確認

8. DevOps AgentのWebアプリ画面にアクセス

9. 「Start an investigation」にて調査内容を記載し、「Start Investigation」を選択

英語で入力する必要があります。

I'm getting a Lambda error. Check the CloudWatch alarm for errors and investigate the cause.

10. DevOps Agentがエラー内容を調査し根本原因を特定する

(*)画面はブラウザの日本語訳で表示しています。

調査タイムライン上にトポロジーや調査状況が表示されるようになります。

DevOps AgentがCloudWatchアラーム内容を取得しています。

DevOps Agentがエラーが発生したLambda関数を特定しています。

DevOps AgentがLambda関数のErrorsメトリクスを調査しています。

DevOps AgentがLambda関数の実行時間についても確認しています。今回の問題はタイムアウトではないと分析しており、精度も概ね良いと思います。

DevOps AgentがLambda関数のスロットリングについても確認していますが、問題の原因ではないと分析しています。

数分待つと、DevOps AgentがLambda関数内の処理にて例外が発生していることを特定しました。

DevOps Agentが、Lambda関数で意図的にエラーを発生させていることを問題の原因と判断しています。

11. DevOps Agentが根本原因を特定

(*)画面はブラウザの日本語訳で表示しています。

12. 「緩和計画を作成する」(Generate mitigation plan)を選択

(*)画面はブラウザの日本語訳で表示しています。

テストシナリオで意図的なエラーを発生させているため、特に緩和措置は特定されませんでした。


5. テストシナリオをハンズオンしてみる(2)

AWS公式ドキュメントで提供されているLambda関数用のテストシナリオの場合、緩和措置が特定されませんでした。緩和措置が特定されるようテストシナリオを考えてみました。

シンプルなのですが、Lambda関数からDynamoDBにレコードを登録する処理において、Lambda関数内からDynamoDBレコードを登録する権限はあるが、処理に失敗するようなシナリオにしてみます。

1. 下記CloudFormation(Cfn)テンプレートを「AWS-AIDevOps-lambda-test-2.yaml」というファイル名で保存します。

AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS AIDevOps Lambda Error Test Stack'

Resources:
  # DynamoDB Table for testing
  TestDynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: AWS-AIDevOps-Test-Table-2
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
        - AttributeName: timestamp
          AttributeType: N
      KeySchema:
        - AttributeName: id
          KeyType: HASH
        - AttributeName: timestamp
          KeyType: RANGE
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-Table
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # IAM Role for Lambda function
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWS-AIDevOpsLambdaTestRole-2
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: DynamoDBAccessPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - dynamodb:PutItem
                  - dynamodb:GetItem
                  - dynamodb:Query
                Resource: !GetAtt TestDynamoDBTable.Arn
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Lambda-Test-Role-2
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # Lambda function that generates errors
  TestLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: AWS-AIDevOps-test-lambda-2
      Runtime: python3.12
      Handler: index.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Environment:
        Variables:
          DYNAMODB_TABLE_NAME: !Ref TestDynamoDBTable
      Code:
        ZipFile: |
          import json
          import boto3
          import os
          from datetime import datetime
          from decimal import Decimal

          dynamodb = boto3.resource('dynamodb')
          table_name = os.environ['DYNAMODB_TABLE_NAME']
          table = dynamodb.Table(table_name)

          def lambda_handler(event, context):
              print(f"AWS AIDevOps Test Lambda - {datetime.now()}")
              print(f"Event: {json.dumps(event)}")
              
              try:
                  # 意図的にDynamoDBへの書き込みを失敗させる
                  # ケース1: 必須属性が不足している(timestampがない)
                  item = {
                      'id': 'test-id-123',
                      # 'timestamp' を意図的に省略してエラーを発生させる
                      'data': 'This will fail due to missing sort key'
                  }
                  
                  print(f"Attempting to write to DynamoDB table: {table_name}")
                  print(f"Item: {json.dumps(item)}")
                  
                  # この操作は失敗する(timestampがないため)
                  response = table.put_item(Item=item)
                  
                  return {
                      'statusCode': 200,
                      'body': json.dumps('Success')
                  }
                  
              except Exception as e:
                  error_message = f"DynamoDB write failed: {str(e)}"
                  print(f"ERROR: {error_message}")
                  # エラーを再スローしてLambdaを失敗させる
                  raise Exception(f"AWS AIDevOps Test Error: {error_message}")
      Description: AWS AIDevOps beta test function - intentionally generates errors
      Timeout: 30
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-Lambda
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # CloudWatch Alarm for Lambda errors
  LambdaErrorAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: AWS-AIDevOps-Lambda-Error-Test-2
      AlarmDescription: AWS-AIDevOps beta test - Lambda error rate alarm
      MetricName: Errors
      Namespace: AWS/Lambda
      Statistic: Sum
      Period: 60
      EvaluationPeriods: 1
      Threshold: 0
      ComparisonOperator: GreaterThanThreshold
      Dimensions:
        - Name: FunctionName
          Value: !Ref TestLambdaFunction
      TreatMissingData: notBreaching

Outputs:
  DynamoDBTableName:
    Description: DynamoDB Table Name
    Value: !Ref TestDynamoDBTable
    
  LambdaFunctionName:
    Description: Lambda Function Name for testing
    Value: !Ref TestLambdaFunction
    
  LambdaFunctionArn:
    Description: Lambda Function ARN
    Value: !GetAtt TestLambdaFunction.Arn
    
  AlarmName:
    Description: CloudWatch Alarm Name
    Value: !Ref LambdaErrorAlarm
    
  TestCommand:
    Description: AWS CLI command to test the function
    Value: !Sub 'aws lambda invoke --function-name ${TestLambdaFunction} --payload "{\"test\":\"AWS AIDevOps validation\"}" response.json'

2. Cfnコンソールで、テンプレートファイルのアップロードを選択

3. ファイルを選択から先ほど保存した「AWS-AIDevOps-lambda-test-2.yaml」を選択

4. スタック名を「AWS-AIDevOps-Lambda-Test-2」と入力

5. Cfnスタックをデプロイ

下記のように、Lambda関数、Lambda関数用IAMロール、CloudWatchアラーム、DynamoDBが作成されているはずです。

6. Lambda関数にて、テストイベントを作成しテスト実行

7. CloudWatchアラームにて、アラート状態であることを確認

8. DevOps AgentのWebアプリ画面にアクセス

9. 「Start an investigation」にて調査内容を記載し、「Start Investigation」を選択

英語で入力する必要があります。

I'm getting a Lambda error. Check the CloudWatch alarm for errors and investigate the cause.

10. DevOps Agentがエラー内容を調査し根本原因を特定する

(*)画面はブラウザの日本語訳で表示しています。

DevOps AgentがCloudWatchアラームからエラー内容を確認しています。

DevOps Agentがエラーが発生したLambda関数を特定しています。

また、DevOps AgentがLambda関数がアクセスするDynamoDBテーブルを調査しています。

DevOps AgentがLambda関数でエラーが発生した時間帯を特定しています。

DevOps AgentはLambda関数のエラーがタイムアウトではないことを分析しています。

また、Lambda関数のエラーがスロットリングによるものではないことを分析しています。

Lambda関数内でputItem操作を実行するために必要な属性がないことでエラーが発生していることを確認しました。

DevOps Agentは、Lambda関数で発生している問題の根本原因が「DynamoDB PutItem操作で必要な属性であるtimestampがないこと」を特定しました!

11. DevOps Agentが根本原因を特定

処理に失敗する原因として、DynamoDBレコード登録に必要な属性がないことを特定しています。

(*)画面はブラウザの日本語訳で表示しています。

12. 「緩和計画を作成する」(Generate mitigation plan)を選択

(*)画面はブラウザの日本語訳で表示しています。

13. 「詳細を表示(View details)」を選択

14. Lambda関数の該当箇所を修正しデプロイ

今回はハンズオンのため、Lambda関数コンソール上から直接ソースコードを修正しデプロイします。

import json
import boto3
import os
import time
from datetime import datetime
from decimal import Decimal

dynamodb = boto3.resource('dynamodb')
table_name = os.environ['DYNAMODB_TABLE_NAME']
table = dynamodb.Table(table_name)

def lambda_handler(event, context):
    print(f"AWS AIDevOps Test Lambda - {datetime.now()}")
    print(f"Event: {json.dumps(event)}")
    
    try:
        item = {
            'id': 'test-id-123',
            'timestamp': int(time.time()),  
            'data': 'Successfully written to DynamoDB'
        }
        
        print(f"Attempting to write to DynamoDB table: {table_name}")
        print(f"Item: {json.dumps(item)}")
        
        response = table.put_item(Item=item)
        
        return {
            'statusCode': 200,
            'body': json.dumps('Success')
        }
        
    except Exception as e:
        error_message = f"DynamoDB write failed: {str(e)}"
        print(f"ERROR: {error_message}")
        raise Exception(f"AWS AIDevOps Test Error: {error_message}")

15. Lambda関数にて、テストイベントを作成しテスト実行

DevOps Agentが特定した根本原因を解消することで、Lambda関数の処理が成功するようになりました!

また、DynamoDBテーブルにレコードが正常に登録されています!

最後に、ハンズオンで作成したAWSリソースは削除しましょう。Cfnスタックを削除することでAWSリソースをクリーンアップできます。


6. まとめ

AWS DevOps Agentを活用することで、生成AIが自律的にAWSリソースに関するインシデント対応や調査をしてくれたり、過去のインシデントや運用パターンを分析することができることはすごく便利だと感じました。
実際に実案件にて「AWS DevOps Agent」を導入した際は、改めて所感等をシェアできればと思っています。
AWS re:Invent 2025参加中で取り急ぎのレポートとなりますが、皆さんの一助になれば幸いです!

Related posts