

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

# 建立測試環境
<a name="getting-started-with-aws-devops-agent-creating-a-test-environment"></a>

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

## 先決條件
<a name="prerequisites"></a>
+ AWS 具有管理存取權的帳戶
+ 使用 Auto create AWS DevOps Agent 角色流程建立和設定的 DevOps Agent Space

## 成本與安全性概觀
<a name="cost-and-safety-overview"></a>

### 成本保護
<a name="cost-protection"></a>
+ **EC2 測試**：免費 (AWS 免費方案） 或 \~$0.02 2 小時
+ **Lambda 測試**：免費 （每月 100 萬個請求免費方案）
+ **CloudWatch**：免費 （包含 10 個警示、基本指標）
+ **預期總成本**：完成測試為 0.00 - 0.05 美元

### 這些測試中的安全功能
<a name="safety-features-in-these-tests"></a>
+ **自動終止**：內建自動關閉
+ 符合**免費方案資格**：使用最小執行個體類型
+ **限制範圍**：最小、隔離的測試資源
+ **輕鬆清除**：移除所有項目的簡單主控台步驟
+ **不影響生產**：完全獨立的測試環境

## 設定 AWS 您的帳戶進行測試
<a name="set-up-your-aws-account-for-testing"></a>

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

1. 登入 AWS 主控台：https：//[https://console.aws.amazon.com](https://console.aws.amazon.com/)

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

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

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

## 選擇您的測試
<a name="choose-your-test"></a>

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

### 測試選項 A：EC2 CPU 容量測試
<a name="test-option-a-ec2-cpu-capacity-test"></a>

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

**預估時間**：5 分鐘設定 \+ 10 分鐘自動執行

**難度**：完全自動化 （不需要手動步驟）

### 測試選項 B：Lambda 錯誤率測試
<a name="test-option-b-lambda-error-rate-test"></a>

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

**預估時間**：10 分鐘設定 \+ 2 分鐘觸發

**難度**：非常簡單

## 測試選項 A：EC2 CPU 容量測試
<a name="test-option-a-ec2-cpu-capacity-test"></a>

### 步驟 1：為 EC2 測試部署 CloudFormation 堆疊
<a name="step-1-deploy-cloudformation-stack-for-ec2-test"></a>

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

1. **導覽至 CloudFormation**：

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

   1. 按一下使用新資源**建立堆疊** > （標準） ****

1. **上傳範本**：

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

   1. 將此 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}'
         ```

   1. 在 CloudFormation 主控台中，選取**上傳範本檔案**

   1. 按一下**選擇檔案**

   1. 選取 `AWS-DevOpsAgent-ec2-test.yaml` 檔案

   1. 按一下**下一步**

1. **設定堆疊**：

   1. **堆疊名稱**：`AWS-DevOpsAgent-EC2-Test`

   1. **參數：**

      1. **MyIP**：保留為預設值 `0.0.0.0/0`（如有需要，您可以稍後加以保護）

   1. 按一下**下一步**

1. **設定堆疊選項**：

   1. 保留預設值，按一下**下一步**

1. **檢閱和建立**：

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

   1. 按一下**提交**

1. **等待完成**：

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

   1. 狀態將從 `CREATE_IN_PROGRESS`變更為`CREATE_COMPLETE`

   1. **重要**：您的 EC2 執行個體現在是 AWS DevOpsAgent 可以追蹤的 CloudFormation 堆疊的一部分！

#### 選用：安全 SSH 存取 （僅當您計劃連線到執行個體時）
<a name="optional-secure-ssh-access-only-if-you-plan-to-connect-to-the-instance"></a>

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

1. **導覽至 EC2 安全群組**：

   1. 在 AWS 主控台中，前往 **EC2** → **安全群組**

   1. 尋找`AWS-DevOpsAgent-test-sg`

1. **更新 SSH 規則**：

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

   1. 尋找 SSH 規則 （連接埠 22)

   1. 將來源從 `0.0.0.0/0`變更為您的 IP：`[YOUR_IP]/32`

   1. 從 [https://whatismyipaddress.com](https://whatismyipaddress.com/)：// 取得您的 IP

   1. 按一下**儲存規則**

### 步驟 2：等待自動測試執行
<a name="step-2-wait-for-automatic-test-execution"></a>

1. **自動測試執行**：
   + CPU 壓力測試會在執行個體啟動後 **5 分鐘自動啟動** 
   + 不需要手動介入 - 只需等待，測試會在背景中完全執行

1. **監控測試**：
   + 執行個體會自動開機並準備測試
   + 指令碼將執行 5 分鐘，並產生 >70% 的 CPU 用量
   + CloudWatch 警示應在總計 8-10 分鐘內觸發 (5 分鐘延遲 \+ 3-5 分鐘警示）

1. **選用：手動重新執行** （用於其他測試）：
   + 連線至您的執行個體：EC2 主控台 →`AWS-DevOpsAgent-Test-Instance`→ **Connect** → **Session Manager**
   + 再次執行壓力測試：`./cpu-stress-test.sh`
   + 非常適合多次測試 AWS DevOpsAgent 的回應

## 測試選項 B：Lambda 錯誤率測試
<a name="test-option-b-lambda-error-rate-test"></a>

### 步驟 1：為 Lambda 測試部署 CloudFormation 堆疊
<a name="step-1-deploy-cloudformation-stack-for-lambda-test"></a>

1. **導覽至 CloudFormation**：

   1. 在 AWS 主控台中，前往 **CloudFormation**

   1. 按一下**建立堆疊** → **使用新資源 （標準）**

1. **上傳範本**：

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

   1. 將此 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'
         ```

   1. 在 CloudFormation 主控台中，選取**上傳範本檔案**

   1. 按一下**選擇檔案**

   1. 選取 `AWS-DevOpsAgent-lambda-test.yaml` 檔案

   1. 按一下**下一步**

