
AWS DevOps Agent (Preview)のマルチアカウントアクセスをやってみた #AWSreInvent
こんにちは。たかやまです。
re:Invent2025 でリリースされた AWS DevOps Agent(Preview)がリリースされましたね
すでに AWS DevOps Agent については弊社ブログでも以下の記事が出ています。
こちらAWS DevOps Agentですが、エージェントの機能を最大化させるために以下の機能(Capabilitie)が追加できます。
マルチアカウントAWSアクセス: インシデント対応中に組織全体のリソースを調査するためにセカンダリ AWS アカウントを設定するAWS EKS アクセス設定: パブリックとプライベート両方の EKS 環境で、Kubernetes クラスター、ポッドログ、クラスターイベントの検査を有効化するCI/CD パイプライン統合: GitHub と GitLab パイプラインを接続してデプロイメントをインシデントと関連付け、調査中のコード変更を追跡するMCP サーバー接続: Model Context Protocol を通じて外部の可観測性ツールおよびカスタム監視システムを接続して、調査機能を拡張するテレメトリーソース統合: Datadog、New Relic、Splunk などの監視プラットフォームを接続して、包括的な可観測性データへのアクセスを実現するチケティングおよびチャット統合: ServiceNow、PagerDuty、Slack を接続してインシデント対応ワークフローを自動化し、チーム コラボレーションを実現するWebhook 設定: 外部システムが HTTP リクエストを通じて DevOps Agent の調査を自動的にトリガーできるようにする
Configuring capabilities for AWS DevOps Agent - AWS DevOps Agent
今回はこのDevOps Agentで複数のAWSアカウントを横断して調査できるマルチアカウント機能を設定し、実際にセカンダリアカウントのLambdaエラーを調査してみました。
やってみる
前提条件
- AWS DevOps Agentがセットアップ済みであること(プライマリアカウント)
- セカンダリアカウントへのアクセス権限があること
DevOps Agentの初期設定
まずはプライマリアカウントでDevOps Agentの初期設定を行います。
初期設定画面から基本情報を入力してエージェントを作成します。

作成が完了すると、DevOps Agentのダッシュボードが表示されます。

セカンダリアカウントの設定
ここからがマルチアカウント設定の本題です。
「Capabilities」タブから、「Cloud」セクションを開きます。「Secondary Sources」に「Add source」ボタンがあるのでクリックします。

すると、セカンダリソースで作成するべきIAMロールの情報が表示されます。この情報をもとにセカンダリアカウント側でIAMロールを作成します。

セカンダリアカウントでのIAMロール作成
セカンダリアカウントに切り替えて、画面に表示された情報をもとにIAMロールを作成します。
IAMロール名はプライマリソースで表示されていたIAMロール名と一致される必要があります。

プライマリアカウントでの連携設定
プライマリアカウントに戻って、セカンダリアカウントのアカウントIDを入力し紐付けを行います。
セカンダリアカウントに接続するためにAssumeRole用のポリシーをプライマリアカウント側のIAMロールに追加する必要があります。
IAMロールにAssumeRole用のポリシーを追加するのが面倒な場合は、IAMロール自動更新するオプションが用意されているのでそちらを利用すると便利です。

設定が問題なければ、セカンダリアカウントのアカウントIDが表示され、連携が完了します。

