Не удается скопировать изображение из-за загадочной ошибки в коде EC2 BillingProduct.

Я пытаюсь скопировать образ EC2 с целью его шифрования.

Командная строка, которую я выдаю:

$ aws ec2 copy-image --name encrypted-kafka-201707121432 \
  --source-region ap-southeast-2 --encrypted --source-image-id ami-2a617249 \
  --region ap-southeast-2 

Это приводит к выдаче следующей ошибки:

An error occurred (InvalidRequest) when calling the CopyImage operation:
  Images with EC2 BillingProduct codes cannot be copied to another AWS account.

Я осмотрелся и понял, что эта ошибка обычно возникает при копировании AMI Windows (например, здесь), и это похоже на эту проблему на SO (здесь).

Однако этот образ не из Marketplace, и это не Windows AMI, и в нем нет кодов продуктов:

$ aws ec2 describe-images --image-ids ami-2a617249 --region ap-southeast-2 \
    --query '.Images[].ProductCodes'
[]

Сравните это с другим, который делает:

$ aws ec2 describe-images --image-ids ami-00280263 --region ap-southeast-2 \
    --query '.Images[].ProductCodes'
[
  {
    "ProductCodeType": "marketplace",
    "ProductCodeId": "dsli9z1o9amfv5g2hsmdj1pph"
  }
]

Образ был запечен с помощью Packer.

У меня нет идей. Почему это происходит - я что-то не так делаю или это недокументированное поведение?


person Alex Harvey    schedule 12.07.2017    source источник
comment
Был ли экземпляр сгенерирован из AMI экземпляра Marketplace или он каким-либо образом связан с экземпляром Marketplace? См. также serverfault. com/questions/775946/ и blog.open-tribute.org/2017/04/18/ami-copy-failed-billingproduct   -  person John Rotenstein    schedule 12.07.2017
comment
Насколько мне известно, то есть, если я не был введен в заблуждение, нет. Я предполагаю, что для того, чтобы исключить это, мне нужно будет полностью выполнить все вышестоящие AMI-выпечки самостоятельно, или есть способ тестирования?   -  person Alex Harvey    schedule 12.07.2017
comment
Оказывается, все-таки да. Полное объяснение ниже.   -  person Alex Harvey    schedule 14.07.2017


Ответы (1)


Оказывается, потомок этого AMI появился на Amazon Marketplace.

Упрощенная версия конвейера выпечки:

Аккаунт А:

Marketplace AMI (ami-xxxxxxxx) -> сборка упаковщика (ami-yyyyyyyy) -> поделиться с учетной записью B

Аккаунт Б:

Затем я выдал:

aws ec2 copy-image --encrypted --source-image ami-yyyyyyyy

И получил:

An error occurred (InvalidRequest) when calling the CopyImage operation:
  Images with EC2 BillingProduct codes cannot be copied to another AWS account.

Из учетной записи B я мог проверить владельца, а именно учетную запись, которая поделилась со мной:

$ aws ec2 describe-images --image-id ami-yyyyyyyy --region ap-southeast-2 \
>   --query 'Images[0].OwnerId'

Это вернуло 16-значный идентификатор учетной записи учетной записи A.

На этом этапе полезно понять, что создание AMI с помощью Packer приводит к очевидной потере кодов продуктов. Однако эти коды продуктов остаются, и служба поддержки Amazon может их видеть. Для подтверждения этой части требуется звонок в службу поддержки Amazon.

Чтобы обойти это, я теперь поддерживаю скрипт encrypt_ami на Python или Bash (AWS CLI), который можно использовать .

person Alex Harvey    schedule 14.07.2017
comment
Таким образом, вы делитесь образом, раскручиваете его и создаете свою копию из работающего экземпляра, а не просто делаете копию образа. - person Len Jaffe; 23.10.2018