如何在构建期间使用 Packer 附加 EBS 卷?

问题描述 投票:0回答:2

我不确定这是否是正确的方法,但我想要做的是缩短 Packer 构建图像的时间。所需的步骤之一是复制大约 10 GB 的数据并将其作为图像的一部分。

目前我正在使用 shell 配置程序将其通过 SFTP 传输到图像中。这需要很长时间。相反,我希望这些数据已经存在于 EBS 卷中,可以在构建时附加。由于它将作为块设备安装在 Amazon 自己的网络中,因此传输速度将比 SFTP 快得多。

我尝试在 Packer 中寻找这样的方法,但没有太多。我将尝试看看是否可以使用

ami_block_device_mappings
构建器中的
amazon-ebs
可选参数来附加 EBS 卷。

如果有更好的方法我不知道请告诉我。

amazon-web-services amazon-ebs packer
2个回答
4
投票

所以看起来 shell 配置器是目前的最佳选择。 shell 配置程序似乎包罗万象这样的事情:)。不过,在某些时候,在 amazon-ebs 构建器中拥有一个参数会很好。例如,类似“attach_ebs_volume”的内容。无论如何,我是这样做的:

  1. 将 AWS 信息(ebs_volume、instance_id 等)添加到模板的变量部分。我确实从 ENV 中提取了访问密钥和密钥,因此模板中没有详细说明,但其余部分我现在只是在模板中定义。
  2. 使用模板中的provisioners块中的“environment_vars”参数将变量传递到构建机器。
  3. 将 {{.Vars}} 添加到“execute_command”参数,以便在脚本运行之前定义变量。
  4. 安装 aws cli(正在传递的脚本的一部分。)
  5. 通过 wget 从 meta_data 获取构建机器的 instance_id 并分配给环境变量。
  6. 发出 aws cli 命令来附加卷并使用从模板传递的环境变量来填写命令选项以及 wget 命令中的 instance_id。
  7. 正常挂载(挂载前让它休眠几秒钟,挂载需要一点时间。否则它看不到它,挂载将会失败。)

完成。

如果有人有更优雅的方式...请分享。

谢谢。


1
投票

我认为 ami_block_device_mappings 就是您所需要的。

我还发现这个例子很有帮助:

http://grahamc.com/blog/packer-ami-device-volume-types/

© www.soinside.com 2019 - 2024. All rights reserved.