Skip to content

Instantly share code, notes, and snippets.

@nothingrealhappen
Created April 18, 2025 10:03
Show Gist options
  • Save nothingrealhappen/e3592d45e100a057aefbe70e21a2db40 to your computer and use it in GitHub Desktop.
Save nothingrealhappen/e3592d45e100a057aefbe70e21a2db40 to your computer and use it in GitHub Desktop.

好的,为你量身定制一个学习 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 天)

  1. 理论学习:
    • 什么是 EC2? 了解其核心概念:实例 (Instance)、实例类型 (Instance Types)、AMI (Amazon Machine Image)、区域 (Region) 与可用区 (Availability Zone)、密钥对 (Key Pair)、安全组 (Security Group)。
    • 阅读 AWS 文档: 浏览 EC2 入门文档。
  2. 实践操作:
    • 创建 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 updatesudo 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 天)

  1. 理论学习:
    • 为什么需要分离数据库和文件系统? 理解无状态 Web 服务器的概念对于水平扩展的重要性。
    • 了解 RDS: 托管关系数据库服务,简化数据库管理、备份、扩展。
    • 了解 EFS: 托管的 NFS 文件系统,可在多个 EC2 实例间共享。
  2. 实践操作:
    • 创建 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 安装程序(注意这会丢失旧数据,适合练习)。
    • 创建 EFS 文件系统:
      • 创建一个 EFS 文件系统。
      • 关键: 配置 EFS 的挂载目标 (Mount Targets),确保它们位于 EC2 实例所在的 VPC 和子网中。
      • 关键: 配置 EFS 的安全组,允许来自你的 EC2 实例所在安全组的 NFS 端口访问(通常是 2049)。
    • 在 EC2 实例上挂载 EFS:
      • 安装 NFS 客户端 (sudo yum install -y amazon-efs-utilssudo apt install nfs-common)。
      • 创建一个挂载点 (如 /mnt/efs)。
      • 使用 EFS 的 DNS 名称或挂载目标的 IP 地址挂载 EFS (参考 AWS 文档中的挂载命令)。
      • 配置 /etc/fstab 实现开机自动挂载。
    • 迁移 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 网站,确保数据库连接正常,上传图片能成功保存到 EFS 并能正确显示。此时,你的 Web 服务器本身应该是“无状态”的了。

阶段三:配置负载均衡器和多个实例 (手动) (预计 1 天)

  1. 理论学习:
    • 了解 Elastic Load Balancing (ELB): 特别是 Application Load Balancer (ALB),它工作在 OSI 模型的第 7 层,能基于 HTTP/HTTPS 内容进行路由。
    • 理解 Target Group: ALB 将流量转发到的目标(一组 EC2 实例)。
    • 理解 Health Check: ELB 如何检查后端实例是否健康。
  2. 实践操作:
    • 创建自定义 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 并开始接收流量。

阶段四:实现自动扩缩容 (预计 1-2 天)

  1. 理论学习:
    • 了解 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)。
  2. 实践操作:
    • 创建 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 个实例。
      • 设置 Health Check 类型(EC2 或 ELB),建议使用 ELB 健康检查。
    • 终止手动创建的实例: 终止之前在阶段三手动启动的 EC2 实例,让 ASG 来管理实例。
    • 测试自动扩缩容:
      • 触发 Scale Out: 使用压测工具 (如 ab, siege, k6) 或不断刷新页面给 ASG 中的实例制造负载,观察 CloudWatch 中的 CPU 指标上升。当达到阈值时,观察 ASG 是否自动启动新实例并将其注册到 ALB Target Group。验证新实例也能正常提供服务。
      • 触发 Scale In: 停止压测,等待 CPU 利用率下降。观察 CloudWatch 指标下降,当达到缩减阈值时,观察 ASG 是否自动终止一个实例。

阶段五:回顾、优化与进阶 (持续)

  1. 回顾与理解:
    • 梳理整个架构:用户 -> ALB -> ASG (多个 EC2 实例) -> EFS (共享文件) / RDS (共享数据库)。
    • 理解每个组件的作用和它们之间的交互。
  2. 成本意识:
    • 检查 AWS Billing Dashboard,了解各个服务(EC2, RDS, EFS, ELB, 数据传输)的成本构成。
    • 学习如何使用 AWS Cost Explorer 分析成本。
    • 了解预留实例 (Reserved Instances) 和 Savings Plans 以降低长期成本。
  3. 安全加固:
    • 仔细审查所有安全组规则,遵循最小权限原则。
    • 考虑为 WordPress 配置 HTTPS (需要证书,可以使用 AWS Certificate Manager (ACM) 并集成到 ALB)。
    • 学习 IAM (Identity and Access Management) 的最佳实践。
  4. 监控与日志:
    • 深入了解 CloudWatch Metrics 和 Logs。设置更详细的告警。
  5. 备份与恢复:
    • 配置 RDS 自动备份和快照。
    • 了解 EFS 备份方案。
    • 练习从备份恢复。
  6. 进阶探索 (可选):
    • 使用 CloudFront (CDN) 加速静态内容分发。
    • 使用 ElastiCache (如 Redis 或 Memcached) 缓存数据库查询或对象,提升性能。
    • 学习使用 Infrastructure as Code (IaC) 工具(如 CloudFormation 或 Terraform)来自动化部署和管理整个架构。
    • 探索容器化方案 (Docker + ECS/EKS)。

重要提示:

  • 勤动手: 理论结合实践是最好的学习方式。
  • 多查文档: AWS 官方文档非常详细,是最好的参考资料。
  • 利用 Free Tier: 尽可能使用免费套餐额度,避免不必要的开销。
  • 及时清理资源: 实验完成后,记得终止 EC2 实例、删除 RDS 实例、EFS 文件系统、ALB 和 ASG,以免产生费用。
  • 从小处着手: 不用一开始就追求完美,先让基本功能跑起来,再逐步完善。
  • 耐心和调试: 遇到问题很正常,学会查看日志、利用 AWS 控制台信息和搜索引擎解决问题。

这个计划提供了一个清晰的学习路径,通过一个实际的项目来驱动你掌握 EC2 及其相关服务的知识。祝你学习顺利!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment