こんにちは、ディーネットの山田です。
CloudFormationでEC2を構築する際、タグの割り当てについて少しはまったので解消方法を交えて紹介したいと思います。
目次
はじめに
CloudFormationでEC2を構築する機会があり、CloudFormationでEC2を構築した場合以下のような問題がありました。
- EBSのルートボリュームにタグを付けることができない
実際にCloudFormationでEC2を構築してみる
EC2を構築するyaml
AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 Template Blog Demo
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0b7546e839d7ace12
KeyName: {KEYPAIR}
InstanceType: t3.small
DisableApiTermination: true
CreditSpecification:
CPUCredits: standard
BlockDeviceMappings:
- DeviceName: '/dev/xvda'
Ebs:
VolumeType: gp3
VolumeSize: 30
DeleteOnTermination: true
Encrypted: true
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: subnet-XXXXXXXX
GroupSet:
- sg-XXXXXXXX
Tags:
- Key: Name
Value: demo-ec2-instance
構築結果
解決方法
EC2の起動テンプレートを先にCloudFormationで作成することで、この問題を解消することができます。
EC2のユーザーデータを使って無理やりタグをつける方法もありますが、IAM権限をEC2に渡す必要がありあまりセキュアではないため起動テンプレートを利用します。
EC2の起動テンプレートを構築するyaml
AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 Template Blog Demo
Resources:
EC2LaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: ec2-launch-template
LaunchTemplateData:
TagSpecifications:
- ResourceType: instance
Tags:
- Key: Name
Value: demo-ec2-instance
- ResourceType: volume
Tags:
- Key: Name
Value: demo-ec2-instance
- ResourceType: network-interface
Tags:
- Key: Name
Value: demo-ec2-instance
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
VolumeType: gp3
VolumeSize: 30
DeleteOnTermination: true
Encrypted: true
Iops: 3000
Throughput: 125
KeyName: {KEYPAIR}
NetworkInterfaces:
- AssociatePublicIpAddress: false
DeleteOnTermination: true
DeviceIndex: 0
SubnetId: subnet-XXXXXXXX
Groups:
- sg-XXXXXXXX
EbsOptimized: false
ImageId: ami-0b7546e839d7ace12
Monitoring:
Enabled: False
InstanceType: t3.small
CreditSpecification:
CpuCredits: "standard"
DisableApiTermination: true
EC2を構築するyaml
AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 Template Blog Demo
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
LaunchTemplate:
LaunchTemplateId: !Ref EC2LaunchTemplate
Version: !GetAtt EC2LaunchTemplate.LatestVersionNumber
DisableApiTermination: true
構築結果
参考資料
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