Amazon CloudFormation 概念 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon CloudFormation 概念

在使用 Amazon CloudFormation 时,将使用模板堆栈。您创建模板来描述 Amazon 资源及其属性。当您创建堆栈时,CloudFormation 会配置模板中描述的资源。

模板

CloudFormation 模板是 JSON 或 YAML 格式的文本文件。您可使用任何扩展名(如 .json.yaml.template.txt)保存这些文件。CloudFormation 使用这些模板作为构建 Amazon 资源的蓝图。例如,在模板中,您可描述 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 堆栈时指定的。换句话说,您可在创建堆栈而不是创建模板时指定一个值 (如实例类型),以便在不同的情况下更轻松地重新使用模板。

有关模板创建和功能的更多信息,请参阅模板剖析

有关声明特定资源的更多信息,请参阅 Amazon 资源和属性类型参考

要开始使用 Amazon CloudFormation Designer 设计您自己的模板,请转到 https://console.aws.amazon.com/cloudformation/designer

堆栈

在您使用 CloudFormation 时,可将相关资源作为一个称为“堆栈”的单元进行管理。您可通过创建、更新和删除堆栈来创建、更新和删除一组资源。堆栈中的所有资源均由堆栈的 CloudFormation 模板定义。假设您创建了一个模板,它包括自动扩缩组、Elastic Load Balancing 负载均衡器和 Amazon Relational Database Service (Amazon RDS) 数据库实例。要创建这些资源,您可通过提交已创建的模板来创建堆栈,CloudFormation 将会为您配置所有这些资源。您可通过使用 CloudFormation 控制台APIAmazon CLI 来使用堆栈。

有关创建、更新或删除堆栈的更多信息,请参阅使用 堆栈

更改集

如果您需要更改堆栈中运行的资源,则可更新堆栈。在更改资源之前,您可以生成一个更改集,这是建议进行的更改的摘要。利用更改集,您可以在实施更改之前,了解更改可能会对运行的资源 (特别是关键资源) 造成的影响。

例如,如果您更改 Amazon RDS 数据库实例的名称,则 CloudFormation 将创建新数据库并删除旧数据库。除非您已经对旧数据库中的数据进行备份,否则您将丢失该数据。如果您生成了更改集,则将了解更改会导致数据库被替换,而您可以先做出相应的计划,然后再更新堆栈。有关更多信息,请参阅使用更改集更新堆栈