1. **設定堆疊**：

   1. **堆疊名稱**：`AWS-DevOpsAgent-Lambda-Test`

   1. 按一下**下一步**

1. **設定堆疊選項**：

   1. 保留預設值，按一下**下一步**

1. **檢閱和建立**：

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

   1. 按一下**提交**

1. **等待完成**：

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

   1. 狀態將變更為`CREATE_COMPLETE`

### 步驟 2：觸發 Lambda 錯誤
<a name="step-2-trigger-lambda-errors"></a>

1. **導覽至 Lambda 主控台**：

   1. 前往 **AWS Lambda** 主控台

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

1. **測試 函數**：

   1. 按一下**測試**索引標籤

   1. 按一下**建立新事件**

   1. **事件名稱**：`AWS-DevOpsAgent-test-event`

   1. 使用此 JSON 承載：

      1. 

         ```
         {
         "test": "AWS DevOpsAgent validation",
         "timestamp": "2024-01-01T00:00:00Z"
         }
         ```

   1. 按一下**儲存**

1. **產生錯誤**：

   1. 按一下**測試**按鈕 3 次 （每次等待 10 秒）

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

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

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

## Validate AWS DevOps 代理程式偵測
<a name="validate-aws-devops-agent-detection"></a>

### 步驟 1：健全檢查 CloudWatch 警示 （選用）
<a name="step-1-sanity-check-cloudwatch-alarms-optional"></a>

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

**對於 EC2 測試：**
+ 在 CloudWatch 主控台中，前往**警示**
+ 在開始壓力測試後**等待 3-5 分鐘** 
+ 您的警示應顯示**為警示**狀態
+ **如果仍然「確定」**：再等待 2-3 分鐘 (CloudWatch 指標可能會延遲）

**對於 Lambda 測試：**
+ 檢查`AWS-DevOpsAgent-Lambda-Error-Test`警示
+ 應在執行測試後 2-3 分鐘內顯示**警示** 

### 步驟 2：開始 a AWS DevOps 代理程式調查
<a name="step-2-start-a-aws-devops-agent-investigation"></a>

1. 開啟 **AWS DevOps AgentSpace**

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

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

1. 填寫下列表單：

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

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

   1. **事件發生的日期和時間** （偏好 ISO 8601)：YYYY-MM-DDTHH：MMZ

   1. **為您的調查命名：**範例： `Oncall_investigation_1:2025-10-27`

   1. 事件**AWS 的帳戶 ID** 

   1. 事件發生**的區域 ** 

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

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

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

### 預期結果
<a name="expected-results"></a>

#### EC2 測試結果：
<a name="ec2-test-results"></a>
+ 偵測 EC2 CPU 警示
+ 識別根本原因：「CPU 壓力測試工作負載」
+ 顯示時間軸：壓力測試 → CPU 峰值 → 警示
+ 提供監控和擴展的建議

**Lambda 測試結果：**
+ 偵測 Lambda 錯誤率峰值
+ 識別根本原因：「刻意測試例外狀況」
+ 顯示時間軸：函數調用 → 錯誤 → 警示
+ 提供錯誤處理和監控的建議

## 清除指示
<a name="cleanup-instructions"></a>

### 清除測試 A (EC2 測試）
<a name="cleanup-test-a-ec2-test"></a>

#### 自動清除
<a name="automatic-cleanup"></a>
+ 執行個體會在 2 小時後自動終止 （建置在 CloudFormation 範本中）

#### 手動清除 （立即）
<a name="manual-cleanup-immediate"></a>

1. **刪除 CloudFormation 堆疊**：

   1. 前往 CloudFormation 主控台

   1. 選取`AWS-DevOpsAgent-EC2-Test`堆疊

   1. 按一下**刪除**

   1. 確認刪除

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

### 清除測試 B (Lambda 測試）
<a name="cleanup-test-b-lambda-test"></a>

1. **刪除 CloudFormation 堆疊**：

   1. 前往 CloudFormation 主控台

   1. 選取`AWS-DevOpsAgent-Lambda-Test`堆疊

   1. 按一下**刪除**

   1. 確認刪除

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

## 疑難排解
<a name="troubleshooting"></a>

### 常見問題
<a name="common-issues"></a>

#### 「無法連線至 EC2 執行個體」
<a name="cant-connect-to-ec2-instance"></a>
+ **檢查安全群組**：確定您的 IP 已開啟 SSH （連接埠 22)
+ **檢查金鑰許可**：執行`chmod 400 AWS-DevOpsAgent-test-key.pem`
+ **驗證公有 IP**：執行個體必須指派公有 IP
+ **等待執行個體**：確保執行個體處於「執行中」狀態

#### 「警示未觸發」
<a name="alarm-not-triggering"></a>
+ **等待指標**：CloudWatch 指標可能需要 2-5 分鐘才會顯示
+ **檢查 CPU 負載**：SSH 到執行個體並執行 `top`以驗證 CPU >70%
+ **驗證壓力測試**：執行 `ps aux | grep yes`以查看載入程序是否正在執行
+ **延長等待**時間：第一個警示觸發有時最多需要 7-8 分鐘

## 測試驗證
<a name="test-validation"></a>

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

### 技術驗證
<a name="technical-validation"></a>
+ **調查準確性**：EC2 測試的結果應正確指出警示因 CPU 負載而觸發。Lambda 測試的結果應指出這是刻意失敗。
+ **時間軸準確度**：顯示的正確事件順序
+ **建議品質**：提供可行的建議