0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS DevOps Agent を触ってみた

0
Last updated at Posted at 2026-04-09

はじめに

AWS DevOps Agent は、2026年3月31日にGA(一般提供)となったサービスです。
CloudWatchアラームなどのインシデントを検知すると、
自動で原因を調査し、復旧手順まで提案してくれます。

今回は公式のテスト環境を使ってEC2にCPU負荷をかけてアラームを発火させ、
DevOps Agentがどう動くかを確認するハンズオンを実施してみました。

料金と対応リージョン

GAリリース後に最初の運用タスクを実行した時点から、2ヶ月間の無料トライアルが開始されます(パブリックプレビュー参加者も対象)。トライアル中の月あたりの上限は以下のとおりです。

項目 無料枠(月あたり)
Agent Space 数 最大 10
調査(Incident Response) 20 時間
予防(Evaluations) 15 時間
チャット(SRE) 20 時間

トライアル終了後は $0.0083/agent-second(約 $29.88/時間)の従量課金です。

対応リージョンは6つで、東京(ap-northeast-1)も含まれています。
このハンズオンでは東京リージョンを使います。

Agent Space を作成する

Agent Space は、DevOps Agent がアクセスできるAWSリソースの範囲を定義する「作業空間」です。

マネジメントコンソールの検索バーで「DevOps Agent」と入力し、サービスを開きます。

image.png

Create Agent Space をクリックし、以下を入力します。

項目
Name my-first-agent-space
Description 任意(空欄でもOK)
Agent response language Japanese (Japan)

IAM ロールの設定では Auto-create a new AWS DevOps Agent role を選択します。
DevOps Agent がアカウント内のリソースを調査するためのロールが自動作成されます。

スクリーンショット 2026-04-09 184334.png

続けて「Enable Web App」セクションでも同様に Auto-create を選択し、Submit をクリックします
スクリーンショット 2026-04-09 184449.png

image.png

1〜2分でステータスが「Active」になれば完了です。
Operator access リンクから Web App が開けることを確認しておきます。

テスト環境を構築する

AWS公式のCloudFormationテンプレートを使って、CPU高負荷を発生させるEC2インスタンスを立ち上げます。テンプレートには以下が含まれています。

  • EC2インスタンス(t3.micro) -- 起動後にCPUストレスを自動実行
  • CloudWatch Alarm -- CPU使用率の閾値超過で発火
  • 安全機構 -- 一定時間後に自動シャットダウン

具体的なパラメータ(閾値やタイミング)はテンプレートの版によって異なる場合があるため、公式ドキュメントの記載を確認してください。

コストはFree Tier対象、または約$0.02程度です。

テンプレートは以下の公式ドキュメントからコピーしてください。

AWS DevOps Agent ユーザーガイド - テスト環境の作成

image.png

今回はテストオプションA:EC2CPU容量テストをしていきます。

しかし公式ドキュメントに載ったCFNテンプレートをそのままデプロイして、
10分ほど待ちましたがCPU負荷が上昇しませんでした。
CFNの中身を確認すると諸々足りなそうだったので、下記のように修正しました。
今回はこちらを使っていきます。

