文章详情

亚马逊云企业认证 AWS CloudFormation 入门教程:用模板创建EC2、VPC与RDS并解决部署报错

亚马逊aws2026-10-21 16:00:44AWS加云Plus

很多用户第一次使用 AWS CloudFormation,并不是想了解定义,而是已经在控制台里反复点过 VPC、子网、安全组、EC2、RDS,结果环境一多就难以复用:测试环境和生产环境参数不一致,安全组端口漏开,数据库恢复后连接字符串又变了,修改配置时还容易误删资源。用户真正关心的是:怎样把这些操作写成模板,怎样少踩坑,部署失败后怎样快速定位问题。

如果你现在正准备上线一个网站、API 服务或内部业务系统,CloudFormation 最适合解决两类问题:第一,减少重复创建资源时的手工错误;第二,把服务器、数据库和网络配置固化下来,后续可以复制、更新和回滚。下面的内容不讲空泛原理,直接围绕模板编写、参数选择、控制台部署和故障排查展开。

部署前先确认的4项准备

1. 账号和权限

亚马逊云企业认证 如果你用的是主账号,虽然可以直接创建资源,但不建议长期这样操作。更稳妥的方式是使用具备 CloudFormation、EC2、VPC、RDS、IAM、CloudWatch 基础权限的 IAM 用户或角色。

准备项最低要求常见问题
CloudFormation 权限创建、更新、删除堆栈控制台能打开但创建失败
EC2/VPC 权限创建实例、网络与安全组提示未授权操作
RDS 权限创建数据库实例与子网组数据库步骤回滚
IAM PassRole若模板中引用角色则需要堆栈事件报 AccessDenied

2. 你需要提前准备的资源

  • 亚马逊云企业认证 至少一个可用 Region,建议离用户近,优先考虑延迟和数据合规要求。
  • 一对 EC2 Key Pair,后续 Linux 用 SSH 连接,Windows 可用于获取管理员密码。
  • 一个明确的 CIDR 规划,例如 VPC 使用 10.0.0.0/16,公有子网 10.0.1.0/24,私有子网 10.0.2.0/24。
  • 数据库密码不要硬编码在模板里,至少改成参数输入,实际生产可配合 Secrets Manager。

3. 常被忽略的前置条件

很多新手模板语法没错,但部署还是失败,原因不在模板本身,而在基础资源条件未满足。例如:所选可用区不支持某实例规格、RDS 所需两个子网不在不同可用区、默认 VPC 被删后又沿用旧模板参数、账户在当前区域的 vCPU 配额不足。

4. 决策时最关键的参数

参数建议填写方式影响
InstanceType入门可选 t3.micro/t3.small决定成本与性能
DBInstanceClass测试库 db.t3.micro,生产按负载提高影响并发和内存
AllowedSSHLocation不要填 0.0.0.0/0,改成你的公网IP/32影响服务器暴露面
DBAllocatedStorageMySQL 起步 20GB,按增长预留影响存储成本和空间
MultiAZ测试关闭,生产关键库再开启影响可用性和费用

先从控制台创建一个可运行的堆栈

如果你是第一次上手,不建议一开始就写复杂模板。先用一个最小模板把 VPC、公网子网、安全组和一台 Linux EC2 创建出来,确认流程打通,再加数据库和更多网络规则。

步骤1:进入 CloudFormation 创建堆栈

登录 AWS 控制台后,搜索并进入 CloudFormation,点击“Create stack”,选择“With new resources (standard)”。模板来源可以选“Upload a template file”,上传本地 YAML 文件。

这里最容易出现的问题是:模板文件编码异常、YAML 缩进错误、参数类型与默认值不匹配。建议使用空格缩进,不要混用 Tab。

步骤2:填写堆栈名称与参数

堆栈名称建议带环境标识,例如 web-prod-stack、web-test-stack。参数填写时重点看三类:网络段、实例规格、访问来源。

  • KeyName:选择已创建的密钥对,否则 Linux 实例无法 SSH 登录。
  • AllowedSSHLocation:填你的办公公网 IP,例如 203.0.113.10/32。
  • VpcCIDR/SubnetCIDR:避免与现有网络冲突,后续如果要做 VPC Peering 或 VPN,这一步尤其关键。

步骤3:设置高级选项

在高级选项中建议开启堆栈失败通知,至少加上标签,例如 Environment=Test、Owner=Ops。对于数据库和关键磁盘类资源,可考虑在模板中设置删除策略,避免删除堆栈时数据直接被清空。

