DatomsDBS AWS EC2 自动化测试指南
版本: 1.0
日期: 2024年12月28日
目标: 在AWS EC2上自动化部署和测试DatomsDBS系统
📖 概述
本指南提供了两个脚本来在AWS EC2实例上自动化部署和测试DatomsDBS系统:
- 完整版脚本 (
aws_ec2_test_deployment.sh) - 功能全面,包含详细配置 - 简化版脚本 (
simple_aws_test.sh) - 快速简单,基础功能
🎯 脚本功能
完整版功能
- ✅ 自动创建和管理SSH密钥对
- ✅ 创建专用安全组和规则配置
- ✅ 启动t3.xlarge EC2实例 (ap-southeast-1)
- ✅ 自动安装Node.js、Docker等依赖
- ✅ 克隆DatomsDBS项目并运行完整测试套件
- ✅ 生成详细测试报告
- ✅ 智能资源清理 (可选保留实例)
- ✅ 完整的错误处理和回滚
简化版功能
- ✅ 快速启动EC2实例
- ✅ 基础环境配置
- ✅ 项目克隆和基础测试
- ✅ 显示访问信息和清理命令
🚀 快速开始
前置要求
必须安装:
- AWS CLI (v2.0+)
- SSH客户端
- 有效的AWS账户和配置
AWS权限要求:
- EC2实例管理 (RunInstances, TerminateInstances, DescribeInstances)
- 密钥对管理 (CreateKeyPair, DeleteKeyPair)
- 安全组管理 (CreateSecurityGroup, AuthorizeSecurityGroupIngress)
- VPC访问 (DescribeVpcs)
1. AWS CLI配置
# 配置AWS CLI (如果未配置)
aws configure
# 验证配置
aws sts get-caller-identity
2. 简化版快速测试 ⚡
# 基础用法 (推荐用于快速验证)
./scripts/simple_aws_test.sh https://github.com/yourusername/datomsDBS.git
# 脚本将自动:
# 1. 创建SSH密钥对
# 2. 启动EC2实例
# 3. 安装依赖环境
# 4. 克隆项目并测试
# 5. 显示访问信息
预期输出:
🚀 启动AWS EC2测试...
区域: ap-southeast-1
实例类型: t3.xlarge
项目: https://github.com/yourusername/datomsDBS.git
创建SSH密钥...
启动EC2实例...
实例ID: i-1234567890abcdef0
等待实例启动...
实例公网IP: 54.XXX.XXX.XXX
等待SSH服务...
SSH连接就绪
部署DatomsDBS...
✅ 测试完成!
🎉 部署完成!
访问地址: http://54.XXX.XXX.XXX:9000
SSH连接: ssh -i datomsdbs-test-key-1703755200.pem ubuntu@54.XXX.XXX.XXX
清理资源:
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 --region ap-southeast-1
aws ec2 delete-key-pair --key-name datomsdbs-test-key-1703755200 --region ap-southeast-1
3. 完整版全面测试 🔧
# 运行完整测试套件
./scripts/aws_ec2_test_deployment.sh
# 脚本会交互式询问:
# 1. 是否继续执行 (确认费用)
# 2. Git仓库URL (如果未预配置)
# 3. 是否保留实例运行
# 4. 是否删除SSH密钥对
交互式流程:
==========================================
DatomsDBS AWS EC2 自动化测试
==========================================
此脚本将在AWS EC2上自动部署和测试DatomsDBS
配置信息:
区域: ap-southeast-1
实例类型: t3.xlarge
AMI: ami-047126e50991d067b
⚠️ 注意: 此脚本会产生AWS费用!
是否继续执行? (y/N): y
请输入DatomsDBS项目的Git URL: https://github.com/yourusername/datomsDBS.git
[STEP] 检查前置条件...
[SUCCESS] AWS CLI 已安装: aws-cli/2.x.x
[SUCCESS] AWS 认证检查通过
[SUCCESS] 前置条件检查完成
[STEP] 检查或创建SSH密钥对...
[INFO] 创建新的SSH密钥对...
[SUCCESS] SSH密钥对创建完成: datomsdbs-test-key.pem
[STEP] 创建安全组...
[INFO] 使用VPC: vpc-12345678
[INFO] 创建新安全组...
[INFO] 配置安全组规则...
[SUCCESS] 安全组创建完成: sg-abcdef123
[STEP] 启动EC2实例...
[SUCCESS] EC2实例启动成功: i-1234567890abcdef0
[INFO] 等待实例启动中...
[SUCCESS] 实例运行中,公网IP: 54.XXX.XXX.XXX
[INFO] 等待SSH服务启动...
[SUCCESS] SSH连接就绪
[STEP] 开始部署和测试DatomsDBS...
[INFO] 上传设置脚本到EC2实例...
[INFO] 在EC2实例上执行部署和测试...
[REMOTE-INFO] 等待系统初始化完成...
[REMOTE-SUCCESS] 系统初始化完成
[REMOTE-INFO] 验证Node.js安装...
[REMOTE-INFO] 克隆DatomsDBS项目...
[REMOTE-INFO] 运行DatomsDBS设置脚本...
[REMOTE-INFO] 启动DatomsDBS服务...
[REMOTE-INFO] 运行健康检查...
[REMOTE-INFO] 运行测试套件...
[REMOTE-SUCCESS] 单元测试通过
[REMOTE-SUCCESS] 集成测试通过
[REMOTE-INFO] 运行Agent测试...
[REMOTE-SUCCESS] Agent测试通过
[REMOTE-INFO] 生成测试报告...
[REMOTE-SUCCESS] 测试完成!查看报告: ~/test_report.txt
[INFO] 下载测试报告...
[SUCCESS] 部署和测试完成!
==========================================
🎉 DatomsDBS AWS EC2 测试部署完成!
==========================================
🌐 访问地址:
主服务: http://54.XXX.XXX.XXX:9000
管理界面: http://54.XXX.XXX.XXX:9000/admin
👤 默认管理员账户:
用户名: admin
密码: admin123
🔧 SSH连接命令:
ssh -i datomsdbs-test-key.pem ubuntu@54.XXX.XXX.XXX
是否保持EC2实例运行以便进一步测试? (y/N): N
[STEP] 清理AWS资源...
[INFO] 终止EC2实例: i-1234567890abcdef0
[INFO] 等待实例终止...
[SUCCESS] 实例已终止
[INFO] 删除安全组: sg-abcdef123
[SUCCESS] 安全组已删除
是否删除SSH密钥对? (y/N): y
[SUCCESS] SSH密钥对已删除
[SUCCESS] 清理完成
[SUCCESS] 🎉 DatomsDBS AWS EC2 自动化测试完成!
📊 测试报告
完整版脚本会生成详细的测试报告,示例内容:
DatomsDBS AWS EC2 测试报告
============================
测试时间: 2024-12-28 14:30:00
实例类型: t3.xlarge
AWS区域: ap-southeast-1
Node.js版本: v18.19.0
服务状态: {"status":"ok","version":"0.1.0","timestamp":"2024-12-28T06:30:00.000Z"}
测试结果:
- 服务启动: ✓
- 健康检查: ✓
- 单元测试: ✓
- 集成测试: ✓
- Agent测试: ✓
访问地址:
- 主服务: http://54.XXX.XXX.XXX:9000
- 管理界面: http://54.XXX.XXX.XXX:9000/admin
默认管理员账户: admin/admin123
💰 费用估算
t3.xlarge实例费用 (ap-southeast-1):
- 按需价格: ~$0.1856/小时
- 完整测试时间: ~30-45分钟
- 估计费用: $0.10-0.35
附加费用:
- 网络流量: 忽略不计
- 存储: 包含在实例费用中
节省建议:
- 使用简化版脚本可减少测试时间
- 及时删除实例避免持续计费
- 考虑使用Spot实例 (需修改脚本)
🔧 自定义配置
修改实例配置
编辑脚本中的配置变量:
# 修改实例类型
INSTANCE_TYPE="t3.large" # 更小的实例 (节省费用)
INSTANCE_TYPE="t3.2xlarge" # 更大的实例 (更快执行)
# 修改AWS区域
AWS_REGION="us-east-1" # 美国东部
AWS_REGION="eu-west-1" # 欧洲西部
# 修改AMI (需要对应区域的Ubuntu 22.04 AMI)
AMI_ID="ami-0c02fb55956c7d316" # us-east-1 Ubuntu 22.04
修改测试配置
在远程脚本中自定义测试行为:
# 跳过某些测试
# npm test # 注释掉此行跳过单元测试
# 添加自定义测试
echo "运行自定义验证..."
curl -f http://localhost:9000/api/custom-endpoint
# 修改等待时间
sleep 60 # 增加服务启动等待时间
🛠️ 故障排除
常见问题
1. AWS CLI未配置
错误: Unable to locate credentials
解决: aws configure
2. 权限不足
错误: User: arn:aws:iam::account:user/username is not authorized to perform: ec2:RunInstances
解决: 检查IAM权限,确保有EC2管理权限
3. 实例启动失败
错误: Instance failed to launch
解决:
- 检查配额限制
- 确认AMI在指定区域可用
- 验证安全组配置
4. SSH连接超时
错误: SSH connection timeout
解决:
- 检查安全组是否允许22端口
- 确认实例已完全启动
- 验证密钥文件权限 (chmod 400)
5. Git克隆失败
错误: Repository not found
解决:
- 确认Git URL正确
- 检查仓库访问权限
- 使用HTTPS而非SSH URL
调试选项
启用详细日志
# 在脚本开头添加
set -x # 显示执行的每个命令
# 或运行时启用
bash -x ./scripts/aws_ec2_test_deployment.sh
手动连接调试
# 获取实例信息
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 --region ap-southeast-1
# 手动SSH连接
ssh -i datomsdbs-test-key.pem -v ubuntu@54.XXX.XXX.XXX
# 查看用户数据日志
sudo cat /var/log/cloud-init-output.log
保留实例进行调试
选择保持实例运行,然后手动调试:
# SSH连接到实例
ssh -i datomsdbs-test-key.pem ubuntu@54.XXX.XXX.XXX
# 查看DatomsDBS日志
cd ~/datomsDBS
tail -f server.log
# 手动运行测试
npm test
npm run test:integration
# 检查服务状态
curl http://localhost:9000/api/health
🔐 安全注意事项
SSH密钥管理
- 脚本生成的私钥文件包含敏感信息
- 使用后应安全删除:
shred -u *.pem - 生产环境建议使用预配置的密钥对
安全组配置
- 默认配置开放0.0.0.0/0访问
- 生产环境应限制IP范围
- 测试完成后及时删除安全组
实例访问
- 默认管理员密码为admin123
- 生产部署前必须修改默认密码
- 建议启用HTTPS和更强认证
📚 相关文档
🤝 支持和反馈
如有问题或建议,请:
- 检查本文档的故障排除部分
- 查看AWS CloudTrail日志
- 提交Issue到项目仓库
- 联系开发团队
此指南随项目更新,建议定期查看最新版本