【问题标题】:attach ebs volume with packer during build time在构建期间将 ebs 卷与打包程序连接
【发布时间】:2014-09-10 20:43:15
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    所以看起来 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. 正常挂载(挂载前先休眠几秒,挂载需要一点时间。否则看不到挂载失败。)

    完成。

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

    谢谢。

    【讨论】:

    • 嗨,您有机会发布此解决方案的完整示例吗?
    【解决方案2】:

    我认为ami_block_device_mappings 是您所需要的。

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

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

    【讨论】:

    • 谢谢。这确实为我澄清了一些事情。我仍然不明白如何指定要安装的 ebs 卷。我认为这允许您创建和附加卷,但是如何附加现有卷?我没有看到指定卷 ID 的选项。像这样的东西:{ ` "device_name": "/dev/sdg",` ` "volume_id": "vol-xxxxx"` ` }`
    • 我没有看到这样的选项,但如果您有该卷的快照,您可以创建一个带有附加 EBS 卷的 AMI。在这种情况下,请使用“snapshot_id”选项。
    猜你喜欢
    • 2017-06-18
    • 2015-01-18
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多