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

Posted

技术标签:

【中文标题】如何更改 cloudformation 中的默认根 EBS 大小? [AWS]【英文标题】:How to change default root EBS size in cloudformation? [AWS] 【发布时间】:2017-02-07 16:43:38 【问题描述】:

考虑到 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 否则它将无法工作。 如果所选操作系统是 Amazon Linux,请将块设备映射的“DeviceName”属性设置为“/dev/xvda”,否则对于 Ubuntu 或 CentOS,请将其设置为“/dev/sda1” /p>

【问题讨论】:

启动时是否还需要在用户数据中运行“growpart”和“resize2fs”? 设备命名aws doc 【参考方案1】:

因此,考虑到您有多个操作系统并且想要增加 EBS 卷的默认大小的最终解决方案,请使用 Fn::If 内部函数 设置块的“DeviceName”属性如果所选操作系统是 Amazon Linux,则设备映射到“/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"
            
          
        ]

这应该让您的 cloudformation 没有任何错误。 如果您仍然有任何错误,请检查您的模板并正确验证它

【讨论】:

忘记了我之前的评论,我看到你需要添加一个条件部分。您能否显示您的条件部分以查看您如何决定“Amazon-AMI”的值是否设置为 true? 嗨@CarlR我没有使用条件部分,我只是使用if语句来决定操作系统类型。我的模板从参数部分中的允许值中获取操作系统名称,这些值在下面提到的条件下进一步使用。 "Fn::If": [ //If "--Amazon OS name here--", //then "/dev/xvda", //use xvda "/dev/sda1" // or use sda1 ] 相关问题 - ***.com/q/59586518/3317808 请提供任何 YAML 示例。

以上是关于如何更改 cloudformation 中的默认根 EBS 大小? [AWS]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 CloudFormation 设置 EC2 实例根卷的标签

如何更改 lambda 的默认参数值?

如何根据 IAM 角色 CloudFormation 模板中的参数提供不同的条件

CloudFormation 模板设置 S3 存储桶默认加密 [重复]

如何在亚马逊 cloudformation 模板中启动时更改 Windows 主机名

我应该如何通过 cloudformation 部署我的 aws 状态机?