【プレビュー】AWS DevOps Agentのハンズオンをやってみた【6 人目】

記事タイトルとURLをコピーする

Note: 本記事はAWS DevOps Agentユーザーズガイドの内容を元に、サンプルCFnの内容を一部修正してハンズオンしております。元のAWS公式のドキュメントについては下記URLを参照願います。

Test option B: Lambda error rate test

はじめに

こんにちは、サーバーワークスの多田です。

深夜2時にアラートが鳴り響き、慌てて調査を始める...そんな経験はありませんか?インシデント対応は、原因の特定から関連ログの確認、最近のデプロイ履歴の調査まで、多くの時間と労力を要する作業です。

2025年12月、AWSは「AWS DevOps Agent」のプレビュー版を発表しました。これは、24時間365日稼働する自律的なオンコールエンジニアとして、インシデントの根本原因の分析と解決策を提示してくれる画期的なサービスです。

弊社メンバーの複数のブログ記事からも注目度の高さが伺えます。

blog.serverworks.co.jp

blog.serverworks.co.jp

blog.serverworks.co.jp

blog.serverworks.co.jp

blog.serverworks.co.jp

本記事では、AWS DevOps Agentを実際に試してみた結果を、技術的な実装手順とともに詳しく解説します。CloudWatch Alarmと連携させて意図的にエラーを発生させ、AWS DevOps Agentがどのように動作するのかを確認していきます。

AWS DevOps Agentとは

AWS DevOps Agentは、AWSが提供する「Frontier Agent(フロンティアエージェント)」と呼ばれる新しいカテゴリのサービスです。従来の監視ツールとは異なり、単にアラートを通知するだけでなく、インシデントの自動トリアージ、根本原因の分析、そして解決に向けたアクションプランの提案まで行います。

深夜であろうとピーク時間であろうと、アラートが発生した瞬間から調査を開始し、アプリケーションを最適なパフォーマンスに復旧させるための支援を提供します。

主要機能

AWS DevOps Agentは、以下の3つの主要機能を提供します:

1. 自動トリアージと根本原因分析

調査を開始すると、AWS DevOps Agentは以下の作業を実行します:

  • CloudWatchメトリクスとログの分析
  • 最近のコードデプロイ履歴の確認(GitHub/GitLab連携)
  • 関連するAWSリソースの状態確認
  • 複数のデータソースを相関分析して根本原因を特定

: プレビュー版では、CloudWatch Alarmから自動的に調査が開始される機能は提供されていません。調査を開始するには、Operator App(Webインターフェース)から手動で開始するか、ServiceNowやPagerDutyなどの外部チケットシステムと統合する必要があります。 チケットシステムと統合せずに、自動的に調査を開始する場合は、EventBridge経由でLambdaを呼び出し、InvokeAgentやStartInvestigation相当の操作を実行する必要があります。 webhookを設定することで、CloudWatchアラームからLambda経由で調査を開始することができます。 この場合もセルフヒーリングまでは実施できません。(Human-in-the-loopの思想)

2. 24/365自動監視

人間のオペレーターとは異なり、AWS DevOps Agentは休むことなく監視を続けます:

  • リアルタイムでのインシデント検知
  • 調査開始後、即座に分析を実行
  • 調査の仮説、観察結果、根本原因の発見を共有

3. アクションプランの提案

単に問題を報告するだけでなく、具体的な解決策を提案します:

  • 観測性の強化(モニタリング、アラート、ログ)
  • インフラの最適化(オートスケーリング、キャパシティ調整)
  • デプロイパイプラインの改善(テスト、検証)
  • 過去のインシデントパターンに基づく予防的な推奨事項

セットアップ手順

それでは、実際にAWS DevOps Agentをセットアップしていきましょう。

AWS CLIへのサービスモデル追加(必須)

重要: AWS DevOps Agentはプレビュー版のため、標準のAWS CLIにはコマンド定義が含まれていません。セットアップを始める前に、必ず以下のコマンドでカスタムサービスモデルを追加してください。これを行わないと、以降の aws devopsagent コマンドがエラーになります。

# サービスモデルのダウンロード
curl -o devopsagent.json https://d1co8nkiwcta1g.cloudfront.net/devopsagent.json

# AWS CLIへの追加
aws configure add-model --service-model "file://${PWD}/devopsagent.json" --service-name devopsagent

IAMロールの作成

AWS DevOps Agentが動作するには、2つのIAMロールが必要です。

  • DevOpsAgentRole-AgentSpace(Agent Space用ロール)
  • DevOpsAgentRole-WebappAdmin(Operator App用ロール)

以下、順に記載します。

DevOpsAgentRole-AgentSpace(Agent Space用ロール)

このロールは、AWS DevOps AgentがAWSリソースにアクセスするために使用します。

1. 信頼ポリシーの作成

まず、信頼ポリシーを定義します。<ACCOUNT_ID>は自分のAWSアカウントIDに置き換えてください:

