4

我不确定这是否是正确的方法,但我想做的是通过打包程序缩短图像的构建时间。所需的步骤之一是复制大约 10GB 的数据并使其成为图像的一部分。目前我正在使用 shell 配置程序将其 sftp 到图像中。这需要很长时间。相反,我希望这些数据已经在 EBS 卷中,可以在构建时附加。由于它将作为块设备安装在亚马逊自己的网络中,因此传输将比 sftp 快得多。

我尝试在打包器中寻找这种方法,但那里没有太多。我将尝试看看是否可以使用 amazon-ebs 构建器中的 ami_block_device_mappings 可选参数来附加 ebs 卷。

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

4

2 回答 2

3

所以看起来shell配置器是要走的路……现在。shell 配置器似乎可以解决这样的问题:)。不过,在某些时候在 amazon-ebs 构建器中有一个参数会很好。例如像“attach_ebs_volume”这样的东西。无论如何,我是这样做的:

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

完毕。

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

谢谢。

于 2014-09-19T19:46:55.980 回答
1

我认为ami_block_device_mappings是您所需要的。

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

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

于 2015-02-10T16:51:09.617 回答