テスト障害用のリソースデプロイ
鈴木のブログにてテストオプションAを試していたので、こちらではテストオプションBの「Lambda error rate test」を試してみます。
セカンダリアカウントで、DevOps Agentのテスト用にエラーを意図的に発生させるLambda関数をデプロイします。
CloudFormationテンプレートの作成
以下のCloudFormationテンプレートを作成します。このテンプレートは、エラーを意図的に発生させるLambda関数とそのエラーを検知するCloudWatchアラームを作成します。
CloudFormationテンプレート(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'
スタックのデプロイ
CloudFormationテンプレートをデプロイします。
aws cloudformation deploy --stack-name AWS-AIDevOps-Lambda-Test \
--template-file AWS-AIDevOps-lambda-test.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--region us-east-1
Lambda関数のテスト実行
デプロイが完了したら、Lambda関数を実行してエラーを発生させます。
aws lambda invoke \
--function-name AWS-AIDevOps-test-lambda \
--cli-binary-format raw-in-base64-out \
--payload '{"test": "AWS AIDevOps validation", "timestamp": "2024-01-01T00:00:00Z"}' \
--region us-east-1 \
/dev/stdout | jq .
実行結果は以下の通りです。意図的にエラーが発生していることが確認できます。
{
"errorMessage": "AWS AIDevOps Test Error: Test API rate limit exceeded",
"errorType": "Exception",
"requestId": "0efdd918-9026-4f27-ab89-ddffbe73f82a",
"stackTrace": [
" File \"/var/task/index.py\", line 22, in lambda_handler\n raise Exception(f\"AWS AIDevOps Test Error: {error_message}\")\n"
]
}
{
"StatusCode": 200,
"FunctionError": "Unhandled",
"ExecutedVersion": "$LATEST"
}
CloudWatchアラームの確認
CloudWatchコンソールでアラームを確認すると、無事アラート状態になっています。

DevOps Agentでの調査
DevOps Agentを使ってセカンダリアカウントのエラーを調査してみます。
調査の開始
CloudWatchアラームの詳細画面から「Operator access」をクリックします。

「Start Investigation」をクリックして、DevOps Agentの調査を開始します。

調査内容の入力
「Start an investigation」フォームが開くので、以下の情報を入力します。
| Field | Input |
|---|---|
| Investigation details | Error occurred in Lambda function "AWS-AIDevOps-test-lambda". Purpose: identify root cause and verify logs |
| Investigation starting point | CloudWatch Alarm "AWS-AIDevOps-Lambda-Error-Test" (ALARM state) |
| Date and time of incident | 2025-12-03T08:40:06.292Z |
| Name your investigation | Investigation 2025-12-03T08:40:06.292Z |
| AWS Account ID | セカンダリアカウントのアカウントIDを入力 |
| Region | us-east-1 |
| Priority | Low or Medium (for testing purposes) |
重要なのは、AWS Account IDにセカンダリアカウントのIDを指定することです。これにより、DevOps Agentがセカンダリアカウントのリソースに対して調査を実行します。

「Start investigating...」ボタンをクリックすると調査が開始されます。

調査結果の確認
調査が完了すると「Root cause」が表示されます。今回は調査は10分程度で完了しました。

内容を確認すると、Lambda関数が意図的にテストエラーを生成していることが正確に特定されていますね。
Lambda function intentionally generates test errors as designed
The Lambda function 'AWS-AIDevOps-test-lambda' was explicitly designed to generate errors for testing purposes. The function code intentionally raises a Python Exception with the message 'AWS AIDevOps Test Error: Simulated database connection timeout' at line 22 of index.py. The function's description field states it 'intentionally generates errors,' confirming this is expected test behavior. When the function experienced its first-ever invocation at 2025-12-03T08:30:44Z, it executed as designed and threw the intentional exception, which triggered the CloudWatch alarm 'AWS-AIDevOps-Lambda-Error-Test' (configured with threshold > 0.0 to detect any errors). The alarm correctly detected the error and transitioned to ALARM state at 08:31:59Z. This is not a production incident but rather the expected operational behavior of a test Lambda function validating error detection and alarm functionality.
日本語訳すると以下のような内容です。
Lambda関数は設計通り意図的にテストエラーを生成します
Lambda関数「AWS-AIDevOps-test-lambda」は、テスト目的でエラーを生成するよう明示的に設計されています。関数コードはindex.pyの22行目で、メッセージ「AWS AIDevOps Test Error: Simulated database connection timeout」を含むPython例外を意図的に発生させます。関数の説明欄には「意図的にエラーを生成する」と記載されており、これが期待されるテスト動作であることを確認しています。2025-12-03T08:30:44Zに本関数が初めて呼び出された際、設計通り実行され意図的な例外をスローしました。これによりCloudWatchアラーム「AWS-AIDevOps-Lambda-Error-Test」(閾値>0.0で設定され、あらゆるエラーを検知)がトリガーされました。アラームはエラーを正しく検知し、08:31:59ZにALARM状態に移行しました。これは本番環境のインシデントではなく、エラー検出とアラーム機能を検証するテスト用Lambda関数の想定される動作です。
DevOps Agentは、Lambda関数のコード内容、関数の説明、CloudWatchアラームの設定、エラーログの内容など、複数の情報源を統合的に分析して根本原因を特定していることがわかります。
セカンダリアカウントのリソースに対しても、プライマリアカウントと同様の精度で調査が実行されていますね。
最後に
AWS DevOps Agent(Preview)のマルチアカウントアクセス機能を試してみました。
セカンダリアカウント側でIAMロールを作成し、プライマリアカウントから信頼関係を設定することで、複数のAWSアカウントを横断してDevOps Agentが自動調査を実行できることを確認しました。
調査精度も高く、マルチアカウント環境での運用でも活躍しそうです。
まだまだ、エージェントのCapabilityがあるのでいろいろ試してみたいと思います。
このブログがどなたかの参考になれば幸いです。
以上、たかやま(@nyan_kotaroo)でした。