步骤4:查看 Events 定位失败点

创建后不要只看“Create failed”,要进入堆栈详情页的 Events 标签查看具体资源。CloudFormation 的排错核心不是猜,而是看事件顺序:哪个资源先失败、是权限问题、配额问题还是依赖关系问题。

常见事件提示可能原因处理办法
Parameters validation failed参数值超范围或类型不符检查 AllowedValues、CIDR 格式、实例规格
Resource creation cancelled前置资源失败导致后续取消先看最早失败的那条事件
AccessDeniedIAM 权限不足补齐对应服务权限和 PassRole
InsufficientInstanceCapacity当前可用区容量不足更换可用区或实例规格

模板实战:创建 VPC、EC2 和 MySQL RDS

下面这类结构最适合入门用户:一个 VPC、两个子网、一个互联网网关、一台 EC2 放在公有子网、一台 RDS 放在私有子网。这样既能演示网络配置,也方便后续扩展应用和数据库分层。

推荐资源结构

资源建议配置说明
VPC10.0.0.0/16给后续子网留空间
Public Subnet10.0.1.0/24放 EC2 与 NAT 相关资源
Private Subnet A/B10.0.2.0/24、10.0.3.0/24RDS 需要至少两个可用区子网
EC2 Security Group22、80、443 按需开放SSH 限定源IP
RDS Security Group3306 仅允许 EC2 安全组访问不要直接暴露公网

模板参数建议

入门模板至少要参数化以下内容,而不是写死:

  • EC2 实例规格:方便测试和生产复用。
  • AMI ID:不同 Region 不同,别跨区域直接照搬。
  • 数据库用户名、数据库名称、存储大小。
  • 亚马逊云企业认证 SSH 来源 IP 和 Web 访问范围。

关键配置细节

1)EC2 如果需要公网访问,除了关联公有子网,还要确认分配公网 IP,路由表中有 0.0.0.0/0 指向 Internet Gateway。

2)RDS 如果是私网部署,必须创建 DB Subnet Group,并且两个子网位于不同可用区,否则实例创建经常失败。

3)安全组建议用“安全组引用”而不是开放整段网段。比如 RDS 的 3306 只允许来自 EC2 安全组,而不是 0.0.0.0/0。

Linux 初始化命令示例

如果模板里使用 UserData 自动安装 Nginx 或应用运行环境,建议先把脚本控制在最小范围,避免一堆命令混在一起导致实例健康检查失败。

用途示例命令
更新软件源sudo yum update -y 或 sudo apt update -y
安装 Nginxsudo yum install nginx -y
启动服务sudo systemctl enable nginx && sudo systemctl start nginx
查看监听端口ss -lntp

如果 UserData 执行失败,先到 EC2 上查看日志。Amazon Linux 常看 /var/log/cloud-init-output.log,Ubuntu 也可以从 cloud-init 日志入手,不要一开始就误判成模板错误。

部署完成后怎样验证资源真的可用

1. SSH 远程连接 Linux 实例

在 EC2 控制台复制公有 IP,然后本地执行:

ssh -i your-key.pem ec2-user@公网IP

若使用 Ubuntu AMI,用户名通常是 ubuntu。连接失败时优先检查四项:密钥是否匹配、22 端口是否放通、安全组源地址是否包含你当前公网 IP、实例是否真的拿到了公有 IP。

2. Windows 实例使用 RDP

如果模板部署的是 Windows EC2,需要安全组开放 3389,并在实例创建完成后通过控制台获取管理员密码。很多用户卡在“明明实例正常却连不上”,通常是 3389 未放行、网络 ACL 拒绝、或公司出口网络屏蔽了 RDP。

3. MySQL 连接检查

从 EC2 内部连接私网 RDS 才是推荐方式。先在 EC2 上执行端口连通测试,再用 MySQL 客户端连接:

mysql -h 数据库终端节点 -u admin -p

如果报 Can't connect to MySQL server,优先排查:

  • RDS 安全组是否允许来自 EC2 安全组的 3306。
  • 亚马逊云企业认证 RDS 是否部署在私有子网,且 EC2 与 RDS 路由互通。
  • 数据库状态是否为 available,而不是 backing-up 或 modifying。
  • 参数组是否改动了连接相关配置后未重启生效。

更新模板时最容易踩的坑

