このセクションでは、AWS CloudFormation を使用して Amazon EC2 起動テンプレートを作成する方法を例を挙げて説明します。起動テンプレートを使用すると、AWS 内で Amazon EC2 インスタンスを設定してプロビジョニングするためのテンプレートを作成することができます。起動テンプレートを使用すると起動パラメータを保存することができるため、インスタンスを起動するたびに起動パラメータ指定する必要がなくなります。その他の例については、AWS::EC2::LaunchTemplate
リソースの「Examples」のセクションを参照してください。
起動テンプレートの使用の詳細については、「起動テンプレートからのインスタンスの起動」を参照してください。
Auto Scaling グループで使用する起動テンプレートの作成方法については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Launch templates」を参照してください。
セキュリティグループ、タグ、ユーザーデータ、IAM ロールを指定する起動テンプレートを作成する
このスニペットには、インスタンスを起動する設定情報が含まれる AWS::EC2::LaunchTemplate リソースが記されています。ImageId
、InstanceType
、SecurityGroups
、UserData
、および TagSpecifications
プロパティの値を指定します。SecurityGroups
プロパティは、既存の EC2 セキュリティグループと新しいセキュリティグループを指定します。Ref
関数は、スタックテンプレートの他の場所で宣言されている AWS::EC2::SecurityGroup リソース myNewEC2SecurityGroup
の ID を取得します。
起動テンプレートには、カスタムユーザーデータのセクションが含まれています。このセクションでは、インスタンスの起動時に実行される構成タスクとスクリプトを渡すことができます。この例では、ユーザーデータは AWS Systems Manager Agent をインストールし、エージェントを起動します。
起動テンプレートには、インスタンスで実行中のアプリケーションが、ユーザーの代わりにアクションを実行できるようにする IAM ロールも含まれています。この例では、起動テンプレートの AWS::IAM::Role リソースを示しており、IamInstanceProfile
プロパティを使用して IAM ロールを指定します。Ref
関数は、AWS::IAM::InstanceProfile リソース myInstanceProfile
の名前を取得します。IAM ロールのアクセス許可を設定するには、ManagedPolicyArns
プロパティの値を指定します。
JSON
{
"Resources":{
"myLaunchTemplate":{
"Type":"AWS::EC2::LaunchTemplate",
"Properties":{
"LaunchTemplateName":{ "Fn::Sub": "${AWS::StackName}-launch-template" },
"LaunchTemplateData":{
"ImageId":"ami-02354e95b3example
",
"InstanceType":"t3.micro
",
"IamInstanceProfile":{
"Name":{
"Ref":"myInstanceProfile"
}
},
"SecurityGroupIds":[
{
"Ref":"myNewEC2SecurityGroup
"
},
"sg-083cd3bfb8example
"
],
"UserData":{
"Fn::Base64":{
"Fn::Join": [
"", [
"#!/bin/bash\n
",
"cd /tmp\n
",
"yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm\n
",
"systemctl enable amazon-ssm-agent\n
",
"systemctl start amazon-ssm-agent\n
"
]
]
}
},
"TagSpecifications":[
{
"ResourceType":"instance",
"Tags":[
{
"Key":"environment
",
"Value":"development
"
}
]
},
{
"ResourceType":"volume",
"Tags":[
{
"Key":"environment
",
"Value":"development
"
}
]
}
]
}
}
},
"myInstanceRole":{
"Type":"AWS::IAM::Role",
"Properties":{
"RoleName":"InstanceRole",
"AssumeRolePolicyDocument":{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":[
"ec2.amazonaws.com"
]
},
"Action":[
"sts:AssumeRole"
]
}
]
},
"ManagedPolicyArns":[
"arn:aws:iam::aws:policy/myCustomerManagedPolicy
"
]
}
},
"myInstanceProfile":{
"Type":"AWS::IAM::InstanceProfile",
"Properties":{
"Path":"/",
"Roles":[
{
"Ref":"myInstanceRole"
}
]
}
}
}
}
YAML
---
Resources:
myLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: !Sub ${AWS::StackName}-launch-template
LaunchTemplateData:
ImageId: ami-02354e95b3example
InstanceType: t3.micro
IamInstanceProfile:
Name: !Ref myInstanceProfile
SecurityGroupIds:
- !Ref myNewEC2SecurityGroup
- sg-083cd3bfb8example
UserData:
Fn::Base64: !Sub |
#!/bin/bash
cd /tmp
yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
TagSpecifications:
- ResourceType: instance
Tags:
- Key: environment
Value: development
- ResourceType: volume
Tags:
- Key: environment
Value: development
myInstanceRole:
Type: AWS::IAM::Role
Properties:
RoleName: InstanceRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'ec2.amazonaws.com'
Action:
- 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/myCustomerManagedPolicy
'
myInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: '/'
Roles:
- !Ref myInstanceRole