cat > devops-agentspace-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "aidevops.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<ACCOUNT_ID>"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:aidevops:us-east-1:<ACCOUNT_ID>:agentspace/*"
        }
      }
    }
  ]
}
EOF

2. IAMロールの作成

aws iam create-role \
  --region us-east-1 \
  --role-name DevOpsAgentRole-AgentSpace \
  --assume-role-policy-document file://devops-agentspace-trust-policy.json

作成されたロールのARNを保存しておきます:

aws iam get-role \
  --role-name DevOpsAgentRole-AgentSpace \
  --query 'Role.Arn' \
  --output text

3. AWS管理ポリシーのアタッチ

aws iam attach-role-policy \
  --role-name DevOpsAgentRole-AgentSpace \
  --policy-arn arn:aws:iam::aws:policy/AIOpsAssistantPolicy

4. インラインポリシーの追加

追加の権限を付与するインラインポリシーを作成します:

cat > devops-agentspace-inline-policy.json << 'EOF'
{
  "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"
      ],
      "Resource": ["*"]
    }
  ]
}
EOF

aws iam put-role-policy \
  --role-name DevOpsAgentRole-AgentSpace \
  --policy-name AllowExpandedAIOpsAssistantPolicy \
  --policy-document file://devops-agentspace-inline-policy.json

DevOpsAgentRole-WebappAdmin(Operator App用ロール)

このロールは、Operator App(ユーザーインターフェース)がAgent Spaceにアクセスするために使用します。

1. 信頼ポリシーの作成

cat > devops-operator-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "aidevops.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<ACCOUNT_ID>"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:aidevops:us-east-1:<ACCOUNT_ID>:agentspace/*"
        }
      }
    }
  ]
}
EOF

2. IAMロールの作成

aws iam create-role \
  --role-name DevOpsAgentRole-WebappAdmin \
  --assume-role-policy-document file://devops-operator-trust-policy.json \
  --region us-east-1

ロールARNを保存:

aws iam get-role \
  --role-name DevOpsAgentRole-WebappAdmin \
  --query 'Role.Arn' \
  --output text

3. インラインポリシーの追加

cat > devops-operator-inline-policy.json << 'EOF'
{
  "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:ListChildExecutions",
        "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:ListPendingMessages",
        "aidevops:InitiateChatForCase",
        "aidevops:EndChatForCase",
        "aidevops:DescribeSupportLevel",
        "aidevops:SendChatMessage"
      ],
      "Resource": "arn:aws:aidevops:us-east-1:<ACCOUNT_ID>:agentspace/*"
    },
    {
      "Sid": "AllowSupportOperatorActions",
      "Effect": "Allow",
      "Action": [
        "support:DescribeCases",
        "support:InitiateChatForCase",
        "support:DescribeSupportLevel"
      ],
      "Resource": "*"
    }
  ]
}
EOF

aws iam put-role-policy \
  --role-name DevOpsAgentRole-WebappAdmin \
  --policy-name AIDevOpsBasicOperatorActionsPolicy \
  --policy-document file://devops-operator-inline-policy.json

Agent Spaceの作成

Agent Spaceは、AWS DevOps Agentの作業領域です。ここに監視対象のリソースや調査結果が保存されます。

aws devopsagent create-agent-space \
  --name "ServerWorks-DevOpsAgent-Demo" \
  --description "サーバーワークス技術ブログ用デモ環境" \
  --endpoint-url "https://api.prod.cp.aidevops.us-east-1.api.aws" \
  --region us-east-1

実行結果からagentSpaceIdを取得し、環境変数に保存しておきます:

export AGENT_SPACE_ID="<作成されたAgent Space ID>"

AWSアカウントの関連付け

Agent Spaceを作成したら、次にAWSアカウントを関連付けます。

aws devopsagent associate-service \
  --agent-space-id ${AGENT_SPACE_ID} \
  --service-id aws \
  --configuration '{
    "aws": {
      "assumableRoleArn": "arn:aws:iam::<ACCOUNT_ID>:role/DevOpsAgentRole-AgentSpace",
      "accountId": "<ACCOUNT_ID>",
      "accountType": "monitor",
      "resources": []
    }
  }' \
  --endpoint-url "https://api.prod.cp.aidevops.us-east-1.api.aws" \
  --region us-east-1

Operator Appの有効化

最後に、Operator App(ユーザーインターフェース)を有効化します。

aws devopsagent enable-operator-app \
  --agent-space-id ${AGENT_SPACE_ID} \
  --auth-flow iam \
  --operator-app-role-arn "arn:aws:iam::<ACCOUNT_ID>:role/DevOpsAgentRole-WebappAdmin" \
  --endpoint-url "https://api.prod.cp.aidevops.us-east-1.api.aws" \
  --region us-east-1

これでセットアップは完了です!

実践デモ

それでは、実際にエラーを発生させてAWS DevOps Agentの動作を確認していきましょう。このデモでは、CloudFormationを使ってテスト環境を構築し、意図的にLambda関数のエラーを発生させます。

CloudFormationスタックのデプロイ

まず、テスト用のインフラをCloudFormationでデプロイします。このテンプレートには、ランダムエラーを発生させるLambda関数、それを監視するCloudWatch Alarm、および必要なIAMロールが含まれています。

DevOpsAgent.yml として以下の内容を保存します:

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

Resources:
  # Lambda実行用のIAMロール
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWS-DevOpsAgentLambdaTestRole
      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

  # テスト用Lambda関数
  TestLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: AWS-DevOpsAgent-test-lambda
      Runtime: python3.12
      Handler: index.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        ZipFile: |
          import json
          import random
          from datetime import datetime
          
          def lambda_handler(event, context):
              print(f"AWS DevOpsAgent Test Lambda - {datetime.now()}")
              print(f"Event: {json.dumps(event)}")
              
              # エラーシナリオをランダムに選択
              error_scenarios = [
                  "Simulated database connection timeout",
                  "Test API rate limit exceeded", 
                  "Intentional validation error for AWS DevOpsAgent testing"
              ]
              
              error_message = random.choice(error_scenarios)
              print(f"Generating test error: {error_message}")
              
              # 意図的にエラーを発生
              raise Exception(f"AWS DevOpsAgent Test Error: {error_message}")
      Timeout: 30

  # Lambda関数のエラーを検知するCloudWatch Alarm
  LambdaErrorAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: AWS-DevOpsAgent-Lambda-Error-Test
      AlarmDescription: AWS-DevOpsAgent 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関数の名前
    Value: !Ref TestLambdaFunction
    
  LambdaFunctionArn:
    Description: Lambda関数のARN
    Value: !GetAtt TestLambdaFunction.Arn
    
  AlarmName:
    Description: CloudWatch Alarmの名前
    Value: !Ref LambdaErrorAlarm
    
  TestCommand:
    Description: Lambda関数をテストするためのAWS CLIコマンド
    Value: !Sub 'aws lambda invoke --function-name ${TestLambdaFunction} --payload "{\"test\":\"AWS DevOpsAgent validation\"}" response.json --region ${AWS::Region}'

Lambdaは、数種類のエラーをランダムに発生させます。(必ずエラーになります)

スタックのデプロイコマンド:

aws cloudformation create-stack \
  --stack-name devops-agent-test \
  --template-body file://DevOpsAgent.yml \
  --capabilities CAPABILITY_NAMED_IAM \
  --region us-east-1

Lambda関数の実行とエラー生成

デプロイが完了したら、Lambda関数を実行して意図的にエラーを発生させ、CloudWatch Alarmをトリガーさせます。

for i in {1..5}; do
  echo "実行 $i 回目..."
  aws lambda invoke \
    --function-name AWS-DevOpsAgent-test-lambda \
    --payload "{\"test\":\"run-$i\"}" \
    --cli-binary-format raw-in-base64-out \
    response-$i.json \
    --region us-east-1
  echo "完了"
  sleep 2
done

CloudWatch Alarmの確認

以下のコマンドで、アラームがALARM状態に遷移したことを確認します。

aws cloudwatch describe-alarms \
  --alarm-names AWS-DevOpsAgent-Lambda-Error-Test \
  --region us-east-1 \
  --query 'MetricAlarms[0].StateValue' \
  --output text

図1.CloudWatchアラーム

わかりづらいですが、マネジメントコンソール上でもアラームが発生していることが確認できます。

AWS DevOps Agentによる調査

CloudWatch Alarmがトリガーされた後、AWS DevOps Agentで調査を開始します。

Operator Appでの調査開始

1. AWSマネジメントコンソールからAgent Spacesを開きます。

図2.Agent Spaces

AWS CLIから作成したAgent Spaceが表示されます。

2.[View Details]から[Web app]タブを開き、[Operator access]を開きます。

図3.Agent Spaces詳細

3. [Incident Response Dashboard]の[Start an investigation]に調査したい内容を入力し、[Start Investigation]をクリックします。

図4.Start Investigation

調査結果の内容

AWS DevOps Agentは、以下の情報を提供します。

1. Investigation Timeline(調査タイムライン)

エージェントが実行したアクション(ログの検索、メトリクスの確認など)と、そこから得られた発見事項が時系列で表示されます。 (ブラウザ側で日本語に翻訳して表示しています)

図5.タイムライン

2. Root Cause(根本原因分析)

下図の通り根本原因が特定されました。

図6.根本原因

まとめ

本記事では、AWS DevOps Agent(プレビュー版)を実際に試し、CloudWatch Alarmと連携したインシデント対応の仕組みを体験しました。

実装のポイント

  • CLIモデルの追加: プレビュー版を利用するためには、最初に必ず add-model コマンドを実行する必要があります。
  • IAMロールの分離: エージェント用とユーザー(Operator App)用のロールを適切に設定することが重要です。
  • 手動トリガー: 現在のプレビュー版では、アラーム発火後に手動で調査を開始する必要があります。

プレビュー版ではありますが、インシデント対応の自動化という大きな可能性を秘めたサービスです。ぜひ、実際に試してみてください!