AWS - 在飞行中创建卷并将其附加到容器

AWS - Create and attach volume to container in flight

假设我在 AWS 中有一个容器化的批处理作业。它需要挂载一个快照,用它做几个小时的工作,然后关闭。问题是在 template/AMI 创建时,特定快照不是 known/changes。正确的将被标记,并且很容易在 运行 时间查找。如何安装它?

create/attach-volume可以在容器内运行,将快照卷添加到宿主机中。我可以将作业定义为预先有一个挂载点,以便在挂载的卷可用时访问它。问题是,我没有从容器中看到让主机实际安装附加卷的方法,所以它在 /dev,但没有进一步。

原来答案是一根烟斗。从这个答案修改:

将以下内容添加到 user-data 以设置监视器。

mkfifo /var/mount_pipe
while true; do sudo mount $(cat /var/mount_pipe); done &

mount_pipe 绑定安装到容器,命令从容器内发送,如 echo "/dev/sdh /mnt/foo" > /var/pipe

奖励:为确保新安装的卷在容器中可见,您需要将绑定传播设置为 AWS 不直接支持的非私有内容。在作业定义中定义挂载点时,使用

ContainerPath: "/mnt/foo:rslave" # Add a `:` to push extra args.

由于 arg 原样传递给 docker 代理,因此最终产品将为 --volume /mnt/foo:/mnt/foo:rslave。这是未记录的,所以要小心,但我不知道在 AWS 中设置绑定传播参数的另一种方法。