2014-11-18 5 views
1

Ниже приведено приведены два образец коды, которые я пыталсяКак перенести AMI из одного региона в другой с помощью [non -,] Зашифрованных снимков. AMI изменение платформы из окон другого Linux

code1:

import boto3 
session = boto3.session.Session() 
ec2_us_east = session.resource('ec2') 
snap = ec2_us_east.Snapshot('snap-<id>') 
snap.copy(DryRun=False,SourceRegion='us-east-1',SourceSnapshotId=snap.id,Description="testB3Copy",DestinationRegion="us-west-1") 

code2:

import boto3 
ec2_us_east_client = boto3.client('ec2') 
ec2_us_east_client.copy_snapshot(DryRun=False,SourceRegion='us-east-1',SourceSnapshotId=<snap-id>,Description="testB3Copy",DestinationRegion="us-west-1") 

И генерирует то же самое сообщение об ошибке, как показано ниже:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-65-464cba179f87> in <module>() 
----> 1 ec2_us_east_client.copy_snapshot(DryRun=True,SourceRegion='us-east-1',SourceSnapshotId=snap.id,Description="testB3Copy",DestinationRegion="us-west-1") 

/usr/lib/python2.7/site-packages/botocore/client.pyc in _api_call(self, **kwargs) 
    239      endpoint_prefix=service_model.endpoint_prefix, 
    240      operation_name=operation_name), 
--> 241     model=operation_model, params=request_dict 
    242   ) 
    243 

/usr/lib/python2.7/site-packages/botocore/hooks.pyc in emit(self, event_name, **kwargs) 
    150   for handler in handlers_to_call: 
    151    logger.debug('Event %s: calling handler %s', event_name, handler) 
--> 152    response = handler(**kwargs) 
    153    responses.append((handler, response)) 
    154   return responses 

TypeError: copy_snapshot_encrypted() takes exactly 3 arguments (1 given) 

Я не уверен, что такое здесь не так. Согласно документации copy_snapshot принимает 5 аргументов.

Также не уверен, можно ли передать зашифрованный снимок с помощью boto2 +

При переносе ОС Windows AMI из одного региона в другой (путем копирования снимков и регистрируя AMI вручную или с помощью скриптов), окончательное свойство платформы Ами будет установлен как «Другой Linux» вместо «Windows» ПРИМЕЧАНИЕ: окна платформы для других изменений в Linux можно игнорировать, поскольку, когда virtualization_type является hvm, это не имеет значения. VM будет загружаться нормально, так как полностью виртуализированные виртуальные машины загружаются, выполняя mbr.

ответ

1

В настоящий момент Boto (v2 +, 3 +), AWS CLI или консоль Amazon не поддерживают AMI с зашифрованным томом передача между регионами.

Также Boto (v2 +, 3 +) не прозрачно поддерживает передачу МАСС с зашифрованными снимками

ПРИМЕЧАНИЯ: Существует жесткий предел 5 активного переноса снимков, которые, вероятно, создают проблему для функции передачи AMI (Не уверен). Но AWSCLI (последняя версия на сегодняшний день) поддерживает передачу зашифрованных блоков.

Так вот что я сделал. Я использовал AWS CLI для передачи снимков и Python-Boto управлять передачей

1. Shellscript 
    INPUT(CommandlineArgs) takes snapshotID, source region and destination region as input 
    Output snapshotID or <predeterminedstring, eg: TfrFailed>(incase transfer failed due to 5ActiveSnapshotTransferAcrossRegionLimit) 

2. Python (boto) 
    Input(CommandlineArgs) takes AMI_ID(s) 
    Logic: 
    for each ami 
     collect information about snapshots 
    try 
     initiates transfer of each snapshot (by calling shell script which uses AWS CLI) 
    catch exception (output of shell script == <predeterminedstring> 
     retry after sometime (you would be here if you had hit the hard limit of 5 active snapshots 
    finally (once all snapshots are transfered) 
     register a new ami (optionally transfer all tags from source AMI to target AMI) 
     print SRC_AMI_ID "-->" DST_AMI_ID 
    done 
    Output: <SourceLocation_AMI-ID> --> <TargetLocation_AMI-ID 

Примечание: вы можете увидеть, что цель AMI теряет информацию о «платформе», так как, когда мы переносим МАСС таким образом мы не отсылая к файл манифеста, и я не мог найти способ принудительно установить платформу -> «Windows». Но вы можете игнорировать это, и он должен работать нормально, если вы установите «Virtualization_type» как «hvm».

ПРИМЕЧАНИЕ: Если вы сделаете это, и хотите использовать «Получить функцию защиты паролем», вы, вероятно, не повезло, так как это нужно будет платформы, которая будет установлена ​​как «Windows»

упаковывают paravirtual, скорее всего, ваш целевой AMI не будет загружаться, если ваш новый ami не имеет достаточных свойств для PVGRUB

1

Обновление: Boto 3 релиз 0.0.7 теперь должен включать поддержку копирования зашифрованных снимков в клиентский интерфейс Botocore.


Прямо сейчас есть настройки, чтобы помочь с этим методом в Botocore, и он используется AWS CLI. Это еще не доступно в Boto 3. Botocore предоставляет два открытых интерфейсов, новички, являющиеся клиент низкоуровневых подвергаются в Бото 3. Они еще не поддерживают настройки, настроенные здесь:

https://github.com/boto/botocore/blob/develop/botocore/handlers.py#L398

Мы работаем над тем, чтобы получить это, чтобы это и несколько других вызовов просто работали в Boto 3, как и в AWS CLI. Для изменения потребуется изменение и освобождение кода Botocore, а затем оно должно работать только в Boto 3.

+0

Спасибо за ваш комментарий. Я действительно понял это. Как скоро мы можем ожидать boto3 rc. Я пробовал использовать текущий пакет boto3. он очень сильно отличался от boto2 и не смог написать простые коды ... Возможно, я использовал более старую версию, или мой мозг был подключен к способу делать boto2 ... Не могу дождаться перехода на boto3 и узнайте это. – Jayan

+1

Теперь, когда у нас есть KMS для моментальных снимков и томов управления ключами w.r.t, я думаю, было бы немного легче справляться с передачей AMI/Snapshot, поскольку SIGV4 может не отвечать в первую очередь за шифрование блочного устройства. Я уверен, что вы знаете об этом, но на всякий случай ... – Jayan