如何更改 cloudformation 中的默认根 EBS 大小? [AWS]
How to change default root EBS size in cloudformation? [AWS]
考虑到 cloudformation 的在线文档和解决方案数量较少,我决定解决一个常见问题,即更改通过 cloudformation 模板启动的 EBS 卷的默认大小
默认情况下,启动的实例大小为 8GB,如果您想知道如何根据您的喜好将其更改为正确的解决方案。
有两种方法可以避免这个问题
解决方案 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是亚马逊Linux,则将块设备映射的"DeviceName"属性设置为“/dev/xvda”,否则为Ubuntu 或 CentOS 将其设置为“/dev/sda1”
所以最终的解决方案考虑到你有多个 OS 并且你想增加 EBS 卷的默认大小使用 Fn::If intrinsic function 来设置“DeviceName
”块设备的属性映射到“/dev/xvda
”如果选择的OS是AmazonLinux,否则会设置为“/dev/sda1
" 另一个 OS.
片段看起来像这样:
"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 顺利进行。
如果您仍然有任何错误,请检查您的模板并正确验证它
考虑到 cloudformation 的在线文档和解决方案数量较少,我决定解决一个常见问题,即更改通过 cloudformation 模板启动的 EBS 卷的默认大小
默认情况下,启动的实例大小为 8GB,如果您想知道如何根据您的喜好将其更改为正确的解决方案。
有两种方法可以避免这个问题
解决方案 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是亚马逊Linux,则将块设备映射的"DeviceName"属性设置为“/dev/xvda”,否则为Ubuntu 或 CentOS 将其设置为“/dev/sda1”
所以最终的解决方案考虑到你有多个 OS 并且你想增加 EBS 卷的默认大小使用 Fn::If intrinsic function 来设置“DeviceName
”块设备的属性映射到“/dev/xvda
”如果选择的OS是AmazonLinux,否则会设置为“/dev/sda1
" 另一个 OS.
片段看起来像这样:
"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 顺利进行。 如果您仍然有任何错误,请检查您的模板并正确验证它