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

使用 Amazon CloudFormation 配置 Amazon EC2 实例

以下代码段演示了如何使用 Amazon CloudFormation 配置 Amazon EC2 实例。

Amazon EC2 的常规配置

以下代码段演示了如何使用 Amazon CloudFormation 对 Amazon EC2 实例进行常规配置。

在指定的可用区中创建 Amazon EC2 实例

以下代码段使用 AWS::EC2::Instance 资源在指定的可用区中创建 Amazon EC2 实例。可用区的代码由其区域代码后跟一个字母标识符组成。您可以在单个可用区中启动实例。

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0

使用 EBS 卷和用户数据配置标记的 Amazon EC2 实例

以下代码段使用标记、EBS 卷和用户数据创建了一个 Amazon EC2 实例。该实例使用 AWS::EC2::Instance 资源。必须在同一个模板中定义 AWS::EC2::SecurityGroup 资源、AWS::SNS::Topic 资源和 AWS::EC2::Volume 资源。必须在模板的 Parameters 部分中定义 KeyName

标签可帮助您按用途、拥有者或环境等首选项对 Amazon 资源进行分类。用户数据允许在启动期间向实例预置自定义脚本或数据。这些数据有助于实现任务自动化、软件配置、软件包安装以及初始化期间对实例执行的其他操作。

有关标记您资源的更多信息,请参阅标记 Amazon EC2 资源

有关用户数据的信息,请参阅实例元数据和用户数据

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "SecurityGroups": [ { "Ref": "Ec2SecurityGroup" } ], "UserData": { "Fn::Base64": { "Fn::Join": [ ":", [ "PORT=80", "TOPIC=", { "Ref": "MySNSTopic" } ] ] } }, "InstanceType": "aa.size", "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0", "Volumes": [ { "VolumeId": { "Ref": "MyVolumeResource" }, "Device": "/dev/sdk" } ], "Tags": [ { "Key": "Name", "Value": "MyTag" } ] } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName SecurityGroups: - !Ref Ec2SecurityGroup UserData: Fn::Base64: Fn::Join: - ":" - - "PORT=80" - "TOPIC=" - !Ref MySNSTopic InstanceType: aa.size AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0 Volumes: - VolumeId: !Ref MyVolumeResource Device: "/dev/sdk" Tags: - Key: Name Value: MyTag

在用户数据中定义 DynamoDB 表名用于启动 Amazon EC2 实例

以下代码段创建了一个 Amazon EC2 实例,并在用户数据中定义了一个 DynamoDB 表名,以便在启动时传递给实例。该实例使用 AWS::EC2::Instance 资源。您可以在用户数据中定义参数或动态值,以便在启动时传递 EC2 实例。

有关用户数据的更多信息,请参阅实例元数据和用户数据

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "TableName=", { "Ref": "DynamoDBTableName" } ] ] } }, "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: UserData: Fn::Base64: Fn::Join: - '' - - 'TableName=' - Ref: DynamoDBTableName AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0

使用 DeletionPolicy 创建 Amazon EBS 卷

以下代码段使用 Amazon EC2 AWS::EC2::Volume 资源创建 Amazon EBS 卷。您可以使用 SizeSnapshotID 属性来定义卷,但不能同时使用两者。DeletionPolicy 属性设置为在删除堆栈时创建卷的快照。

有关 DeletionPolicy 属性的更多信息,请参阅 DeletionPolicy 属性

有关创建 Amazon EBS 卷的更多信息,请参阅创建 Amazon EBS 卷

JSON

此代码段会创建具有指定大小的 Amazon EBS 卷。大小虽设置为 10,但可按需加以调整。AWS::EC2::Volume 资源允许指定大小或快照 ID,但不允许同时指定这两者。

"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": "10", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "DeletionPolicy": "Snapshot" }

此代码段使用提供的快照 ID 创建一个 Amazon EBS 卷。AWS::EC2::Volume 资源允许指定大小或快照 ID,但不允许同时指定这两者。

"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "SnapshotId" : "snap-1234567890abcdef0", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "DeletionPolicy": "Snapshot" }

YAML

此代码段会创建具有指定大小的 Amazon EBS 卷。大小虽设置为 10,但可按需加以调整。AWS::EC2::Volume 资源允许指定大小或快照 ID,但不允许同时指定这两者。

MyEBSVolume: Type: AWS::EC2::Volume Properties: Size: 10 AvailabilityZone: Ref: AvailabilityZone DeletionPolicy: Snapshot

此代码段使用提供的快照 ID 创建一个 Amazon EBS 卷。AWS::EC2::Volume 资源允许指定大小或快照 ID,但不允许同时指定这两者。

MyEBSVolume: Type: AWS::EC2::Volume Properties: SnapshotId: snap-1234567890abcdef0 AvailabilityZone: Ref: AvailabilityZone DeletionPolicy: Snapshot

指定实例的块设备映射

块设备映射定义了挂载到某个实例的块设备(包含实例存储卷和 EBS 卷)。您可以在创建 AMI 时指定块设备映射,以便让从该 AMI 启动的所有实例都可使用该映射。另外,您可以在启动实例时指定块设备映射,这样该映射会覆盖您从启动实例的 AMI 中指定的块设备映射。

您可以使用以下模板代码段中 AWS::EC2::Instance 资源的 BlockDeviceMappings 属性,为 EBS 或实例存储卷指定块设备映射。

有关数据块设备映射的更多信息,请参阅《Amazon EC2 用户指南》中的块设备映射

为两个 EBS 卷指定块设备映射

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "InstanceType": { "Ref": "InstanceType" }, "SecurityGroups": [{ "Ref": "Ec2SecurityGroup" }], "BlockDeviceMappings": [ { "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": "50" } }, { "DeviceName": "/dev/sdm", "Ebs": { "VolumeSize": "100" } } ] } } }

YAML

EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [AWSRegionArch2AMI, !Ref 'AWS::Region', !FindInMap [AWSInstanceType2Arch, !Ref InstanceType, Arch]] KeyName: !Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeSize: 50 - DeviceName: /dev/sdm Ebs: VolumeSize: 100

为实例存储卷指定块设备映射

JSON

"Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, "HVM64" ]}, "KeyName" : { "Ref" : "KeyName" }, "InstanceType": { "Ref": "InstanceType" }, "SecurityGroups" : [{ "Ref" : "Ec2SecurityGroup" }], "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdc", "VirtualName" : "ephemeral0" } ] } }

YAML

EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap - AWSRegionArch2AMI - !Ref AWS::Region - HVM64 KeyName: !Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sdc VirtualName: ephemeral0