Note: 本記事はAWS DevOps Agentユーザーズガイドの内容を元に、サンプルCFnの内容を一部修正してハンズオンしております。元のAWS公式のドキュメントについては下記URLを参照願います。
- はじめに
- AWS DevOps Agentとは
- セットアップ手順
- 実践デモ
- まとめ
はじめに
こんにちは、サーバーワークスの多田です。
深夜2時にアラートが鳴り響き、慌てて調査を始める...そんな経験はありませんか?インシデント対応は、原因の特定から関連ログの確認、最近のデプロイ履歴の調査まで、多くの時間と労力を要する作業です。
2025年12月、AWSは「AWS DevOps Agent」のプレビュー版を発表しました。これは、24時間365日稼働する自律的なオンコールエンジニアとして、インシデントの根本原因の分析と解決策を提示してくれる画期的なサービスです。
弊社メンバーの複数のブログ記事からも注目度の高さが伺えます。
本記事では、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

わかりづらいですが、マネジメントコンソール上でもアラームが発生していることが確認できます。
AWS DevOps Agentによる調査
CloudWatch Alarmがトリガーされた後、AWS DevOps Agentで調査を開始します。
Operator Appでの調査開始
1. AWSマネジメントコンソールからAgent Spacesを開きます。

AWS CLIから作成したAgent Spaceが表示されます。
2.[View Details]から[Web app]タブを開き、[Operator access]を開きます。

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

調査結果の内容
AWS DevOps Agentは、以下の情報を提供します。
1. Investigation Timeline(調査タイムライン)
エージェントが実行したアクション(ログの検索、メトリクスの確認など)と、そこから得られた発見事項が時系列で表示されます。 (ブラウザ側で日本語に翻訳して表示しています)

2. Root Cause(根本原因分析)
下図の通り根本原因が特定されました。

まとめ
本記事では、AWS DevOps Agent(プレビュー版)を実際に試し、CloudWatch Alarmと連携したインシデント対応の仕組みを体験しました。
実装のポイント
- CLIモデルの追加: プレビュー版を利用するためには、最初に必ず
add-modelコマンドを実行する必要があります。 - IAMロールの分離: エージェント用とユーザー(Operator App)用のロールを適切に設定することが重要です。
- 手動トリガー: 現在のプレビュー版では、アラーム発火後に手動で調査を開始する必要があります。
プレビュー版ではありますが、インシデント対応の自動化という大きな可能性を秘めたサービスです。ぜひ、実際に試してみてください!