Get Started
将为 WordPress Blog 服务编译一个模板声明资源,为其创建堆栈,建时堆栈创建过程,检查堆栈上的资源,更新堆栈,然后删除堆栈。将使用 AWS 管理控制台来完成这些任务。
1. 使用现有模板
在了解模板基础知识之前,还不会编写自己的模板。可以使用一个 AWS 提供的现有示例模板。示例模板创建了一个基本的 WordPress 博客,它使用一个 Amazon EC2 实例和一个本地 MySQL 数据库进行存储。该模板还创建了一个 Amazon EC2 安全组来控制 Amazon EC2 实例的防火墙设置。
WordPress YAML 示例模板,无需下载,创建堆栈时使用模板的 S3 上的 URL 就可以。
您可以在 AWS CloudFormation 示例模板库 中找到其他的模板。
示例模板包含六个顶级部分:AWSTemplateFormatVersion、Description、Parameters、Mappings、Resources 和 Outputs;但只有 Resources 部分是必需的。
Resources 部分包含要使用该模板创建的 AWS 资源的定义,以下资源声明是 EC2 实例的配置,该实例在本示例中的逻辑名称为 WebServer:
Resources:
...
WebServer:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap [AWSRegionArch2AMI, !Ref 'AWS::Region', !FindInMap [AWSInstanceType2Arch, !Ref InstanceType, Arch]]
InstanceType:
Ref: InstanceType
KeyName:
Ref: KeyName
SecurityGroups:
- Ref: WebServerSecurityGroup
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
yum update -y aws-cfn-bootstrap
/opt/aws/bin/cfn-init -v --stack ${AWS::StackId} --resource WebServer --configsets wordpress_install --region ${AWS::Region}
/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource WebServer --region ${AWS::Region}
...
...
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: "Enable HTTP access via port 80 locked down to the load balancer + SSH access"
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: '80'
IpProtocol: tcp
ToPort: '80'
- CidrIp: !Ref SSHLocation
FromPort: '22'
IpProtocol: tcp
ToPort: '22'
...
Parameters 部分声明创建堆栈时可以传递给模板的值。参数是指定不希望存储在模板本身中的敏感信息 (如用户名和密码) 的有效方法。它也是指定特定应用程序或配置 (例如域名或实例类型) 所特有的信息的一种方法。
当您在本节稍后创建 WordPress 堆栈时,您将看到在创建堆栈向导的指定详细信息页面上显示模板中声明的一组参数,您可以在创建堆栈之前在这里指定参数。
在模板中,以下参数用于指定在 EC2 实例的属性中使用的值:
Parameters:
...
KeyName:
ConstraintDescription: must be the name of an existing EC2 KeyPair.
Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
Type: AWS::EC2::KeyPair::KeyName
InstanceType:
AllowedValues:
- t1.micro
...
...
- cg1.4xlarge
ConstraintDescription: must be a valid EC2 instance type.
Default: t2.small
Description: WebServer EC2 instance type
Type: String
...
Mappings 部分用来声明条件值,模板使用映射为区域选择正确的 Amazon machine image (AMI),并为实例类型选择架构类型。
Mappings:
AWSInstanceType2Arch:
c1.medium:
Arch: PV64
c1.xlarge:
Arch: PV64
...
...
AWSRegionArch2AMI:
...
us-west-1:
HVM64: ami-d5ea86b5
HVMG2: ami-943956f4
PV64: ami-56ea8636
us-west-2:
HVM64: ami-f0091d91
HVMG2: ami-315f4850
PV64: ami-d93622b8
Outputs 部分可以从堆栈资源中返回信息,例如,在模板中创建的网站的 URL。
Outputs:
PublicIP:
Description: EC2 public IP
Value: !GetAtt WebServer.PublicIp
WebsiteURL:
Description: WordPress Website
Value: !Sub "http://${WebServer.PublicDnsName}/wordpress"
2. 创建堆栈
Stack Name
:MyWPTestStack;
WordPress 模板的 URL
:https://s3.us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template;
Specify Parameters
(指定参数) 页上,您将看到模板的 Parameters 部分中的参数。必须为所有没有默认值的参数提供值,包括 DBUser、DBPassword、DBRootPassword 和 KeyName。
:::info 存储在 S3 存储桶中的 AWS CloudFormation 模板必须可供创建堆栈的用户访问,并且必须位于与创建堆栈相同的区域中。因此,如果 S3 存储桶位于 us-east-2 区域,堆栈也必须在 us-east-2 中创建。 :::
3. 监控堆栈创建的进展
如果 AWS CloudFormation 无法创建资源,它将报告 CREATE_FAILED 事件,并(在默认情况下)回滚堆栈、删除已创建的所有资源。状态原因列显示已导致失败的问题。
4. 使用堆栈中的资源
AWS CloudFormation 已完成堆栈的创建,并且您可以开始使用它的资源了。
示例 WordPress 堆栈将创建一个 WordPress 网站。您可以通过运行 WordPress 安装脚本来继续执行 WordPress 安装。
在 Outputs (输出) 选项卡上的 WebsiteURL 行上,单击 Value (值) 列中的链接。WebsiteURL 输出值就是您使用堆栈创建的 WordPress 网站的安装脚本的 URL。
参考:https://wordpress.org/support/article/how-to-install-wordpress/
5. 清除
在 CloudFormation 控制台删除堆栈,会删除堆栈中的所有资源。