建立測試環境 - AWS DevOps 代理程式

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立測試環境

本指南提供實作測試,以使用範例架構來驗證 AWS DevOps 代理程式的事件回應功能。如果您想要在連接生產系統之前測試 DevOps Agent,請使用此增補。

先決條件

  • AWS 具有管理存取權的帳戶

  • 使用 Auto create AWS DevOps Agent 角色流程建立和設定的 DevOps Agent Space

成本與安全性概觀

成本保護

  • EC2 測試:免費 (AWS 免費方案) 或 ~$0.02 2 小時

  • Lambda 測試:免費 (每月 100 萬個請求免費方案)

  • CloudWatch:免費 (包含 10 個警示、基本指標)

  • 預期總成本:完成測試為 0.00 - 0.05 美元

這些測試中的安全功能

  • 自動終止:內建自動關閉

  • 符合免費方案資格:使用最小執行個體類型

  • 限制範圍:最小、隔離的測試資源

  • 輕鬆清除:移除所有項目的簡單主控台步驟

  • 不影響生產:完全獨立的測試環境

設定 AWS 您的帳戶進行測試

重要

基礎設施資源需要部署在您 AWS 建立 DevOps Agent Space 主要雲端帳戶的帳戶。特定區域並不重要。

  1. 登入 AWS 主控台:https://https://console.aws.amazon.com

  2. 確定您在 DevOps Agent Space 所在的相同 AWS 帳戶中工作

  3. 您可以針對測試資源使用任何區域

注意

您的 DevOps 代理程式主要帳戶與您建立的測試環境資源之間的 1:1 映射可簡化測試設定。您可以輕鬆擴展 DevOps Agent Space,以包含次要帳戶並啟用跨帳戶調查。

選擇您的測試

您可以獨立執行測試或同時執行兩者:

測試選項 A:EC2 CPU 容量測試

目的:Verify AWS DevOps 代理程式偵測和調查 EC2 效能問題的能力

預估時間:5 分鐘設定 + 10 分鐘自動執行

難度:完全自動化 (不需要手動步驟)

測試選項 B:Lambda 錯誤率測試

目的:Verify AWS DevOps 代理程式偵測和調查 Lambda 函數錯誤的能力

預估時間:10 分鐘設定 + 2 分鐘觸發

難度:非常簡單

測試選項 A:EC2 CPU 容量測試

步驟 1:為 EC2 測試部署 CloudFormation 堆疊

我們將使用 CloudFormation 來建立測試資源,這可讓 AWS DevOps 代理程式正確追蹤和調查這些資源。

  1. 導覽至 CloudFormation

    1. 在 AWS 主控台中搜尋「CloudFormation」,然後按一下 CloudFormation

    2. 按一下使用新資源建立堆疊 > (標準)

  2. 上傳範本

    1. 建立新的本機檔案,名為AWS-DevOpsAgent-ec2-test.yaml

    2. 將此 CloudFormation 範本複製並貼到 檔案中:

      1. AWSTemplateFormatVersion: '2010-09-09' Description: 'AWS DevOps Agent 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-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 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 & 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}'
    3. 在 CloudFormation 主控台中,選取上傳範本檔案

    4. 按一下選擇檔案

    5. 選取 AWS-DevOpsAgent-ec2-test.yaml 檔案

    6. 按一下下一步

  3. 設定堆疊

    1. 堆疊名稱AWS-DevOpsAgent-EC2-Test

    2. 參數:

      1. MyIP:保留為預設值 0.0.0.0/0(如有需要,您可以稍後加以保護)

    3. 按一下下一步

  4. 設定堆疊選項

    1. 保留預設值,按一下下一步

  5. 檢閱和建立

    1. 檢查 我確認 AWS CloudFormation 可能會建立 IAM 資源

    2. 按一下提交

  6. 等待完成

    1. 堆疊建立需要 3-5 分鐘

    2. 狀態將從 CREATE_IN_PROGRESS變更為CREATE_COMPLETE

    3. 重要:您的 EC2 執行個體現在是 AWS DevOpsAgent 可以追蹤的 CloudFormation 堆疊的一部分!

選用:安全 SSH 存取 (僅當您計劃連線到執行個體時)

