この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!
コンサルティング部の枡川です。
起動テンプレートを経由することで、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を作成する際には是非起動テンプレートの使用も検討してみて下さい。
その他のメリットについても下記ブログにもまとめられています。