用途
deploy-ec2-aws 是一个用于在 AWS 上部署和管理 EC2 节点的技能,底层使用 Terraform。它会先生成一个自包含的 Terraform 项目,然后按指定的节点组名称和数量在 AWS 上创建 EC2 实例。
主要能力
- 支持一个或多个命名节点组,每组需提供唯一名称和正整数数量。
- 节点规格格式为 NAME=COUNT[:CPU:MEMORY_GIB],例如 api=2 或 worker=3:4:8。CPU 和内存为最低要求,解析器可能选择略大的 x86_64 实例类型;不会静默修改显式指定的数量。
- 未提供 CPU 和内存时使用默认值:2 vCPU、4 GiB 内存,解析为 t3.medium。
- 默认创建专用 VPC 和公有子网,添加互联网网关和默认路由。
- 节点间允许全部协议通信(同一部署安全组内),仅对 TCP 22 端口按 ssh_cidr 开放公网入站。
- 为每个节点分配一个弹性 IP,并输出公网 IP、私网 IP、实例 ID、实例类型和 SSH 命令,按节点名称分组。
- 节点组名称用作 EC2 Name 标签;单节点组使用组名,多节点组追加零填充序号,如 api-01、api-02。EC2 名称不添加部署命名空间前缀。
使用方式
- 解析技能目录后运行脚手架脚本,例如:
python3 <skill-dir>/scripts/scaffold_project.py \
--node api=2 \
--node worker=3:4:8
- 可显式传入部署设置:
python3 <skill-dir>/scripts/scaffold_project.py \
--target "$HOME/test/ec2-aws-demo" \
--namespace demo \
--aws-profile default \
--region us-west-2 \
--ssh-cidr 203.0.113.10/32 \
--public-key "$HOME/.ssh/id_ed25519.pub" \
--node api=2:2:4 \
--node worker=3:4:8
- 省略 --target 时,使用脚本打印的绝对路径,并在该路径下继续所有 Terraform 操作,同时参考生成的 README.md。
默认值包括:命名空间 ec2-nodes-<YYMMDDHHMM>(本地时间)、项目路径 $HOME/test/ec2-aws-<namespace>、AWS profile 为 default、区域 us-west-2、根卷 20 GiB 加密 GP3、SSH 来源为检测到的操作员公网 IPv4 地址 /32、AMI 为通过区域 AWS SSM 公共参数解析的最新 Amazon Linux 2023 x86_64 镜像。
适用场景
适合需要快速在 AWS 上搭建一组可 SSH 访问、带弹性 IP 的 EC2 节点的场景,例如临时测试环境、开发环境或需要按组管理节点的部署。
限制与安全要求
- 运行实时 AWS 或 Terraform 命令前,需阅读 references/deployment.md。
- 在 terraform init、plan、apply 或 destroy 前验证 AWS 身份,必要时刷新 AWS SSO 登录。
- 除非用户明确要求部署或清理,否则不要运行 terraform apply 或 terraform destroy。
- 建议保存 Terraform plan 并在 apply 前审查。
- 需提醒 AWS 对公网 IPv4 地址(包括已附加的弹性 IP)收费。
- 不要打印 Terraform state、凭据或私钥材料。
- 除非用户明确要求替换本地项目,否则不要对包含 state 的部署目录使用 --force。
- apply 后要求无变更的 Terraform plan,若出现未请求的 destroy 或替换则停止。
- 需在每个节点上测试 SSH,而不仅是每组一个代表节点。
- apply 后报告绝对部署路径、生成的 README.md、公网/私网 IP 输出、解析的实例类型和 SSH 命令。
- 如需额外公网端口,应添加满足请求的最窄安全组规则,并要求显式来源 CIDR,不得默认将应用端口开放为 0.0.0.0/0。