修正したCFNテンプレート
yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS DevOps Agent EC2 CPU Test Stack (Fixed)'
Parameters:
  MyIP:
    Type: String
    Description: Your current IP address for SSH access (find at https://whatismyipaddress.com)
    Default: '0.0.0.0/0'
Resources:
  # -------------------------------------------------------
  # IAM Role + Instance Profile for SSM (Session Manager)
  # -------------------------------------------------------
  TestInstanceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWS-DevOpsAgent-Test-InstanceRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      Tags:
        - Key: Name
          Value: AWS-DevOpsAgent-Test-InstanceRole
        - Key: Purpose
          Value: AWS-DevOpsAgent-Testing

  TestInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: AWS-DevOpsAgent-Test-InstanceProfile
      Roles:
        - !Ref TestInstanceRole

  # -------------------------------------------------------
  # Security Group for SSH access
  # -------------------------------------------------------
  TestSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: AWS-DevOpsAgent-test-sg
      GroupDescription: AWS DevOps Agent 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-DevOpsAgent-Test-SG
        - Key: Purpose
          Value: AWS-DevOpsAgent-Testing

  # -------------------------------------------------------
  # Key Pair for SSH access
  # -------------------------------------------------------
  TestKeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: AWS-DevOpsAgent-test-key
      KeyType: rsa
      Tags:
        - Key: Name
          Value: AWS-DevOpsAgent-Test-Key
        - Key: Purpose
          Value: AWS-DevOpsAgent-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
      IamInstanceProfile: !Ref TestInstanceProfile  # FIX: SSM接続に必要
      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 DevOpsAgent 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 &

          # FIX: 5分後にCPUストレステストを自動実行
          (sleep 300 && /home/ec2-user/cpu-stress-test.sh > /home/ec2-user/stress-test.log 2>&1) &

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

  # -------------------------------------------------------
  # CloudWatch Alarm for CPU utilization
  # -------------------------------------------------------
  CPUAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: AWS-DevOpsAgent-EC2-CPU-Test
      AlarmDescription: AWS-DevOpsAgent 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-DevOpsAgent-test-key.pem" ec2-user@${TestInstance.PublicDnsName}'

CloudFormationコンソールで Create stack > With new resources (standard) を選択し、修正したテンプレートをアップロードします。

スクリーンショット 2026-04-09 184602.png

項目
Stack name AWS-DevOpsAgent-EC2-Test
MyIP デフォルトのまま(SSH全開放になる場合あり。気になる場合は自分のIPに変更)

あとは Next を進め、最後に I acknowledge that AWS CloudFormation might create IAM resources にチェックを入れて Submit します。

3〜5分でステータスが CREATE_COMPLETE になれば準備完了です。Agent Spaceと同じAWSアカウントにデプロイしてください。

image.png

アラーム発火 → 調査開始

EC2インスタンスは起動後、しばらくすると自動でCPUストレステストを開始します。
手動操作は不要です。数分〜10分ほどで、CloudWatch Alarmが In alarm 状態になります。

image.png

Web Appを開いて Incident Response タブを確認します。

アラームが発火すると、DevOps Agentが自動で調査を開始します。

公式ドキュメントでは上記のように説明があるものの、
私の環境では自動で調査が開始されなかったため、今回は調査を開始を自分でクリックしました。
(あえて今回は何の指示も与えませんでした。)

image.png

調査結果には以下の情報が表示されます。

項目 内容
Investigation Journal 調査の時系列ログ。何をどの順で調べたかがわかる
Root Cause Analysis 根本原因の特定結果
Topology 関連リソースの依存関係マップ
Mitigation Steps 推奨される復旧手順

CloudFormationで管理されたリソースは自動的にトポロジーとして認識され、関連リソースを紐付けて調査してくれます。人間がやると数十分かかる初動調査を、数分で終わらせているのは本当に便利だなと思いました。

スクリーンショット 2026-04-09 184735.png
スクリーンショット 2026-04-09 184843.png

クリーンアップ

テスト完了後はリソースを削除します。

CloudFormationコンソールで AWS-DevOpsAgent-EC2-Test を選択し、Delete をクリックします。
ステータスが DELETE_COMPLETE になれば完了です。

Agent Spaceは無料トライアル期間中なら残しておいても課金されません。不要なら同様に削除してください。

まとめ

AWS DevOps Agentを使って、EC2のCPU高負荷インシデントを自動調査させる一連の流れを実施しました。

根本原因の特定や復旧手順の提案まで自動で行ってくれるので、インシデント対応の初動を大幅に短縮できる可能性を感じました。
他にもいろいろな機能があるので試してみたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?