【小ネタ】LaunchTemplate を利用して、EBS最適化を有効にしたい場合
CloudFormation上で、LaunchTemplateを利用し、EBS最適化を有効にしたい場合の書き方を紹介します。
LaunchTemplateを利用して、EBS最適化を定義しましたが、マネコンの表示上「無効」と表示されてしまいました。
恐らく、マネコン表示上の問題だけだとは思いますが、モヤモヤしましたので、「有効」と表示されるよう検証してみました。
結論
LaunchTemplateと並列でEbsOptimizedを記述することでEBS最適化が(マネコンの表示上も)有効になります。
AWSTemplateFormatVersion: 2010-09-09 Description: My EC2 Parameters: SystemName: Type: String Default: dev KeyName: Description: A Key name to access EC2 Type: AWS::EC2::KeyPair::KeyName Default: # 指定したキー AMI: Type: String Default: ami-08a8688fb7eacb171 InstanceType: Type: String Default: r5.large EC2VolumeSize: Type: Number Default: 8 Resources: InstanceProfile: Type: "AWS::IAM::InstanceProfile" Properties: Path: "/" Roles: - # 指定したロール名 WebServerLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateData: ImageId: !Ref AMI InstanceType: !Ref InstanceType KeyName: !Ref KeyName BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeType: "gp2" VolumeSize: !Ref EC2VolumeSize DeleteOnTermination: true # EbsOptimized: true IamInstanceProfile: Arn: !GetAtt InstanceProfile.Arn WebServer: Type: AWS::EC2::Instance Properties: LaunchTemplate: LaunchTemplateId: !Ref WebServerLaunchTemplate Version: 1 SubnetId: # 指定したサブネット EbsOptimized: true Tags: - Key: Name Value: !Sub ${SystemName}-web-server
LaunchTemplateData配下に定義した場合
リファレンスでは、LaunchTemplateData配下に 、EbsOptimized
が定義できます。しかしながら、こちらに定義した場合、実際に構築されたEC2をマネコンで確認してみると、EBS最適化は「無効」と表示されていました(恐らく、表示上の問題)。
しかしながら、一旦「インスタンスを停止し、インスタンスタイプを変更」を押してみると、「このインスタンスタイプでは、デフォルトでEBS最適化が有効になっています。」と表示されています。EBS最適化(デフォルト)の章を見ても、r5.largeは含まれています。 ※そのまま何も変更せず、「適用」を押すことで、表示上も「有効」にすることができます。
最後に
LaunchTemplateプロパティと並列にEbsOptimized
を定義することで「有効」表示がされました。もし、同じように悩んでいる方の助けになりましたら幸いです。