以下のスニペットは、AWS CloudFormation を使用して Amazon EC2 インスタンスを設定する方法を示しています。
Amazon EC2 の全般設定
以下のスニペットは、AWS CloudFormation を使用した Amazon EC2 インスタンスの全般設定を示しています。
例
指定されたアベイラビリティーゾーンに Amazon EC2 インスタンスを作成する
次のスニペットは、AWS::EC2::Instance リソースを使用した Amazon EC2 インスタンスを作成しています。アベイラビリティーゾーンのコードは、リージョンコードとそれに続く文字識別子です。インスタンスは 1 つのアベイラビリティーゾーンで起動できます。
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
を定義する必要があります。
タグを使用すると、AWS リソースを目的、所有者、環境など好みに基づいて分類できます。ユーザーデータにより、起動時にカスタムスクリプトやデータをインスタンスにプロビジョニングできます。このデータにより、タスクの自動化、ソフトウェア設定、パッケージのインストール、および初期化中のインスタンスでのその他のアクションが容易になります。
リソースへのタグ付けの詳細については、「Amazon EC2 リソースのタグ付け」を参照してください。
ユーザーデータの詳細については、「インスタンスメタデータを使用して 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
Amazon EC2 インスタンスを起動するためのユーザーデータに DynamoDB テーブル名を定義する
次のスニペットは Amazon EC2 インスタンスを作成し、起動時にインスタンスに渡すユーザーデータに DynamoDB テーブル名を定義します。AWS::EC2::Instance リソースを使用します。起動時に EC2 インスタンスを渡すパラメータまたは動的値をユーザーデータで定義できます。
ユーザーデータの詳細については、「インスタンスメタデータを使用して 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 ボリュームを作成します。Size
または SnapshotID
プロパティを使用してボリュームを定義できますが、両方を使用することはできません。スタックが削除されたときにボリュームのスナップショットを作成するように 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 ユーザーガイドの「ブロックデバイスマッピング」を参照してください。
2 つの 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