如何在首次启动时使用 cloud-init 配置 AWS EBS 卷?

Gra*_*ett 5 amazon-ebs amazon-web-services cloud-init

Cloud-init 提供了 disk_setup、fs_setup 和 mounts 模块来分区、格式化和将卷挂载到虚拟机,但是这些选项在http://cloudinit.readthedocs.org和 AWS上都没有记录。

是否存在 cloud-init 配置的功能示例,该示例将在 AWS 上对单个 EBS 卷进行分区、格式化和挂载到配置如下的实例:

"Volume" : {
  "Type" : "AWS::EC2::Volume",
  "Properties" : {
    "Size" : "100",
    "VolumeType" : "gp2",
    "AvailabilityZone" : { "Fn::GetAtt" : [ "ServerInstance", "AvailabilityZone" ] }
  },
  "DeletionPolicy" : "Delete"
},
"MountVolume" : {
  "Type" : "AWS::EC2::VolumeAttachment",
  "Properties" : {
    "InstanceId" : { "Ref" : "ServerInstance" },
    "VolumeId"  : { "Ref" : "Volume" },
    "Device" : "/dev/sdh"
  }
},
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最接近的是以下内容(更正了语法问题):

disk_setup:
  /dev/xvdh:
    layout: true
    overwrite: false
    table_type: 'mbr'
fs_setup: 
  - label: data
    device: /dev/xvdh0
    filesystem: ext4
mounts:
- [ xvdh0, /opt/data ]
Run Code Online (Sandbox Code Playgroud)

根据 cloud-init-output.log 尝试分区失败,如下所示:

2015-12-08 15:23:11,534 - util.py[WARNING]: Failed partitioning operation
'list' object has no attribute 'splitlines'
Run Code Online (Sandbox Code Playgroud)

(由于未记录的原因,尝试创建名为 /dev/sdh 的卷会导致分区出现名为 /dev/xvdh,因此命名不匹配)

小智 3

我知道这已经很旧了,但这是我想到的:

mounts:
    - [ "LABEL=rkt", "/var/lib/rkt" ]

fs_setup:
    ## rkt
    -   device: /dev/xvdg
        partition: none
        label: rkt
        filesystem: ext4
Run Code Online (Sandbox Code Playgroud)

它格式化/dev/xvdg(未分区)为 ext4 并相应地标记它。

我必须添加disk-setupcloud_init_modules列表中/etc/cloud/cloud.cfg;默认情况下它不存在,因此fs_setup(由 处理cc_disk_setup)不会有任何影响。

  • 自 2018 年和 Amazon Linux 2 起,“disk_setup”在“mounts”之前运行。对于“ECS 优化”AMI 也是如此。 (2认同)