2014-09-10 50 views
2

我不确定这是否是正确的方法,但是我期望做的是缩短包装工制作图像的时间。其中一个步骤是复制一些10GB的数据并将其作为图像的一部分。目前我正在使用一个shell供应商将这个映射到映像中。这需要很长时间。相反,我想让这些数据已经存储在EBS卷中,并可以在构建时附加。由于它将作为一个块设备安装在亚马逊自己的网络中,因此传输速度将比sftp快得多。在编译期间用包装器附加ebs的体积

我试过在封隔器中搜索这样一种方法,但没有太多。我将尝试查看是否可以在amazon-ebs构建器中使用ami_block_device_mappings可选参数来附加ebs卷。

如果有更好的方法,我不知道请让我知道。谢谢。

回答

2

所以它看起来像外壳提供者是现在走的路。外壳提供者似乎像这样的东西赶上:)。尽管如此,在amazon-ebs构建器中有一个参数会很好。例如像“attach_ebs_volume”。无论如何,这是我是如何做到的:

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

完成。

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

谢谢。

+0

嗨,你可以发布这个解决方案的一个完整的例子任何机会呢? – asdoylejr 2018-02-04 21:15:53

2

我认为ami_block_device_mappings是你需要的。

心中已经也发现了这个例子帮助:

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

+0

谢谢。这确实为我澄清了一点。我仍然没有得到我如何指定要安装的ebs卷。我认为这允许您创建和附加音量,但您如何附加现有音量?我没有看到指定卷ID的选项。事情是这样的: ''{' “DEVICE_NAME”: “的/ dev/SDG”,'' “volume_id”: “第一卷-XXXXX”'' }' – 2015-02-12 00:31:00

+0

我没有看到这样的选择,但你可以如果您有该卷的快照,请创建带有附加EBS卷的AMI。在这种情况下,使用选项“snapshot_id”。 – user1783757 2015-02-12 09:06:15