部署到 AWS EC2
AWS 虚拟服务器,完全 OS 控制,经 user data、Elastic Beanstalk 或 SSH 部署。
平台高级
为什么
EC2 完全控制 OS 和运行时 — 装任何软件、跑任何进程、挂任何存储。最灵活的 AWS 计算,适合遗留应用和自定义栈。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
遗留应用、自定义软件栈和需完整 OS 访问的工作负载用 EC2。容器化/serverless 应用优先 Fargate/Lambda。
如何做
1. 启动 — AMI(Amazon Linux 2023 或 Ubuntu),实例类型,密钥对
2. User data — 首次启动运行 shell 脚本安装应用
3. 安全组 — 仅开所需端口(80、443、22)
4. Elastic IP — 生产静态 IP
5. 负载均衡 — ALB 做 HTTPS、健康检查、多 AZ
6. 自动扩缩 — ASG 按需扩缩实例
7. 部署 — CodeDeploy、SSH+git pull 或 EC2 上 Docker
示例
# user-data.sh — 首次启动运行
#!/bin/bash
yum update -y
yum install -y docker
systemctl start docker
docker run -d -p 80:3000 myapp:latest
# 经 AWS CLI 启动
aws ec2 run-instances --image-id ami-012345 --instance-type t3.medium --user-data file://user-data.sh --security-group-ids sg-abc123
# 生产 ALB + ASG
aws elbv2 create-load-balancer --name myapp-alb --subnets subnet-1 subnet-2
常见问题
- ⚠安全组过开 — 所有端口 0.0.0.0/0,仅限所需端口
- ⚠无自动恢复 — 实例死亡无 ASG,需手动重启
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓用 Amazon Linux 2023 AMI — EC2 优化、免费、AWS 支持
- ✓始终用 ASG + ALB — 自动愈合失败实例并跨 AZ 分布
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求