AWS-CloudFormation

CloudFormationでEC2インスタンスを構築する方法について

こんにちは、ディーネットの山田です。

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

構築結果


参考資料

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA