Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Packer:我如何创建一个AWS AMI,其中包含具有不同kms密钥的多个块设备_Amazon Web Services_Packer - Fatal编程技术网

Amazon web services Packer:我如何创建一个AWS AMI,其中包含具有不同kms密钥的多个块设备

Amazon web services Packer:我如何创建一个AWS AMI,其中包含具有不同kms密钥的多个块设备,amazon-web-services,packer,Amazon Web Services,Packer,我正在尝试使用packer版本1.3.2烘焙一个具有多个块设备的AMI,其中每个块设备使用不同的KMS密钥加密,这与用于加密引导设备的KMS密钥不同 起初,我开始认为AWS可能不支持这一点;然而,通过使用AWS控制台,我能够启动一个EC2实例,其中AMI和AMI具有以前加密的卷,并添加另一个使用不同KMS密钥的卷。然后从中创建一个AMI。然后,我使用新的AMI启动了另一个EC2实例,并维护了不同的KMS密钥。这是因为它确实使用不同的KMS密钥为附加卷创建了新快照 我尝试过使用AmazonEBS构

我正在尝试使用packer版本1.3.2烘焙一个具有多个块设备的AMI,其中每个块设备使用不同的KMS密钥加密,这与用于加密引导设备的KMS密钥不同

起初,我开始认为AWS可能不支持这一点;然而,通过使用AWS控制台,我能够启动一个EC2实例,其中AMI和AMI具有以前加密的卷,并添加另一个使用不同KMS密钥的卷。然后从中创建一个AMI。然后,我使用新的AMI启动了另一个EC2实例,并维护了不同的KMS密钥。这是因为它确实使用不同的KMS密钥为附加卷创建了新快照

我尝试过使用AmazonEBS构建器,将ami_块_设备_映射与launch_块_设备_映射结合使用,从而实现许多不同的变体。任何组合最多只能使用boot KMS键生成绑定到AMI的最终卷快照。我注意到,如果我在launch_block_device_映射中指定备用kms_key_ID,如下所示:

"launch_block_device_mappings": [
    {
      "device_name": "/dev/sdb",
      "volume_type": "gp2",
      "volume_size": "{{user `var_volume_size`}}",
      "delete_on_termination": true,
      "kms_key_id": "{{user `kms_key_arn_var`}}",
      "encrypted": true
    },
    {
      "device_name": "/dev/sdc",
      "volume_type": "gp2",
      "volume_size": "{{user `varlog_volume_size`}}",
      "delete_on_termination": true,
      "kms_key_id": "{{user `kms_key_arn_varlog`}}",
      "encrypted": true
    }, ...
它使用备用kms密钥创建临时快照,但它们将被替换为使用最终AMI的启动kms密钥加密的新快照,而不管我是否还包括AMI\u块\u设备\u映射。即使我在启动时将delete_on_termination设置为false

然后,我从另一个角度来看这一点,尝试从独立于amazon EBS builder的EBS卷创建快照。使用amazon EBS卷生成器,我创建了空EBS卷:

"type": "amazon-ebsvolume",
...
      "ebs_volumes": [
    {
      "device_name": "/dev/sdb",
      "volume_type" : "{{user `var_volume_type`}}",
      "volume_size": 10,
      "delete_on_termination": false,
      "kms_key_id": "{{user `kms_key_arn_var`}}",
      "encrypted": true,
      "tags" : {
        "Name" : "starter-volume-var",
        "purpose" : "starter"
      }    
    },
    {
      "device_name": "/dev/sdc",
      "volume_type" : "{{user `varlog_volume_type`}}",
      "volume_size": 5,
      "delete_on_termination": false,
      "kms_key_id": "{{user `kms_key_arn_varlog`}}",
      "encrypted": true,
      "tags" : {
        "Name" : "starter-volume-varlog",
        "purpose" : "starter"
      }    
    },...
然后从它们创建快照,然后尝试使用这些快照的快照id,而不是在amazon ebs中创建内联卷

"launch_block_device_mappings": [
    {
      "device_name": "/dev/sdb",
      "volume_type" : "{{user `var_volume_type`}}",
      "snapshot_id": "snap-08f2bed8aaa964469",
      "delete_on_termination": true
    },
    {
      "device_name": "/dev/sdc",
      "volume_type" : "{{user `varlog_volume_type`}}",
      "snapshot_id": "snap-037a4a6255e8d161d",
      "delete_on_termination": true
    }
  ],..
执行此操作时,会出现以下错误:

2018/11/01 03:04:23 ui error: ==> amazon-ebs: Error launching source instance: InvalidBlockDeviceMapping: snapshotId can only be modified on EBS devices
我尝试与快照ID一起重复加密设置:

      "launch_block_device_mappings": [
    {
      "device_name": "/dev/sdb",
      "volume_type" : "{{user `var_volume_type`}}",
      "snapshot_id": "snap-08f2bed8aaa964469",
      "kms_key_id": "{{user `kms_key_arn_var`}}",
      "encrypted": true,
      "delete_on_termination": true
    },
    {
      "device_name": "/dev/sdc",
      "volume_type" : "{{user `varlog_volume_type`}}",
      "snapshot_id": "snap-037a4a6255e8d161d",
      "kms_key_id": "{{user `kms_key_arn_varlog`}}",
      "encrypted": true,
      "delete_on_termination": true
    }
  ],...
这将导致不同的错误:

==> amazon-ebs: Error launching source instance: InvalidParameterDependency: The parameter KmsKeyId requires the parameter Encrypted to be set.
但我显然有“加密”:真的吗


我已经没有想法了,觉得这是可能的,只是显然不够聪明,看不到它。

来这里是因为我有同样的问题。我通过将设备移动到
/dev/xvdf
解决了这个问题

进一步深入研究我使用的源AMI有以下与之相关的块映射,这些临时磁盘没有显示在控制台中,因此我花了一些时间来了解发生了什么,一个重要的线索是,我甚至在定义磁盘之前就可以挂载磁盘(我最初将它定义为一个AMI映射,而不是错误地启动,但我的脚本中已经有了挂载)

我注意到您没有列出源AMI,但希望这能有所帮助

Block devices: /dev/sda1=snap-0b399e12978e2290e:8:true:standard, /dev/xvdb=ephemeral0, /dev/xvdc=ephemeral1