如何在 AWS 上部署动态 Web 应用程序(初学者友好指南)
Source: Dev.to
在 AWS 上部署动态 Web 应用程序,起初可能会让人感到压力山大,尤其是涉及的服务众多时。本文指南通过一个简单、实用的方法,帮助初学者学习云计算和 DevOps。
什么是动态网页应用?
与静态网站不同,动态网页应用:
- 处理用户输入
- 连接数据库
- 实时生成内容
常见示例包括登录系统、仪表板、电子商务网站以及使用 PHP 构建的网页应用。
AWS Services We’ll Use
部署依赖于核心的 AWS 服务,如 EC2、VPC、安全组、S3、IAM、RDS、应用负载均衡器(ALB)、自动伸缩以及相关的网络组件。
分步部署
1. 选择区域
选择您希望托管应用程序的 AWS 区域。
2. 创建 VPC
为 VPC 启用 DNS 主机名。
3. 设置安全组
| 安全组 | 用途 | 入站规则 |
|---|---|---|
| EICE‑sg (EC2 Instance Connect Endpoint) | 连接端点 | SSH(限制为 VPC CIDR) |
| ALB‑sg | 应用负载均衡器 | HTTP 与 HTTPS(允许来自任何位置) |
| web‑sg | Web 服务器 | HTTP 与 HTTPS(允许来自 ALB‑sg),SSH(限制为 EICE‑sg) |
| db‑sg | 数据库 | MySQL(允许来自 web‑sg) |
| dms‑sg | 数据迁移 | SSH(限制为 EICE‑sg) |
4. 创建 EC2 Instance Connect Endpoint
- 将其放置在私有子网中(例如
private-app-az2)。 - 关联 EICE‑sg。
5. 创建 S3 存储桶
将您的应用代码上传到该存储桶。
6. 创建 IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "*"
}
]
}
练习时可以允许所有资源;在生产环境请限制 ARN。
7. 创建 IAM 角色
- 信任实体:EC2。
- 附加上一步创建的策略。
- 为角色起一个有意义的名称(例如
WebAppS3AccessRole)。
8. 创建 DB 子网组
选择 VPC 并在不同可用区中选取两个私有子网。
9. 启动 RDS MySQL 实例
- Standard create → MySQL(最新引擎版本)。
- 选择 Free Tier。
- 设置 DB 实例标识符和初始数据库名称。
- 为凭证启用 AWS Secrets Manager。
- 使用之前创建的 子网组和 db‑sg。
- 选择可用区并根据需要配置其他设置。
10. 将数据迁移到 RDS
- 在私有子网(
private-app-az2)中启动一台临时 EC2 实例(不使用密钥对),并关联 dms‑sg。 - 附加第 7 步创建的 IAM 角色。
- 通过控制台连接并运行迁移脚本。
- 脚本可在以下位置获取:
迁移完成后,终止临时 EC2 实例。
11. 部署 Web 服务器
- 在私有子网中启动另一台 EC2 实例(不使用密钥对),并关联 web‑sg。
- 附加 S3 访问角色。
- 运行部署脚本(同上 GitHub 仓库),从 S3 拉取代码并启动应用。
12. 创建目标组
- 类型:Instance
- VPC:您的 VPC
- 健康检查路径:默认(或自定义)— 包含 HTTP 状态码
200,301,302。 - 注册 Web 服务器实例。
13. 设置应用负载均衡器
- 选择 VPC 和两个公共子网(每个可用区各一个)。
- 关联 ALB‑sg。
- 监听器:
- HTTP → 重定向到 HTTPS(完整 URL)。
- HTTPS → 转发到上一步创建的目标组;附加您的 SSL 证书。
14. 配置 DNS
创建一个 DNS **A(别名)**记录(例如 www.example.com),指向 ALB。
现在您可以通过域名访问 Web 应用。
15. 为流量高峰做好准备 – 自动伸缩
- 从运行中的 Web 服务器实例 创建 AMI(操作 → 镜像 → 创建镜像)。
- 启动模板:定义 AMI、实例类型、安全组、IAM 角色等。
- 自动伸缩组:
- VPC:选择私有子网。
- 关联 ALB 和目标组。
- 配置健康检查和期望容量(最小/最大/期望)。
自动伸缩组将在流量增长时启动额外实例,并在负载下降时自动终止它们。
最后思考
学习 AWS 在构建真实项目时会更容易。部署一个动态网页应用是一个极好的入门练习,能够帮助你理解云服务如何协同工作。试一试吧,敬请关注我们更多关于 AWS、Docker 和云计算的实用文章。