AWS DevOps Agent (Preview)をテストシナリオに沿って試してみる #AWSreInvent

AWS DevOps Agent (Preview)をテストシナリオに沿って試してみる #AWSreInvent

2025.12.03

みなさん AWS re:Invent2025 楽しんでいるでしょうか?

昨日発表された AWS DevOps Agent がトラブルシューティングで非常に便利そうなので触っていきます。
すでに AWS DevOps Agent については以下の記事が出ていますので、そちらもぜひご覧ください。
https://dev.classmethod.jp/articles/aws-devops-agent-25/
https://dev.classmethod.jp/articles/aws-devops-agent-preview-awsreinvent-troubleshooting/

AWS DevOps Agentとは

AWS DevOps Agent は、インシデントの解決と予防を自律的に行う「Frontier Agent(フロンティアエージェント)」として新たに発表された AI エージェントサービスです。
Frontier Agent は AWS が定義する新しいクラスの AI エージェントで、人の介入なしに独立して動作し多数のタスクを処理できる AI エージェントです。

他には AWS Security Agent や Kiro Autonomous Agent といったエージェントが発表されています。
https://dev.classmethod.jp/articles/aws-security-agent-public-preview-reinvent-2025/
https://dev.classmethod.jp/articles/kiro-autonomous-agent-early-access/

その中で、AWS DevOps Agent はアラートなどから自動で調査を行なったり、自然言語で調査しインシデント解決までの調査や根本原因の特定などが可能です。

EC2のCPU使用率アラートによるテストを試してみる

幅広い機能がありますが、まずはシンプルな使い方を試したいですよね。
ちょうどよく AWS のドキュメントに EC2 の CPU 使用率が上昇してアラートを発生させるテストシナリオが用意されています。

https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-create-a-test-environment.html#test-option-a-ec2-cpu-capacity-test

Test option A: EC2 CPU capacity test

Purpose: Validate AWS DevOps Agent's ability to detect and investigate EC2 performance issues
Estimated time: 5 minutes setup + 10 minutes automatic execution
Difficulty: Fully automated (no manual steps required)

今回はこちらを試していきます。

テストシナリオの流れ

今回のテストシナリオの流れです。

EC2 へログインして CPU 負荷をかけるスクリプトを実行し、CloudWatch のアラームを発生させます。

発生したアラームの調査と根本原因の特定を AWS DevOps Agent にしてもらいましょう。

事前準備

Agent Space が作成されていることが前提です、作成していきましょう。

Agent Space作成

スペース名を入力し、使用するロールやタグの設定をします。今回はデフォルトのままロールを作成しました。
Agent Space 作成画面 - スペース名とロール設定

Operator accessからインシデント調査のための Web App を開くことができます。
Operator access - Web App 起動ボタン

この画面を開けることが確認できたら、準備 OK です。
DevOps Agent Web App 初期画面

次はテスト環境を作成していきましょう。

テスト環境作成

ドキュメントに記載されている以下 CFn テンプレートをAWS-AIDevOps-ec2-test.yamlで保存します。

AWS-AIDevOps-EC2-test.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS AIDevOps EC2 CPU Test Stack'

