gp3を使用したEC2をCloudFormationで作成する際にスループットを指定するなら?
こんにちは!
コンサルティング部の枡川です。
起動テンプレートを経由することで、gp3を使用したEC2をCloudFormationで作成する際にスループットを指定することができます。
gp3について
新しいEBSボリュームであるgp3ですが、発表から1年経って使用機会も増えていると思います。
下記記事で紹介されている通り、gp2と同等の性能を確保するという観点ではどのようなパターンでもgp3の方が安くなります。
特別な制約が無ければ、使わない理由は無いとまで言って良いのかもしれません。
gp3のgp2との大きな違いとして、IOPSやスループットを明示的に指定する必要があることが挙げられます。
特にスループットについてはgp2選択時の最大スループットと比較してデフォルトのスループット値が低くなる可能性が高いです。
上記ブログに記載の通り、gp2と同程度まで追加のプロビジョニングをしてもトータルのコストはgp3の方が安くなりますが、スループットについては考慮が必要となります。
上記ブログは本当に参考になるので、まだ読んでいない方は一読をおすすめいたします!
gp3を使用したEC2をCloudFormationで作る時の注意点
gp3を使用したEC2をCloudFormationで作成する際に、スループットを指定することができませんでした。
CloudFormationのAWS::EC2::Instance Ebsで設定できる属性を調べてみます。
たしかにThroughputは存在しません。
- DeleteOnTermination
- Encrypted
- Iops
- KmsKeyId
- SnapshotId
- VolumeSize
- VolumeType
試しに下記テンプレートのようにThroughputを指定してみましたが、そんなものはありませんと怒られました。
EC2: Type: "AWS::EC2::Instance" Properties: ImageId: !Ref AMI InstanceType: !Ref InstanceType KeyName: !Ref KeyName BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeType: gp3 VolumeSize: !Ref EC2VolumeSize DeleteOnTermination: true Iops: 3000 Throughput: 250 SecurityGroupIds: - !Ref EC2SecurityGroup IamInstanceProfile: !Ref myInstanceProfile1 DisableApiTermination: true SubnetId: !Ref EC2Subnet Tags: - Key: Name Value: !Sub ${SystemName}-${EnvironmentName}-ec2
初期値である125MB/sで作成し、負荷テスト等を踏まえて後から調整という形も簡単に行うことができます。
しかし、既存の環境が存在する等で明らかにスループットが足りないと見込まれる際は最初から設定したい時もあると思います。
起動テンプレートを経由して作成する
一方、起動テンプレートを経由することで最初からスループットを指定することが可能でした。
AWS::EC2::LaunchTemplate Ebsで設定できる項目は下記です。
- DeleteOnTermination
- Encrypted
- Iops
- KmsKeyId
- SnapshotId
- Throughput
- VolumeSize
- VolumeType
以上を踏まえて下記テンプレートを実行した所、正しくEC2インスタンスが作成されました。(DeviceNameはAmazon Linux2の場合)
EC2: Type: AWS::EC2::Instance Properties: LaunchTemplate: LaunchTemplateId: !Ref LaunchTemplate Version: 1 SubnetId: !Ref EC2Subnet Tags: - Key: Name Value: !Sub ${SystemName}-${EnvironmentName}-ec2 LaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateData: ImageId: !Ref AMI InstanceType: !Ref InstanceType KeyName: !Ref KeyName BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeType: gp3 VolumeSize: !Ref EC2VolumeSize DeleteOnTermination: true Iops: 3000 Throughput: 250 SecurityGroupIds: - !Ref EC2SecurityGroup IamInstanceProfile: Arn: !GetAtt myInstanceProfile1.Arn DisableApiTermination: true
ボリュームを確認するとたしかに、スループットが250MB/sになっています。
まとめ
起動テンプレートを経由することで、ルートボリュームにgp3を使用したEC2をCloudFormationで作成する際にスループットを指定できます。
その他にもルートボリュームにタグ付けを実施できる等のメリットがあります。
CloudFormationでEC2を作成する際には是非起動テンプレートの使用も検討してみて下さい。
その他のメリットについても下記ブログにもまとめられています。