如何使用用户变量在打包器中配置snapshot_users选项

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

我有一个packer .json文件,它管理几个不同AMI版本的构建/配置。每个AMI之间的不同是通过将不同的base-config.json变量集传递给packer来配置的,具体取决于更改的内容(例如,我有一个base_config-us-west-1.json和base_config-us-east-2。 json,并选择一个,以填充vpc_id,subnet_id和security_group_id字段)。

现在我需要构建一个AMI,它使用kms_key_id作为外部account_id,并将对新创建的快照的访问权限授予拥有该密钥的account_id。

如果.json只是用于这个新的AMI,我可以很容易地将"snapshot_users" : [ "{{user external_account_id}}" ]添加到json并完成它。但是,即使在.json中使用"snapshot_users" : [ "" ],也会导致烘焙失败并显示错误“无法共享使用默认KMS密钥加密的快照”问题,如果使用默认的kms_key_id(与"kms_key_id": ""一样)。

是否有任何方法我只能通过指定给packer命令的某些条件将snapshot_users选项插入builders部分,或者我不得不使用ec2-api-tools编写脚本以更改构建ami的权限, bake已经完成(有多个完整的.json文件,构建不同的AMI不是一个选项)。

也许,这也是一个打包程序错误,因为打包器应该识别snapsho_users数组是否为空,或者只包含空字符串,它可以被忽略。

json packer amazon-ebs
2个回答
0
投票

Packer将,上的变量拆分为数组。所以你可以定义:

{
  "variables": {
    "snap_users": ""
  },
  "builders": [
    {
      "type": "amazon-ebs",
      "snapshot_users": "{{user `snap_users`}}"
    }
  ]
}  

0
投票

从Packer文档:

region_kms_key_ids(字符串映射) - 将ami复制到的区域映射,以及用于加密该区域的自定义kms密钥id(别名或arn)。密钥必须与ami_regions中提供的区域匹配。如果您只想使用默认ID加密,可以坚持使用kms_key_id和ami_regions。如果您希望使用该区域的默认密钥ID加密区域,则可以在此映射中使用空字符串“”而不是密钥ID。 (例如“us-east-1”:“”)但是,如果您将此密钥ID与snapshot_users结合使用,则无法使用默认密钥ID - 在这种情况下,您必须使用自定义密钥。有关有效格式,请参阅AWS API文档中的KmsKeyId - CopyImage。

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