Skip to main content

DatomsDBS AWS EC2 自动化测试指南

版本: 1.0
日期: 2024年12月28日
目标: 在AWS EC2上自动化部署和测试DatomsDBS系统


📖 概述

本指南提供了两个脚本来在AWS EC2实例上自动化部署和测试DatomsDBS系统:

  1. 完整版脚本 (aws_ec2_test_deployment.sh) - 功能全面,包含详细配置
  2. 简化版脚本 (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和更强认证

📚 相关文档


🤝 支持和反馈

如有问题或建议,请:

  1. 检查本文档的故障排除部分
  2. 查看AWS CloudTrail日志
  3. 提交Issue到项目仓库
  4. 联系开发团队

此指南随项目更新,建议定期查看最新版本