在构建期间将ebs卷与打包器连接

时间:2014-09-10 20:43:16

标签: amazon-web-services amazon-ebs packer

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

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

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

2 个答案:

答案 0 :(得分:2)

所以看起来shell sheller就是现在的方式。 shell配置器看起来像是这样的东西:)。尽管如此,在amazon-ebs构建器中有一个参数会很好。比如“attach_ebs_volume”之类的东西。不管怎么说,我就是这样做的:

  1. 将AWS信息(ebs_volume,instance_id等..)添加到模板的变量secion。我从ENV中提取访问权限和密钥,因此它不会在模板中拼写出来,但其余的我现在只在模板中定义。
  2. 在模板的配置程序块中使用“environment_vars”参数将变量传递给构建计算机。
  3. 将{{.Vars}}添加到“execute_command”参数中,以便在脚本运行之前定义变量。
  4. 安装aws cli(正在传递的脚本的一部分。)
  5. 通过wget从meta_data获取构建计算机的instance_id并分配给env var。
  6. 发出aws cli命令来附加卷,并使用从模板传递的env变量来填充命令选项以及wget命令中的instance_id。
  7. 正常安装(在安装前让它休眠几秒钟,需要一点时间才能连接。否则它将无法看到它并且安装将失败。)
  8. 完成。

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

    感谢。

答案 1 :(得分:2)

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

我也发现此示例很有用:

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