如何在cloudformation中更改默认的根EBS大小?[AWS]

Bha*_*min 21 json amazon-ebs amazon-web-services aws-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"
   }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我创建了一个新卷并且厌倦了将它附加到不起作用的实例.(CF模板无法启动)

解决方案2.阻止设备映射(正确方式)

使用BlockDeviceMappings是正确的方法

 "BlockDeviceMappings": [
          {
            "DeviceName": "/dev/xvda",
            "Ebs": {
              "VolumeType": "io1",
              "Iops": "300",
              "DeleteOnTermination": "false",
              "VolumeSize": "30"
            }
          }
        ],
Run Code Online (Sandbox Code Playgroud)

不要将设备名称保留为/ dev/xvda1,否则它将无法正常工作.相反,如果所选操作系统是Amazon Linux,则将块设备映射的"DeviceName"属性设置为"/ dev/xvda",否则对于Ubuntu或CentOS将其设置为"/ dev/sda1"

Bha*_*min 19

所以考虑到你有多个操作系统的最终解决方案并且你想增加EBS卷的默认大小使用Fn ::如果选择的操作系统是亚马逊Linux,如果内部函数DeviceName将块设备映射的" "属性设置为" " /dev/xvda否则它将/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"
            }
          }
        ]
Run Code Online (Sandbox Code Playgroud)

这应该可以让您的cloudformation无任何错误.如果您还有任何错误,请检查您的模板并正确验证