好的,为你量身定制一个学习 EC2 的计划,以“搭建一个可以自动扩容的 WordPress 网站”为实践目标。这个项目能让你接触到 EC2 的核心概念以及与之配合的关键 AWS 服务。
学习目标:
- 掌握 EC2 实例的生命周期管理(创建、启动、停止、终止)。
- 理解 AMI(Amazon 系统映像)、安全组、密钥对的作用。
- 学会在 EC2 实例上部署 Web 应用(以 WordPress 为例)。
- 掌握使用 RDS (Relational Database Service) 作为托管数据库。
- 掌握使用 EFS (Elastic File System) 作为共享文件存储。
- 理解 ELB (Elastic Load Balancing) 的作用和配置(特别是 Application Load Balancer - ALB)。
- 掌握 Auto Scaling Group (ASG) 的配置,实现自动扩缩容。
- 了解 CloudWatch 在监控和触发扩缩容中的作用。
- 初步了解 VPC (Virtual Private Cloud) 的基本网络概念(子网、安全组)。
学习计划(按阶段进行):
阶段一:EC2 基础与单实例 WordPress 搭建 (预计 1-2 天)
- 理论学习:
- 什么是 EC2? 了解其核心概念:实例 (Instance)、实例类型 (Instance Types)、AMI (Amazon Machine Image)、区域 (Region) 与可用区 (Availability Zone)、密钥对 (Key Pair)、安全组 (Security Group)。
- 阅读 AWS 文档: 浏览 EC2 入门文档。
- 实践操作:
- 创建 AWS 账户: 如果还没有的话(注意绑定信用卡,但 Free Tier 额度内通常免费)。
- 启动第一个 EC2 实例:
- 选择一个常见的 Linux AMI (如 Amazon Linux 2 或 Ubuntu Server)。
- 选择一个 Free Tier 符合条件的实例类型 (如 t2.micro 或 t3.micro)。
- 配置安全组:至少开放 SSH (端口 22,建议限制为你的 IP) 和 HTTP (端口 80)。
- 创建并下载密钥对。
- 连接到 EC2 实例: 使用 SSH 客户端 (如 PuTTY, Terminal) 和你的密钥对连接。
- 在实例上安装 LAMP/LEMP 环境:
- 更新系统包 (
sudo yum update
或sudo apt update && sudo apt upgrade
)。 - 安装 Apache 或 Nginx Web 服务器。
- 安装 MySQL 或 MariaDB 数据库服务器(注意:此阶段数据库安装在 EC2 实例本地)。
- 安装 PHP 及必要的扩展 (php-mysql 等)。
- 启动并配置 Web 服务器和数据库服务。
- 更新系统包 (
- 安装 WordPress:
- 下载 WordPress 安装包。
- 在 MySQL/MariaDB 中创建数据库和用户。
- 解压 WordPress 文件到 Web 服务器的根目录 (如
/var/www/html
)。 - 配置
wp-config.php
文件,连接到本地数据库。 - 通过浏览器访问 EC2 实例的公有 IP 地址,完成 WordPress 安装。
- 测试: 确保可以访问 WordPress 网站,发帖、上传图片正常。
- 清理 (可选): 了解如何停止 (Stop) 和终止 (Terminate) 实例以节省费用。
阶段二:分离数据库和文件系统 (为扩展做准备) (预计 1 天)
- 理论学习:
- 为什么需要分离数据库和文件系统? 理解无状态 Web 服务器的概念对于水平扩展的重要性。
- 了解 RDS: 托管关系数据库服务,简化数据库管理、备份、扩展。
- 了解 EFS: 托管的 NFS 文件系统,可在多个 EC2 实例间共享。
- 实践操作:
- 创建 RDS 数据库实例:
- 选择 MySQL 或 MariaDB 引擎。
- 选择 Free Tier 符合条件的实例类型 (db.t2.micro 等)。
- 配置数据库名称、主用户名和密码。
- 关键: 配置 RDS 的安全组,允许来自你的 EC2 实例所在安全组的数据库端口访问(通常是 3306)。
- 等待实例创建完成,记下数据库的 Endpoint 地址。
- 迁移 WordPress 数据库到 RDS:
- 方法一 (推荐学习): 导出 EC2 本地数据库 (
mysqldump
),然后导入到 RDS 实例 (mysql
命令行工具连接到 RDS Endpoint)。 - 方法二 (简单): 重新配置
wp-config.php
文件,指向 RDS 的 Endpoint、数据库名、用户名和密码。然后通过浏览器重新运行 WordPress 安装程序(注意这会丢失旧数据,适合练习)。
- 方法一 (推荐学习): 导出 EC2 本地数据库 (
- 创建 EFS 文件系统:
- 创建一个 EFS 文件系统。
- 关键: 配置 EFS 的挂载目标 (Mount Targets),确保它们位于 EC2 实例所在的 VPC 和子网中。
- 关键: 配置 EFS 的安全组,允许来自你的 EC2 实例所在安全组的 NFS 端口访问(通常是 2049)。
- 在 EC2 实例上挂载 EFS:
- 安装 NFS 客户端 (
sudo yum install -y amazon-efs-utils
或sudo apt install nfs-common
)。 - 创建一个挂载点 (如
/mnt/efs
)。 - 使用 EFS 的 DNS 名称或挂载目标的 IP 地址挂载 EFS (参考 AWS 文档中的挂载命令)。
- 配置
/etc/fstab
实现开机自动挂载。
- 安装 NFS 客户端 (
- 迁移 WordPress 上传文件到 EFS:
- 将 WordPress 的
wp-content/uploads
目录移动到 EFS 挂载点下。 - 在原来的位置创建一个指向 EFS 中
uploads
目录的符号链接 (ln -s /mnt/efs/uploads /var/www/html/wp-content/uploads
),或者修改 WordPress 配置(较复杂,不推荐初学)。 - 确保 Web 服务器用户 (如 apache, www-data) 对 EFS 上的
uploads
目录有写入权限。
- 将 WordPress 的
- 测试: 再次测试 WordPress 网站,确保数据库连接正常,上传图片能成功保存到 EFS 并能正确显示。此时,你的 Web 服务器本身应该是“无状态”的了。
- 创建 RDS 数据库实例:
阶段三:配置负载均衡器和多个实例 (手动) (预计 1 天)
- 理论学习:
- 了解 Elastic Load Balancing (ELB): 特别是 Application Load Balancer (ALB),它工作在 OSI 模型的第 7 层,能基于 HTTP/HTTPS 内容进行路由。
- 理解 Target Group: ALB 将流量转发到的目标(一组 EC2 实例)。
- 理解 Health Check: ELB 如何检查后端实例是否健康。
- 实践操作:
- 创建自定义 AMI (可选但推荐):
- 在你配置好(连接 RDS、挂载 EFS)的 EC2 实例上,创建一个自定义 AMI。这将作为后续自动启动新实例的模板,避免重复配置。
- 替代方案: 使用 User Data 脚本在实例首次启动时自动完成所有配置(更复杂)。
- 创建 Application Load Balancer (ALB):
- 选择面向 Internet (Internet-facing)。
- 选择你的 VPC 和至少两个不同可用区的子网(为了高可用)。
- 配置监听器 (Listener):HTTP 端口 80。
- 创建 Target Group:
- 选择实例 (Instance) 类型。
- 协议 HTTP,端口 80。
- 配置健康检查路径(例如 WordPress 网站根目录
/
或readme.html
)。
- 手动启动第二个 EC2 实例:
- 使用之前创建的自定义 AMI 启动一个新实例(或者手动配置一个与第一个实例完全相同的实例)。确保它位于不同的可用区,并且安全组允许来自 ALB 的流量。
- 关键: 无需配置公有 IP 地址,因为用户将通过 ALB 访问。
- 注册实例到 Target Group: 将你的两个 EC2 实例注册到之前创建的 Target Group 中。
- 配置 EC2 安全组: 确保 EC2 实例的安全组允许来自 ALB 安全组的 HTTP (端口 80) 流量。同时可以移除允许来自公网 0.0.0.0/0 的 HTTP 访问,强制流量必须经过 ALB。
- 测试:
- 通过 ALB 的 DNS 名称访问你的 WordPress 网站。
- 尝试停止其中一个 EC2 实例,验证网站仍然可以访问(ALB 会将流量转发到健康的实例)。
- 重新启动停止的实例,观察它是否重新加入 Target Group 并开始接收流量。
- 创建自定义 AMI (可选但推荐):
阶段四:实现自动扩缩容 (预计 1-2 天)
- 理论学习:
- 了解 Auto Scaling Group (ASG): 自动管理 EC2 实例集合,确保运行期望数量的实例,并能根据需求自动增加或减少实例数量。
- 了解 Launch Configuration / Launch Template: 定义 ASG 启动新实例时使用的配置(AMI、实例类型、密钥对、安全组、User Data 等)。Launch Template 是推荐的新方式。
- 了解 Scaling Policy: 定义何时以及如何扩展(Scale Out)或缩减(Scale In)实例数量。
- 了解 CloudWatch Alarms: 监控 AWS 资源指标(如 CPU 利用率),并在指标达到阈值时触发动作(如执行 Scaling Policy)。
- 实践操作:
- 创建 Launch Template:
- 指定之前创建的自定义 AMI ID。
- 选择实例类型。
- 指定密钥对。
- 选择安全组(允许 SSH 和来自 ALB 流量的那个)。
- 重要: 如果没有使用 AMI,可以在 User Data 中放入自动化配置脚本(挂载 EFS 等)。
- 创建 Auto Scaling Group (ASG):
- 关联之前创建的 Launch Template。
- 选择 VPC 和子网(与 ALB 覆盖的子网相同)。
- 关联 ALB: 选择将新实例注册到之前创建的 ALB Target Group。
- 配置组大小:
- Desired Capacity (期望实例数): 启动时运行的实例数量 (e.g., 2)。
- Minimum Capacity (最小实例数): ASG 保持运行的最少实例数 (e.g., 1 或 2)。
- Maximum Capacity (最大实例数): ASG 可以扩展到的最大实例数 (e.g., 4)。
- 配置 Scaling Policies:
- 创建 Scale Out Policy (扩展):
- 创建一个 CloudWatch Alarm:监控 ASG 的平均 CPU 利用率 (e.g., Average CPUUtilization)。
- 设置阈值:当 CPU 平均利用率 > 70% 持续 5 分钟。
- 配置动作:触发 ASG 增加 1 个实例。
- 创建 Scale In Policy (缩减):
- 创建一个 CloudWatch Alarm:监控 ASG 的平均 CPU 利用率。
- 设置阈值:当 CPU 平均利用率 < 30% 持续 10 分钟。
- 配置动作:触发 ASG 减少 1 个实例。
- 创建 Scale Out Policy (扩展):
- 设置 Health Check 类型(EC2 或 ELB),建议使用 ELB 健康检查。
- 终止手动创建的实例: 终止之前在阶段三手动启动的 EC2 实例,让 ASG 来管理实例。
- 测试自动扩缩容:
- 触发 Scale Out: 使用压测工具 (如
ab
,siege
,k6
) 或不断刷新页面给 ASG 中的实例制造负载,观察 CloudWatch 中的 CPU 指标上升。当达到阈值时,观察 ASG 是否自动启动新实例并将其注册到 ALB Target Group。验证新实例也能正常提供服务。 - 触发 Scale In: 停止压测,等待 CPU 利用率下降。观察 CloudWatch 指标下降,当达到缩减阈值时,观察 ASG 是否自动终止一个实例。
- 触发 Scale Out: 使用压测工具 (如
- 创建 Launch Template:
阶段五:回顾、优化与进阶 (持续)
- 回顾与理解:
- 梳理整个架构:用户 -> ALB -> ASG (多个 EC2 实例) -> EFS (共享文件) / RDS (共享数据库)。
- 理解每个组件的作用和它们之间的交互。
- 成本意识:
- 检查 AWS Billing Dashboard,了解各个服务(EC2, RDS, EFS, ELB, 数据传输)的成本构成。
- 学习如何使用 AWS Cost Explorer 分析成本。
- 了解预留实例 (Reserved Instances) 和 Savings Plans 以降低长期成本。
- 安全加固:
- 仔细审查所有安全组规则,遵循最小权限原则。
- 考虑为 WordPress 配置 HTTPS (需要证书,可以使用 AWS Certificate Manager (ACM) 并集成到 ALB)。
- 学习 IAM (Identity and Access Management) 的最佳实践。
- 监控与日志:
- 深入了解 CloudWatch Metrics 和 Logs。设置更详细的告警。
- 备份与恢复:
- 配置 RDS 自动备份和快照。
- 了解 EFS 备份方案。
- 练习从备份恢复。
- 进阶探索 (可选):
- 使用 CloudFront (CDN) 加速静态内容分发。
- 使用 ElastiCache (如 Redis 或 Memcached) 缓存数据库查询或对象,提升性能。
- 学习使用 Infrastructure as Code (IaC) 工具(如 CloudFormation 或 Terraform)来自动化部署和管理整个架构。
- 探索容器化方案 (Docker + ECS/EKS)。
重要提示:
- 勤动手: 理论结合实践是最好的学习方式。
- 多查文档: AWS 官方文档非常详细,是最好的参考资料。
- 利用 Free Tier: 尽可能使用免费套餐额度,避免不必要的开销。
- 及时清理资源: 实验完成后,记得终止 EC2 实例、删除 RDS 实例、EFS 文件系统、ALB 和 ASG,以免产生费用。
- 从小处着手: 不用一开始就追求完美,先让基本功能跑起来,再逐步完善。
- 耐心和调试: 遇到问题很正常,学会查看日志、利用 AWS 控制台信息和搜索引擎解决问题。
这个计划提供了一个清晰的学习路径,通过一个实际的项目来驱动你掌握 EC2 及其相关服务的知识。祝你学习顺利!