Parameters:
  MyIP:
    Type: String
    Description: Your current IP address for SSH access (find at https://whatismyipaddress.com)
    Default: '0.0.0.0/0'

Resources:
  # Security Group for SSH access
  TestSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: AWS-AIDevOps-test-sg
      GroupDescription: AWS AIDevOps beta testing security group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref MyIP
          Description: SSH access from your IP
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-SG
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # Key Pair for SSH access
  TestKeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: AWS-AIDevOps-test-key
      KeyType: rsa
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-Key
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # EC2 Instance for CPU testing
  TestInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      KeyName: !Ref TestKeyPair
      SecurityGroupIds:
        - !Ref TestSecurityGroup
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          yum install -y htop

          # Create the CPU stress test script
          cat > /home/ec2-user/cpu-stress-test.sh << 'EOF'
          #!/bin/bash
          echo "Starting AWS AIDevOps CPU Stress Test"
          echo "Time: $(date)"
          echo "Instance: $(curl -s http://169.254.169.254/latest/meta-data/instance-id)"
          echo ""

          # Get number of CPU cores
          CORES=$(nproc)
          echo "CPU Cores: $CORES"
          echo ""

          echo "Starting stress test (5 minutes)..."
          echo "This will generate >70% CPU usage to trigger CloudWatch alarm"
          echo ""

          # Create CPU load using yes command
          echo "Starting CPU load processes..."
          for i in $(seq 1 $CORES); do
              (yes > /dev/null) &
              CPU_PID=$!
              echo "Started CPU load process $i (PID: $CPU_PID)"
              echo $CPU_PID >> /tmp/cpu_test_pids
          done

          # Auto-cleanup after 5 minutes
          (sleep 300 && echo "Stopping CPU load processes..." && kill $(cat /tmp/cpu_test_pids 2>/dev/null) 2>/dev/null && rm -f /tmp/cpu_test_pids) &

          echo ""
          echo "CPU load processes started for 5 minutes"
          echo "Check CloudWatch for alarm trigger in 3-5 minutes"
          EOF

          chmod +x /home/ec2-user/cpu-stress-test.sh
          chown ec2-user:ec2-user /home/ec2-user/cpu-stress-test.sh

          # Create auto-shutdown script (safety mechanism)
          cat > /home/ec2-user/auto-shutdown.sh << 'SHUTDOWN_EOF'
          #!/bin/bash
          echo "Auto-shutdown scheduled for 2 hours from now: $(date)"
          sleep 7200
          echo "Auto-shutdown executing at: $(date)"
          sudo shutdown -h now
          SHUTDOWN_EOF

          chmod +x /home/ec2-user/auto-shutdown.sh
          nohup /home/ec2-user/auto-shutdown.sh > /home/ec2-user/auto-shutdown.log 2>&1 &

          echo "AWS AIDevOps test setup completed at $(date)" > /home/ec2-user/setup-complete.txt
      Tags:
        - Key: Name
          Value: AWS-AIDevOps-Test-Instance
        - Key: Purpose
          Value: AWS-AIDevOps-Testing

  # CloudWatch Alarm for CPU utilization
  CPUAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: AWS-AIDevOps-EC2-CPU-Test
      AlarmDescription: AWS-AIDevOps beta test - EC2 CPU utilization alarm
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average
      Period: 60
      EvaluationPeriods: 1
      Threshold: 70
      ComparisonOperator: GreaterThanThreshold
      Dimensions:
        - Name: InstanceId
          Value: !Ref TestInstance
      TreatMissingData: notBreaching

Outputs:
  InstanceId:
    Description: EC2 Instance ID for testing
    Value: !Ref TestInstance

  SecurityGroupId:
    Description: Security Group ID
    Value: !Ref TestSecurityGroup

  AlarmName:
    Description: CloudWatch Alarm Name
    Value: !Ref CPUAlarm

  SSHCommand:
    Description: SSH command to connect to instance
    Value: !Sub 'ssh -i "AWS-AIDevOps-test-key.pem" ec2-user@${TestInstance.PublicDnsName}'

このテンプレートを実行することで作成されるリソースの一覧は以下です。

リソース 種類 役割
TestSecurityGroup EC2::SecurityGroup SSHアクセス(ポート22)を許可
TestKeyPair EC2::KeyPair EC2へのSSH認証用RSAキー
TestInstance EC2::Instance CPU負荷テスト用インスタンス(t3.micro)
CPUAlarm CloudWatch::Alarm CPU使用率70%超過を検知

CloudFormation へアップロードして展開しましょう。
CloudFormation テンプレートのアップロード画面

スタック名はAWS-AIDevOps-EC2-Testとします。
CloudFormation スタック名入力画面

CPUストレステストはインスタンスの起動から5分後に自動的に開始されます。
https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-create-a-test-environment.html

ドキュメントには上記の記載があったのですが、私の環境ではアラートが発生しなかったので EC2 へログインして./cpu-stress-test.shを手動実行しました。

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-172-31-18-113 ~]$ ./cpu-stress-test.sh
Starting AWS AIDevOps CPU Stress Test
Time: Wed Dec  3 02:04:11 UTC 2025
Instance: 

CPU Cores: 2

Starting stress test (5 minutes)...
This will generate >70% CPU usage to trigger CloudWatch alarm

