本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建测试环境
本指南提供动手测试,以使用示例架构验证 AWS DevOps 代理的事件响应功能。如果您想在连接生产系统之前测试 DevOps Agent,请使用此补充内容。
先决条件
AWS 具有管理权限的账户
AWS DevOps 使用自动创建代理角色流程创建和配置的 DevOps 代理空间
成本和安全概述
成本保护
EC2 测试:免费(AWS 免费套餐)或 2 小时约 0.02 美元
Lambda 测试:免费(100 万 requests/month 免费套餐)
CloudWatch: 免费(10 个警报,包括基本指标)
预计总成本:完整测试费用为 0.00-0.05 美元
这些测试中的安全功能
自动终止:内置自动关机
符合免费套餐资格:使用最小的实例类型
范围有限:极少的隔离测试资源
易于清理:只需简单的控制台步骤即可删除所有内容
不影响生产:完全独立的测试环境
设置您的 AWS 账户进行测试
重要
基础设施资源需要部署在您创建 DevOps Agent Space 主云帐户的账户中。 AWS 具体区域无关紧要。
登录 AWS 控制台:https://console.aws.amazon.com
确保您使用的是 DevOps 代理空间所在的同一个 AWS 账户
您可以将任何区域用作测试资源
注意
DevOps 代理的主帐户与您正在创建的测试环境资源之间的 1:1 映射简化了测试设置。您可以轻松地将 DevOps 代理空间扩展到包括次要账户,并启用跨账户调查。
选择你的测试
你可以单独运行任一测试,也可以同时运行两者兼而有之:
测试选项 A:EC2 CPU 容量测试
目的:验证 AWS DevOps 代理检测和调查 EC2 性能问题的能力
预计时间:5 分钟设置 + 10 分钟自动执行
难度:全自动(无需手动步骤)
测试选项 B:Lambda 错误率测试
目的:验证 AWS DevOps 代理检测和调查 Lambda 函数错误的能力
预计时间:10 分钟设置 + 2 分钟触发
难度:非常简单
测试选项 A:EC2 CPU 容量测试
步骤 1:部署用于 EC2 测试的 CloudFormation 堆栈
我们将使用它 CloudFormation 来创建我们的测试资源,这样 AWS DevOps Agent 就可以正确地跟踪和调查它们。
导航至 CloudFormation:
在 AWS 控制台中,搜索 “CloudFormation”,然后单击 CloudFormation
点击创建堆栈 > 使用新资源(标准)
上传模板:
新建一个名为的本地文件
AWS-DevOpsAgent-ec2-test.yaml将此 CloudFormation 模板复制并粘贴到文件中:
-
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}'
-
在 CloudFormation 控制台中,选择上传模板文件
单击 “选择文件”
选择
AWS-DevOpsAgent-ec2-test.yaml文件单击下一步
配置堆栈:
堆栈名称:
AWS-DevOpsAgent-EC2-Test参数:
MyIP:保留为默认值
0.0.0.0/0(如果需要,你可以稍后保护它)
单击下一步
配置堆栈选项:
保留默认值,单击 “下一步”
审核和创建:
勾选我确认 AWS CloudFormation 可能会创建 IAM 资源
点击提交
等待完成:
创建堆栈需要 3-5 分钟
状态将从变
CREATE_IN_PROGRESS为CREATE_COMPLETE重要:您的 EC2 实例现在是 AWS DevOpsAgent 可以跟踪的 CloudFormation 堆栈的一部分!
可选:安全 SSH 访问(仅当您计划连接到实例时)
如果您只想运行自动测试,请跳过此步骤
导航到 EC2 安全组:
在 AWS 控制台中,前往 EC2 → 安全组
查找
AWS-DevOpsAgent-test-sg
更新 SSH 规则:
选择安全组 → 入站规则选项卡 → 编辑入站规则
找到 SSH 规则(端口 22)
将来源从更改
0.0.0.0/0为你的 IP:[YOUR_IP]/32从中获取您的 IP https://whatismyipaddress.com
点击保存规则
步骤 2:等待自动执行测试
自动执行测试:
CPU 压力测试将在实例启动 5 分钟后自动开始
无需手动干预-只需等待,测试完全在后台运行
监控测试:
实例会自动启动并准备测试
该脚本将运行 5 分钟并生成 > 70% 的 CPU 使用率
CloudWatch 警报应在总计 8-10 分钟内触发(延迟 5 分钟 + 警报 3-5 分钟)
可选:手动重新运行(用于其他测试):
连接到您的实例:EC2 控制台 → Connect
AWS-DevOpsAgent-Test-Instance→ 会话管理器再次运行 stress 测试:
./cpu-stress-test.sh非常适合多次测试 AWS DevOpsAgent响应
测试选项 B:Lambda 错误率测试
步骤 1:为 Lambda 测试部署 CloudFormation 堆栈
导航至 CloudFormation:
在 AWS 控制台中,前往 CloudFormation
点击创建堆栈 → 使用新资源(标准)
上传模板:
新建一个名为的本地文件
AWS-DevOpsAgent-lambda-test.yaml将此 CloudFormation 模板复制并粘贴到文件中:
-
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'
-
在 CloudFormation 控制台中,选择上传模板文件
单击 “选择文件”
选择
AWS-DevOpsAgent-lambda-test.yaml文件单击下一步
配置堆栈:
堆栈名称:
AWS-DevOpsAgent-Lambda-Test单击下一步
配置堆栈选项:
保留默认值,单击 “下一步”
审核和创建:
勾选我确认 AWS CloudFormation 可能会创建 IAM 资源
点击提交
等待完成:
创建堆栈需要 2-3 分钟
状态将更改为
CREATE_COMPLETE
步骤 2:触发 Lambda 错误
导航到 Lambda 控制台:
前往 AWS Lambda 控制台
找到你的职能
AWS-DevOpsAgent-test-lambda
测试函数:
单击 “测试” 选项卡
点击创建新活动
活动名称:
AWS-DevOpsAgent-test-event使用这个 JSON 有效负载:
-
{ "test": "AWS DevOpsAgent validation", "timestamp": "2024-01-01T00:00:00Z" }
-
单击 “保存”
生成错误:
单击 “测试” 按钮 3 次(每次之间等待 10 秒)
每次测试都会产生一个故意的错误
CloudWatch 警报应在 2-3 分钟内触发
AWS DevOpsAgent现在应该能够通过操作员应用程序中的调查来检测警报,接下来你将设置该应用程序。
验证 AWS DevOps 代理检测
步骤 1:Sanity 检查 CloudWatch 警报(可选)
此步骤用于确保上述测试现在处于警报状态。
对于 EC2 测试:
在 CloudWatch 控制台中,前往 “警报”
开始压力测试后@@ 等待 3-5 分钟
您的闹钟应显示为处于警报状态
如果仍然 “正常”:再等待 2-3 分钟(CloudWatch 指标可能会延迟)
对于 Lambda 测试:
查看
AWS-DevOpsAgent-Lambda-Error-Test警报应在运行测试后的 2-3 分钟内显示警报
步骤 2:开始 AWS DevOps 代理调查
打开你的AWS DevOps 代理 AgentSpace
单击 “管理员访问权限”。这将在新窗口中打开 A DevOps gent Space Web 应用程序
点击屏幕右侧的 “开始调查” 按钮
填写以下表格:
调查详情:描述你想开展的调查。尽可能提供有关调查目标、要探索的领域或相关信息的所有细节。
调查起点:描述您想要开始调查的信息。您可以提及警报、指标、日志片段或其他任何内容,为 DevOps 代理提供工作起点。在这种情况下,请提供您刚刚创建的警报的摘要。
事件发生日期和时间(首选 ISO 8601):: MMZ YYYY-MM-DDTHH
命名您的调查:示例:
Oncall_investigation_1:2025-10-27AWS 事件的@@ 账户 ID
事件发生的地@@ 区
优先级- AWS DevOpsAgent 允许同时进行两次调查。优先级允许您定义调查的执行顺序。
单击 “调查” 启动调查。
点击控制面板中列出的您的调查。您将被带到 “调查详情” 屏幕,您可以在其中查看 DevOps 特工正在采取的详细步骤。
预期结果
EC2 测试结果:
检测 EC2 CPU 警报
确定根本原因:“CPU 压力测试工作负载”
显示时间轴:压力测试 → CPU 峰值 → 警报
提供监控和扩展建议
Lambda 测试结果:
检测 Lambda 错误率峰值
确定根本原因:“故意测试异常”
显示时间轴:函数调用 → 错误 → 警报
为错误处理和监控提供建议
清理说明
清理测试 A(EC2 测试)
自动清理
实例将在 2 小时后自动终止(内置于 CloudFormation 模板中)
手动清理(立即)
删除 CloudFormation 堆栈:
前往 CloudFormation 控制台
选择
AWS-DevOpsAgent-EC2-Test堆栈单击 “删除”
确认删除
这将自动删除所有资源:EC2 实例、安全组、key pair 和 CloudWatch 警报
清理测试 B(Lambda 测试)
删除 CloudFormation 堆栈:
前往 CloudFormation 控制台
选择
AWS-DevOpsAgent-Lambda-Test堆栈单击 “删除”
确认删除
这将自动删除所有资源: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 分钟
测试验证
在以下情况下,您的 AWS DevOp 代理测试成功:
技术验证
调查精度:EC2 测试的结果应正确表明警报是由于 CPU 负载而触发的。Lambda 测试的结果应表明这是故意失败。
时间轴精度:显示的事件顺序正确
推荐质量:提供可行的建议