cloudformationのオンラインドキュメントとソリューションの量が少ないことを考慮して、cloudformationテンプレート経由で起動されるEBSボリュームのデフォルトサイズの変更に関する一般的な問題に対処することにしました
デフォルトでは、起動されたインスタンスのサイズは8 GBであり、疑問に思った場合は、適切なソリューションに到達するよりも好みに合わせて変更できます。
問題を回避するには2つの方法があります
解決策1:VolumeAttachmentで新しいボリュームを作成する(間違った方法)
"EBS" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "100",
"AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ] }
}
},
"MountPoint" : {
"Type" : "AWS::EC2::VolumeAttachment",
"Properties" : {
"InstanceId" : { "Ref" : "EC2Instance" },
"VolumeId" : { "Ref" : "EBS" },
"Device" : "/dev/sda1"
}
}
ここで、新しいボリュームを作成し、動作しなかったインスタンスにアタッチするために疲れました(CFテンプレートの起動に失敗しました)
解決策2.ブロックデバイスマッピング(正しい方法)
BlockDeviceMappingsを使用するのが正しいアプローチです
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeType": "io1",
"Iops": "300",
"DeleteOnTermination": "false",
"VolumeSize": "30"
}
}
],
デバイス名を/ dev/xvda1のままにしないと、機能しません。 代わりに、選択したOSがAmazon Linuxの場合、ブロックデバイスマッピングの「DeviceName」プロパティを「/ dev/xvda」に設定します。それ以外の場合、UbuntuまたはCentOSの場合は「/ dev/sda1」に設定します
したがって、複数のOSがあり、EBSボリュームのデフォルトサイズを大きくすることを考慮した最終的な解決策は、ブロックの「DeviceName
」プロパティを設定するためにFn :: If組み込み関数を使用することです選択したOSがAmazon Linuxの場合、「/dev/xvda
」へのデバイスマッピング。それ以外の場合、他のOSの「/dev/sda1
」に設定されます。
スニペットは次のようになります。
"BlockDeviceMappings": [
{
"DeviceName": {
"Fn::If": [
"Amazon-AMI", // condition satisfying that if Amazon is OS then use /dev/xvda or else /dev/sda1
"/dev/xvda",
"/dev/sda1"
]
},
"Ebs": {
"VolumeType": "io1",
"Iops": "300",
"DeleteOnTermination": "false",
"VolumeSize": "100"
}
}
]
これにより、エラーなしでcloudformationを実行できます。それでもエラーが発生する場合は、テンプレートを確認し、適切に検証してください