Starting CPU load processes...
Started CPU load process 1 (PID: 26055)
Started CPU load process 2 (PID: 26056)

CPU load processes started for 5 minutes
Check CloudWatch for alarm trigger in 3-5 minutes
[ec2-user@ip-172-31-18-113 ~]$ 

無事アラートが確認できました。
CloudWatch アラーム発生確認

ここまでの内容を AWS DevOps Agent がどのように調査していくのかみていきましょう。

AWS DevOps Agentでエラー内容を調査する

事前準備で開いた Web App に戻り、Start Investigationから詳細情報を入れていきましょう。

Start Investigation - 調査詳細入力画面

Investigation details
"AWS-AIDevOps-EC2-CPU-Test"が発生したことを入力。

Investigate the cause of the "AWS-AIDevOps-EC2-CPU-Test" alert.

Investigation starting point
CloudWatch Alarm がアラーム状態になった時刻を入力。

CloudWatch Alarm occurred in alarm state at 2025-12-03 11:06:45

Data and time of incident はアラームの発生時刻からそれほど時間が経っていなかったのでデフォルトのままにしました。

調査を開始すると、タイムラインが表示され調査を進めてくれます。自動で調査が進んでいくタイムラインを見るのは楽しいですね。
調査タイムライン表示

数分待つと、根本原因の特定まで確認できたためRoot Causeのタブが出てきました。
Root Cause タブ - 根本原因特定結果

内容を確認すると、私がテストスクリプトを実行したことが特定できています。

  1. User executed CPU stress test script during SSH session
    The CPU spike to 98.34% on EC2 instance i-0ac6ad9e37829b762 was caused by manual execution of the CPU stress test script '/home/EC2-user/cpu-stress-test.sh' during an SSH セッション. User cm-suzuki.jun established an SSH connection via EC2 Instance Connect at 02:04:02 UTC, and the CPU spike began at 02:05:00 UTC (1 minute later), lasting exactly 5 minutes until 02:10:00 UTC.

日本語訳

1.ユーザーがSSHセッション中にCPUストレステストスクリプトを実行した
EC2 インスタンス i-0ac6ad9e37829b762 で CPU 使用率が 98.34% まで急上昇したのは、SSH セッション中に CPU ストレステストスクリプト '/home/EC2-user/cpu-stress-test.sh' を手動で実行したためです。ユーザー cm-suzuki.jun が EC2 Instance Connect 経由で 02:04:02 UTC に SSH 接続を確立し、CPU 使用率が急上昇したのは 02:05:00 UTC (1 分後) に始まり、02:10:00 UTC までちょうど 5 分間続きました。

バッチリ合ってますね。誰がどうやって発生した事象なのかまで特定されています。

すでに原因はわかっていますがGenerate Mitigation Planという表示が出ているので試してみましょう。

発生した事象から対応策の提案をしてくれます。

Generate Mitigation Plan 表示

すると、別タブが作成されて Mitigation Plan が表示されました。

Mitigation Plan 詳細画面

↓一部抜粋した日本語訳

これは、修復を必要とする運用上の障害ではなく、テスト環境におけるシステムの動作の想定通りの結果です。システムは設計どおりに動作しているため、直ちに運用上の緩和策を講じる必要はありません。

今回はテストスクリプトの実行なので対応不要となりましたが、実際のインシデント対応では方針の策定までしてくれるのは嬉しいですね。

テストが終わったら作成した CloudFormation のスタック削除を忘れないようにしましょう。

まとめ

AWS DevOps Agent (Preview) で AWS 公式のテストシナリオを実行し、どのような動作をするのか確認できました。

根本原因特定、対応策の提案までを自動で実施してくれるのは本当にありがたいです。

特に、CloudTrail ログを手動で追う必要がなく、誰がいつ何を実行したかまで特定してくれる点は、インシデント対応の大幅な時間短縮につながりそうです。

GitHub 連携や MCP サーバー接続、Slack 通知などの統合機能もあるようです。気になる方はぜひ試してみてください!

参考

Frontier agent – AWS DevOps Agent – AWS
What is AWS DevOps Agent - AWS DevOps Agent
AWS DevOps Agent helps you accelerate incident response and improve system reliability (preview) | AWS News Blog

この記事をシェアする

FacebookHatena blogX

関連記事