模板
CloudFormation 模板是 JSON 或 YAML 格式的文本文件。您可以使用任何扩展名(如 .json、.yaml、.template 或 .txt)保存这些文件。CloudFormation 将这些模板作为蓝图以构建 AWS 资源。例如,在模板中,您可描述 Amazon EC2 实例,如实例类型、AMI ID、块储存设备映射和其 Amazon EC2 密钥对名称。当您创建堆栈时,还可以指定 CloudFormation 用来创建模板中描述的任何项的模板。
例如,如果您使用以下模板创建堆栈,则 CloudFormation 将使用 ami-0ff8a91507f77f867 AMI ID、t2.micro 实例类型、testkey 密钥对名称和 Amazon EBS 卷来配置实例。
例 JSON
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A sample template",
"Resources" : {
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-0ff8a91507f77f867",
"InstanceType" : "t2.micro",
"KeyName" : "testkey",
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sdm",
"Ebs" : {
"VolumeType" : "io1",
"Iops" : 200,
"DeleteOnTermination" : false,
"VolumeSize" : 20
}
}
]
}
}
}
}
例 YAML
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ff8a91507f77f867"
InstanceType: t2.micro
KeyName: testkey
BlockDeviceMappings:
-
DeviceName: /dev/sdm
Ebs:
VolumeType: io1
Iops: 200
DeleteOnTermination: false
VolumeSize: 20
您还可以在单个模板中指定多种资源并将这些资源配置为结合使用。例如,您可以修改上一个模板来包含一个弹性 IP (EIP) 并将其与 Amazon EC2 实例相关联,如以下示例所示:
例 JSON
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A sample template",
"Resources" : {
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-0ff8a91507f77f867",
"InstanceType" : "t2.micro",
"KeyName" : "testkey",
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sdm",
"Ebs" : {
"VolumeType" : "io1",
"Iops" : 200,
"DeleteOnTermination" : false,
"VolumeSize" : 20
}
}
]
}
},
"MyEIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
"InstanceId" : {"Ref": "MyEC2Instance"}
}
}
}
}
例 YAML
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ff8a91507f77f867"
InstanceType: t2.micro
KeyName: testkey
BlockDeviceMappings:
-
DeviceName: /dev/sdm
Ebs:
VolumeType: io1
Iops: 200
DeleteOnTermination: false
VolumeSize: 20
MyEIP:
Type: AWS::EC2::EIP
Properties:
InstanceId: !Ref MyEC2Instance
之前的模板以 Amazon EC2 实例为中心;但 CloudFormation 模板还具有其他功能,可利用这些功能来构建复杂的资源集并在许多环境中重新使用这些模板。例如,您可添加输入参数,其值是在创建 CloudFormation 堆栈时指定的。换句话说,您可在创建堆栈而不是创建模板时指定一个值 (如实例类型),以便在不同的情况下更轻松地重新使用模板。
有关模板创建和功能的更多信息,请参阅模板剖析。
有关声明特定资源的更多信息,请参阅 AWS 资源和属性类型参考。
要开始使用 AWS CloudFormation Designer 设计您自己的模板,请转到 https://console.aws.amazon.com/cloudformation/designer。
堆栈
在您使用 CloudFormation 时,可将相关资源作为一个称为“堆栈”的单元进行管理。您可通过创建、更新和删除堆栈来创建、更新和删除一组资源。堆栈中的所有资源均由堆栈的 CloudFormation 模板定义。假设您创建了一个模板,它包括 Auto Scaling 组、Elastic Load Balancing 负载均衡器和 Amazon Relational Database Service (Amazon RDS) 数据库实例。要创建这些资源,您可通过提交已创建的模板来创建堆栈,CloudFormation 将会为您配置所有这些资源。您可以通过使用 CloudFormation 控制台、API 或 AWS CLI 来使用堆栈。
有关创建、更新或删除堆栈的更多信息,请参阅使用堆栈。
更改集
如果您需要更改堆栈中运行的资源,则可更新堆栈。在更改资源之前,您可以生成一个更改集,这是建议进行的更改的摘要。利用更改集,您可以在实施更改之前,了解更改可能会对运行的资源 (特别是关键资源) 造成的影响。
例如,如果您更改 Amazon RDS 数据库实例的名称,则 CloudFormation 将创建新数据库并删除旧数据库。除非您已经对旧数据库中的数据进行备份,否则您将丢失该数据。如果您生成了更改集,则将了解更改会导致数据库被替换,而您可以先做出相应的计划,然后再更新堆栈。有关更多信息,请参阅使用更改集更新堆栈。
https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html