如果您只想執行自動化測試,請略過此步驟

  1. 導覽至 EC2 安全群組

    1. 在 AWS 主控台中,前往 EC2安全群組

    2. 尋找AWS-DevOpsAgent-test-sg

  2. 更新 SSH 規則

    1. 選取安全群組 → 傳入規則索引標籤 → 編輯傳入規則

    2. 尋找 SSH 規則 (連接埠 22)

    3. 將來源從 0.0.0.0/0變更為您的 IP:[YOUR_IP]/32

    4. https://whatismyipaddress.com:// 取得您的 IP

    5. 按一下儲存規則

步驟 2:等待自動測試執行

  1. 自動測試執行

    • CPU 壓力測試會在執行個體啟動後 5 分鐘自動啟動

    • 不需要手動介入 - 只需等待,測試會在背景中完全執行

  2. 監控測試

    • 執行個體會自動開機並準備測試

    • 指令碼將執行 5 分鐘,並產生 >70% 的 CPU 用量

    • CloudWatch 警示應在總計 8-10 分鐘內觸發 (5 分鐘延遲 + 3-5 分鐘警示)

  3. 選用:手動重新執行 (用於其他測試):

    • 連線至您的執行個體:EC2 主控台 →AWS-DevOpsAgent-Test-InstanceConnectSession Manager

    • 再次執行壓力測試:./cpu-stress-test.sh

    • 非常適合多次測試 AWS DevOpsAgent 的回應

測試選項 B:Lambda 錯誤率測試

步驟 1:為 Lambda 測試部署 CloudFormation 堆疊

  1. 導覽至 CloudFormation

    1. 在 AWS 主控台中,前往 CloudFormation

    2. 按一下建立堆疊使用新資源 (標準)

  2. 上傳範本

    1. 建立新的本機檔案,名為AWS-DevOpsAgent-lambda-test.yaml

    2. 將此 CloudFormation 範本複製並貼到 檔案中:

      1. AWSTemplateFormatVersion: '2010-09-09' Description: 'AWS DevOpsAgent Lambda Error Test Stack' Resources: # IAM Role for Lambda function 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 Tags: - Key: Name Value: AWS-DevOpsAgent-Lambda-Test-Role - Key: Purpose Value: AWS-DevOpsAgent-Testing # Lambda function that generates errors 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 import time from datetime import datetime def lambda_handler(event, context): print(f"AWS DevOpsAgent 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 DevOpsAgent 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 DevOpsAgent Test Error: {error_message}") Description: AWS DevOpsAgent beta test function - intentionally generates errors Timeout: 30 Tags: - Key: Name Value: AWS-DevOpsAgent-Test-Lambda - Key: Purpose Value: AWS-DevOpsAgent-Testing # CloudWatch Alarm for Lambda errors 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 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 DevOpsAgent validation\"}" response.json'
    3. 在 CloudFormation 主控台中,選取上傳範本檔案

    4. 按一下選擇檔案

    5. 選取 AWS-DevOpsAgent-lambda-test.yaml 檔案

    6. 按一下下一步

  3. 設定堆疊

    1. 堆疊名稱AWS-DevOpsAgent-Lambda-Test

    2. 按一下下一步

  4. 設定堆疊選項

    1. 保留預設值,按一下下一步

  5. 檢閱和建立

    1. 檢查 我確認 AWS CloudFormation 可能會建立 IAM 資源

    2. 按一下提交

  6. 等待完成

    1. 堆疊建立需要 2-3 分鐘

    2. 狀態將變更為CREATE_COMPLETE

步驟 2:觸發 Lambda 錯誤

  1. 導覽至 Lambda 主控台

    1. 前往 AWS Lambda 主控台

    2. 尋找您的 函數AWS-DevOpsAgent-test-lambda

  2. 測試 函數

    1. 按一下測試索引標籤

    2. 按一下建立新事件

    3. 事件名稱AWS-DevOpsAgent-test-event

    4. 使用此 JSON 承載:

      1. { "test": "AWS DevOpsAgent validation", "timestamp": "2024-01-01T00:00:00Z" }
    5. 按一下儲存

  3. 產生錯誤

    1. 按一下測試按鈕 3 次 (每次等待 10 秒)

    2. 每個測試都會產生故意錯誤

    3. CloudWatch 警示應在 2-3 分鐘內觸發

    4. AWS DevOpsAgent 現在應該能夠使用接下來要設定的運算子應用程式中調查來偵測警示。

Validate AWS DevOps 代理程式偵測

步驟 1:健全檢查 CloudWatch 警示 (選用)

