Json 如何在cloudformation中更改默认根EBS大小?[美国焊接学会]

Json 如何在cloudformation中更改默认根EBS大小?[美国焊接学会],json,amazon-web-services,amazon-ebs,amazon-cloudformation,Json,Amazon Web Services,Amazon Ebs,Amazon Cloudformation,考虑到cloudformation的在线文档和解决方案数量较少,我决定解决一个常见问题,即更改通过cloudformation模板启动的EBS卷的默认大小 默认情况下,启动的实例的大小为8GB,如果您想知道如何根据自己的喜好将其更改为正确的解决方案,那么您将获得正确的解决方案 有两种方法可以避免这个问题 解决方案1:使用VolumeAttachment创建新卷(方式不正确) 在这里,我创建了一个新卷,并尝试将其附加到不起作用的实例。(CF模板未能启动) 解决方案2。块设备映射(正确的方式) 使用

考虑到cloudformation的在线文档和解决方案数量较少,我决定解决一个常见问题,即更改通过cloudformation模板启动的EBS卷的默认大小

默认情况下,启动的实例的大小为8GB,如果您想知道如何根据自己的喜好将其更改为正确的解决方案,那么您将获得正确的解决方案

有两种方法可以避免这个问题

解决方案1:使用VolumeAttachment创建新卷(方式不正确)

在这里,我创建了一个新卷,并尝试将其附加到不起作用的实例。(CF模板未能启动)

解决方案2。块设备映射(正确的方式)

使用BlockDeviceMappings是正确的方法

 "BlockDeviceMappings": [
          {
            "DeviceName": "/dev/xvda",
            "Ebs": {
              "VolumeType": "io1",
              "Iops": "300",
              "DeleteOnTermination": "false",
              "VolumeSize": "30"
            }
          }
        ],

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

因此,考虑到您有多个操作系统并且希望增加EBS卷的默认大小,最终的解决方案是使用Fn::If intrinsive function将块设备映射的“
DeviceName
”属性设置为“
/dev/xvda
”,如果所选操作系统是Amazon Linux,否则将设置为其他操作系统的“
/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运行时不会出现任何错误。
如果您仍然有任何错误,请检查您的模板并正确验证它

忘记了我之前的评论,我发现您需要添加一个条件部分。您能否显示您的条件部分以了解您如何决定“Amazon AMI”的值“设置为true吗?嗨@CarlR我没有使用条件部分,我只是使用if语句来决定操作系统类型。”。我的模板从参数部分中允许的值中获取OS名称,这些值在下面提到的条件中进一步使用<代码>“Fn::If”:[//If”--此处为亚马逊操作系统名称--“,//然后为“/dev/xvda”,“使用xvda”/dev/sda1”//或使用sda1]
相关问题-启动期间是否还需要在用户数据中运行“growpart”和“resize2fs”?设备命名
 "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"
            }
          }
        ]