在本节中,你将学到有关CloudFormation
顶级对象(top-level objects)的更多信息,包括Format Version, Description, Metadata, Parameters, Resources.
AWSTemplateFormatVersion部分标识模板的版本。 最新的模板格式版本是 2010-09-09,并且当前是唯一有效的值。
AWSTemplateFormatVersion: '2010-09-09'
Description部分使您可以包含有关模板的注释。
Description : CFN 101 Workshop - Lab 02 Resources.
可以使用Metadata
包含任意JSON或YAML对象,Metadata
可以为与CloudFormation
模板进行交互的其他工具提供信息。 例如,当使用CloudFormation Designer
时,相关数据存储在Metadata部分的AWS::CloudFormation::Designer
部分中。 CloudFormation
本身没有将Metadata部分用于任何目的,仅供第三方工具用于存储其他信息。
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: 'Amazon EC2 Configuration'
Parameters:
- InstanceType
ParameterLabels:
InstanceType:
default: 'Type of EC2 Instance'
Parameters
使您可以在每次创建或更新堆栈时向模板输入自定义值。CloudFormation
支持以下参数类型:
类型 | 描述 | 示例 |
---|---|---|
String | A literal string. | “MyUserName” |
Number | An integer or float. | “123” |
List<Number> |
An array of integers or floats. | “10,20,30” |
CommaDelimitedList | An array of literal strings. | “test,dev,prod” |
AWS-Specific Parameter Types | AWS values such as Amazon VPC IDs. | AWS::EC2::VPC::Id |
SSM Parameter Types | Parameters that correspond to existing parameters in Systems Manager Parameter Store. | AWS::SSM::Parameter::ValueAWS::EC2::Image::Id |
Parameters:
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
Description: 'Enter t2.micro or t2.small. Default is t2.micro.'
Resources声明了要包含在堆栈中的AWS资源。 例如,将EC2资源添加到堆栈中:
Resources:
WebServerInstance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: !Ref InstanceType
ImageId: <replace with AMI ID ami-xxxxx>
将以下代码保存为02-lab02-Resources-Solution.yaml
:
AWSTemplateFormatVersion: '2010-09-09'
Description: CFN 101 Workshop - Lab 02 Resources.
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: 'Amazon EC2 Configuration'
Parameters:
- InstanceType
ParameterLabels:
InstanceType:
default: 'Type of EC2 Instance'
Parameters:
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
Description: 'Enter t2.micro or t2.small. Default is t2.micro.'
Resources:
WebServerInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-00a1270ce1e007c27 # This ImageId will only work in the London region
InstanceType: !Ref InstanceType
EC2资源类型的唯一必需属性是 ImageId。 可以通过AWS控制台找到AMI ID,并进行替换:
参考上一节创建Stack的过程,创建一个新的堆栈,并命名为cfn-workshop-ec2,选择对应的实例类型:
默认选项不用做更改,点击 Next,直到创建堆栈完成。
AMI可能会随时间发生变化,如果我们不想将其硬编码到cloudformation文件中,可以使用AWS Systems Manager Parameter Store来取出最新的AMI ID(参考 AWS Compute Blog ):
aws ssm get-parameters \
--names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--query "Parameters[].Value" \
--region eu-west-2 \
--output text