此步驟用於確保上述測試現在處於警示狀態。

對於 EC2 測試:

  • 在 CloudWatch 主控台中,前往警示

  • 在開始壓力測試後等待 3-5 分鐘

  • 您的警示應顯示為警示狀態

  • 如果仍然「確定」:再等待 2-3 分鐘 (CloudWatch 指標可能會延遲)

對於 Lambda 測試:

  • 檢查AWS-DevOpsAgent-Lambda-Error-Test警示

  • 應在執行測試後 2-3 分鐘內顯示警示

步驟 2:開始 a AWS DevOps 代理程式調查

  1. 開啟 AWS DevOps AgentSpace

  2. 按一下管理員存取權。這將在新視窗中開啟 DevOps Agent Space Web 應用程式

  3. 按一下畫面右側的開始調查按鈕

  4. 填寫下列表單:

    1. 調查詳細資訊:描述您要執行的調查。包含有關調查目標、要探索的領域或相關資訊的任何詳細資訊。

    2. 調查起點:描述您要從中開始調查的資訊。您可以提及警示、指標、日誌程式碼片段或任何其他項目,以便讓 DevOps 代理程式開始運作。在此情況下,請提供您剛建立的警示摘要。

    3. 事件發生的日期和時間 (偏好 ISO 8601):YYYY-MM-DDTHH:MMZ

    4. 為您的調查命名:範例: Oncall_investigation_1:2025-10-27

    5. 事件AWS 的帳戶 ID

    6. 事件發生的區域

    7. Priority - AWS DevOpsAgent 允許進行兩次並行調查。Priority 可讓您定義調查的執行順序。

  5. 按一下調查以啟動調查。

  6. 按一下儀表板中列出的調查。系統會將您導向至調查詳細資訊畫面,您可以在其中檢視 DevOps 代理程式正在採取的精細步驟。

預期結果

EC2 測試結果:

  • 偵測 EC2 CPU 警示

  • 識別根本原因:「CPU 壓力測試工作負載」

  • 顯示時間軸:壓力測試 → CPU 峰值 → 警示

  • 提供監控和擴展的建議

Lambda 測試結果:

  • 偵測 Lambda 錯誤率峰值

  • 識別根本原因:「刻意測試例外狀況」

  • 顯示時間軸:函數調用 → 錯誤 → 警示

  • 提供錯誤處理和監控的建議

清除指示

清除測試 A (EC2 測試)

自動清除

  • 執行個體會在 2 小時後自動終止 (建置在 CloudFormation 範本中)

手動清除 (立即)

  1. 刪除 CloudFormation 堆疊

    1. 前往 CloudFormation 主控台

    2. 選取AWS-DevOpsAgent-EC2-Test堆疊

    3. 按一下刪除

    4. 確認刪除

    5. 這會自動刪除所有資源:EC2 執行個體、安全群組、金鑰對和 CloudWatch 警示

清除測試 B (Lambda 測試)

  1. 刪除 CloudFormation 堆疊

    1. 前往 CloudFormation 主控台

    2. 選取AWS-DevOpsAgent-Lambda-Test堆疊

    3. 按一下刪除

    4. 確認刪除

    5. 這會自動刪除所有資源:Lambda 函數、IAM 角色和 CloudWatch 警示

疑難排解

常見問題

「無法連線至 EC2 執行個體」

  • 檢查安全群組:確定您的 IP 已開啟 SSH (連接埠 22)

  • 檢查金鑰許可:執行chmod 400 AWS-DevOpsAgent-test-key.pem

  • 驗證公有 IP:執行個體必須指派公有 IP

  • 等待執行個體:確保執行個體處於「執行中」狀態

「警示未觸發」

  • 等待指標:CloudWatch 指標可能需要 2-5 分鐘才會顯示

  • 檢查 CPU 負載:SSH 到執行個體並執行 top以驗證 CPU >70%

  • 驗證壓力測試:執行 ps aux | grep yes以查看載入程序是否正在執行

  • 延長等待時間:第一個警示觸發有時最多需要 7-8 分鐘

測試驗證

Your AWS DevOp 代理程式測試在以下情況成功:

技術驗證

  • 調查準確性:EC2 測試的結果應正確指出警示因 CPU 負載而觸發。Lambda 測試的結果應指出這是刻意失敗。

  • 時間軸準確度:顯示的正確事件順序

  • 建議品質:提供可行的建議