AWSInfra · AWS 部署平台

面向 AWS/EKS 的项目化基础设施和应用交付平台。平台使用 Go 管理 Terraform、AWS CLI、kubectl 与 Helm,通过 Vue 3 + Arco Design Vue 提供项目、环境、权限、部署、日志、资源访问和 CI/CD 管理界面。
当前是首个公开版本。请先在独立 AWS 测试账号验证,再用于生产。Terraform 和 AWS 托管服务会产生实际费用。
能做什么
- 以项目为安全边界管理
dev、test、uat、prod 环境。
- 两阶段交付:AWS 基础资源/EKS,以及 Kubernetes 组件/TLS/域名/告警。
- 新建 VPC 或接入已有 VPC、EKS,支持多节点组、调度隔离和自动扩缩容。
- 创建 RDS/Aurora/DocumentDB、ElastiCache、MSK、Amazon MQ、ECR 等 AWS 服务。
- 安装 Higress、Jenkins、Argo CD、Prometheus、Grafana、Loki、Tempo、EFK、ClickVisual、OpenTelemetry、Consul、etcd 等组件。
- 项目级 AWS 凭据、用户权限、审计、任务互斥、Terraform State、失败诊断和安全重试。
- GitLab/Jenkins 项目接入、Dockerfile/Jenkinsfile/部署清单管理、构建日志与发布。
- EKS Ingress、TLS、域名转发、资源访问和应用拓扑统一管理。
架构
flowchart LR
UI["Vue 管理控制台"] --> API["Go API / 权限 / 审计"]
API --> DB["MySQL"]
API --> CACHE["Redis"]
API --> JOB["隔离任务执行器"]
JOB --> TF1["Terraform · AWS 基础资源"]
JOB --> TF2["Terraform · EKS 平台组件"]
JOB --> AWS["AWS CLI"]
JOB --> K8S["kubectl / Helm"]
TF1 --> CLOUD["VPC · EKS · RDS · Cache · MQ · ECR"]
TF2 --> CLUSTER["Add-ons · Gateway · CI/CD · Observability"]
五分钟本地启动
不需要 Go/Node.js 的用户可直接从 GitHub Releases 下载对应系统安装包。安装包内已包含管理端与前端、Terraform/Helm 模板、默认配置和完整文档:
./awsinfra init --config config.yaml
./awsinfra serve --config config.yaml
初始化时可以选择本地 Docker MySQL/Redis,或填写已有 MySQL/Redis 的地址、端口、账号、密码和 Database。完整说明见 发行版安装指南。
从源码启动
前置条件:Go 1.25.13+、Node.js 20.19+、Docker Compose v2。创建 AWS/EKS 资源时还需要 Terraform 1.9+、AWS CLI v2、kubectl 和 Helm 3+。
git clone https://github.com/GZ-Alinx/awsinfra.git
cd awsinfra
# 交互式设置管理员密码,并自动生成数据库、Redis 和凭据加密密钥。
# 已存在 .env 时会拒绝覆盖。
go run ./cmd/ops-deploy init --config config.yaml
# 启动 MySQL/Redis、构建前后端并运行平台。
make local
打开 http://127.0.0.1:8080,用户名为 admin,密码是初始化时输入的密码。
完整步骤和常见问题见 本地快速开始。
第一次使用
- 在“项目管理”创建项目和环境。
- 在“AWS 凭据池”添加属于该项目的 AWS 身份并通过 STS 校验。
- 项目选择明确绑定的凭据;平台不会回退到其他项目或机器默认凭据。
- 配置 Region、VPC、EKS 节点组、云服务和组件。
- 先生成并审查阶段 1 Terraform Plan,再创建基础资源。
- EKS 验收通过后部署阶段 2 组件、TLS、域名和告警。
- 在“资源与访问”和“任务与日志”查看实际端点、状态、诊断与交付结果。
建议先阅读 环境从 0 到 1 的交付标准。
将平台自身部署到 EKS
仓库包含 Go 原生发布工具,不依赖发布 Shell:
cp deploy/kubernetes/deploy.example.yaml deploy/kubernetes/deploy.yaml
cp deploy/kubernetes/secrets.env.example deploy/kubernetes/secrets.env
chmod 600 deploy/kubernetes/secrets.env
# 修改集群、Profile、StorageClass、域名和 Secret 后执行:
go run ./cmd/platform-deploy preflight --config deploy/kubernetes/deploy.yaml
go run ./cmd/platform-deploy deploy --config deploy/kubernetes/deploy.yaml
go run ./cmd/platform-deploy status --config deploy/kubernetes/deploy.yaml
发布工具使用独立 kubeconfig,不会改变本机当前 Context;会构建镜像、推送私有 ECR、渲染 Kubernetes 清单、滚动更新并执行健康检查。详细说明见 平台部署到 EKS。
文档
| 文档 |
内容 |
| 快速开始 |
本地初始化、启动、停止、重置 |
| 发行版安装 |
Windows、macOS、Linux 下载、初始化和启动 |
| 配置参考 |
config.yaml、环境变量和目录 |
| 平台部署到 EKS |
镜像、ECR、Secret、Ingress、升级和回滚 |
| AWS 权限模型 |
项目身份、部署权限、最小权限建议 |
| 安全指南 |
密钥、网络、State、漏洞报告和生产加固 |
| 运维手册 |
备份、恢复、升级、巡检和故障处理 |
| 环境交付标准 |
部署前门禁和部署后 Checklist |
| 可观测体系 |
Metrics、Logs、Traces、告警与 Dashboard |
| 项目清单归档 |
已部署项目的 Helm/Kubernetes 清单归档 |
| 故障排查 |
登录、Terraform、EKS、Helm、NLB 常见问题 |
安全边界
.env、kubeconfig、Terraform State、任务日志、项目环境配置和本地部署配置均被 Git 忽略。
- AWS Secret、GitLab Token、Jenkins 凭据和 TLS 私钥不会提交到仓库或写入普通任务日志。
- AWS 凭据按项目隔离并使用 AES-256-GCM 加密;生产建议使用 AssumeRole/短期 STS,而不是长期 AK/SK。
- 平台默认只监听
127.0.0.1;公网部署必须启用 HTTPS、Secure Cookie、API 白名单和最小权限。
- Terraform 变更前应审查保存的 Plan;销毁和高风险操作需要独立确认。
公开仓库中的示例域名、账号、Bucket 和项目均为占位值。不要将真实 .env、deploy.yaml、State、日志或项目归档加入 Git。
升级兼容性
项目品牌和开源仓库名称已统一为 AWSInfra / AWS 部署平台。为保证现有环境能够原地升级,CLI 命令 ops-deploy、Kubernetes 资源名、Terraform State 标识、标签及默认运行目录继续保留 ops-deploy / ops-deploy-platform 兼容名称;请勿仅因品牌变更手工重建这些资源。
开发与验证
npm --prefix frontend ci
npm --prefix frontend run typecheck
npm --prefix frontend test
npm --prefix frontend run build
go test ./...
go vet ./...
terraform -chdir=terraform/infra init -backend=false
terraform -chdir=terraform/infra validate
terraform -chdir=terraform/platform init -backend=false
terraform -chdir=terraform/platform validate
提交代码前请阅读 CONTRIBUTING.md。
License
Apache License 2.0,详见 LICENSE。