CloudFormation 真正的价值不只是创建,而是后续更新。很多用户第一次更新堆栈后发现实例被替换、数据库重建,问题通常出在没有识别“修改会触发 replacement”的字段。

哪些修改容易触发资源替换

资源高风险修改项后果
EC2部分网络属性、AMI、根卷配置实例被替换,原临时数据丢失
RDS某些存储/引擎/网络参数可能重建实例或造成中断
子网/VPCCIDR 变更依赖资源整体重建

更新前建议

  • 对关键卷和数据库先做快照备份。
  • 生产堆栈开启 Termination Protection,防止误删。
  • 先在测试环境执行 Change Set,确认哪些资源会修改或替换。
  • 数据库资源增加保留策略,避免删除堆栈时数据跟着删。

不同业务场景下怎么选配置

个人开发者

如果只是部署博客、测试 API 或学习 Linux,建议单台 EC2 + 最小 MySQL/RDS 测试实例,公有子网即可。重点不是高可用,而是把模板参数化,后续可以快速重建环境。

亚马逊云企业认证 企业用户

亚马逊云企业认证 建议拆分网络、计算、数据库三个模板或使用嵌套堆栈。数据库放私有子网,应用服务器通过安全组互通。上线前为模板增加标签、日志、备份保留和变更审批流程。

跨境业务

优先按用户访问区域选 Region,再测试网络延迟。应用层可配合 Route 53、CloudFront 和 HTTPS 证书部署。CloudFormation 模板中要把证书 ARN、域名和安全组规则参数化,避免跨区复制时出错。

网站应用

至少开放 80/443,SSH 只允许固定来源。若后续接入负载均衡,可先把 EC2 安全组改成仅接受负载均衡安全组流量,减少直接暴露。

数据库业务

RDS 建议单独一个堆栈管理,避免业务服务器更新时影响数据库。备份窗口、维护窗口、参数组、监控项最好都写在模板里,避免上线后再手工补。

部署失败时,不要重试,先按这个顺序排查

先看堆栈事件,再看具体资源日志

CloudFormation 错误经常是连锁反应。后面的“创建取消”通常不是根因。正确做法是找到第一条失败事件,然后跳到对应服务核对原始错误。

最常见的5类错误

错误类型典型表现排查思路
YAML/JSON 语法问题模板上传即失败检查缩进、冒号、列表格式
权限不足创建到某资源时报 AccessDenied补 IAM 权限与 PassRole
网络配置错误实例成功但无法 SSH/数据库不可达查路由表、安全组、NACL、公网IP
资源依赖缺失IGW、子网、路由关联顺序出错检查 DependsOn 与引用关系
配额或容量限制实例无法启动或数据库规格不可用换规格、换可用区、申请提额

上线后还需要做的优化

安全优化

  • SSH 和 RDP 不要对全网开放,限定办公 IP 或通过堡垒机访问。
  • 数据库放私网,不直接暴露公网端点。
  • 敏感参数不要硬编码在模板里,至少改为 NoEcho 参数。
  • 给 EC2 绑定 IAM Role,不要在服务器里保存长期 AK/SK。

性能优化

  • Web 服务先看 CPU、内存、磁盘突发和网络带宽,不要只盯实例规格。
  • RDS 若连接数高,优先检查最大连接、慢查询和应用连接池配置。
  • 静态资源建议后续接入 CDN,模板里可预留证书与域名参数。

成本优化

  • 测试环境使用小规格并设置自动停机策略。
  • 删除不再使用的 EBS、快照和弹性 IP。
  • RDS Multi-AZ、Provisioned IOPS 等配置只在有明确要求时启用。

稳定性优化

  • 关键堆栈启用删除保护。
  • 数据库和磁盘定期做快照,演练恢复流程。
  • 更新前先执行 Change Set,避免误替换生产资源。
  • 通过 CloudWatch 监控 CPU、内存、磁盘与连接数,发现异常再更新模板而不是直接在控制台改。

如果你当前还是手动创建 EC2、RDS 和安全组,最实用的入门路径不是一次写完整平台模板,而是先用 CloudFormation 固化一个最小可运行环境:VPC、公有子网、EC2、安全组、私网 RDS。先保证部署成功、能 SSH、能连 MySQL、能回滚,再逐步增加 HTTPS、DNS、负载均衡、备份策略和监控配置。这样学得更快,也更接近真实运维场景。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系