Almacenar y restaurar una AMI mediante S3 - Amazon Elastic Compute Cloud

Almacenar y restaurar una AMI mediante S3

Puede almacenar una Imagen de máquina de Amazon (AMI) en un bucket de Amazon S3, copiar la AMI en otro bucket de S3 y, a continuación, restaurarla desde el bucket de S3. Al almacenar y restaurar una AMI usando buckets de S3, puede copiar AMI de una partición de AWS a otra, por ejemplo, desde la partición comercial principal a la partición AWS GovCloud (US). También puede hacer copias de archivo de AMI almacenándolas en un bucket de S3.

Las API admitidas para almacenar y restaurar una AMI usando S3 son CreateStoreImageTask, DescribeStoreImageTasks y CreateRestoreImageTask.

CopyImage es la API recomendada para copiar AMI dentro de una partición de AWS. Sin embargo, CopyImage no puede copiar una AMI a otra partición.

Para obtener información sobre las particiones de AWS, consulte partición en la página Nombres de recursos de Amazon (ARN) de la Guía del usuario de IAM.

aviso

Asegúrese de que cumple con todas las leyes y requisitos empresariales aplicables al mover datos entre particiones de AWS o regiones de AWS, incluyendo, entre otros, cualquier normativa gubernamental aplicable y requisitos de residencia de datos.

Casos de uso

Utilice las API de almacenamiento y restauración para hacer lo siguiente:

Copiar una AMI de una partición de AWS a otra partición de AWS

Al almacenar y restaurar una AMI mediante buckets S3, puede copiar una AMI de una partición de AWS a otra, o de una región de AWS a otra. En el siguiente ejemplo, copia una AMI de la partición comercial principal a la partición de AWS GovCloud (US), específicamente desde la región us-east-2 hacia la región us-gov-east-1.

Para copiar una AMI de una partición a otra, siga estos pasos:

  • Almacene la AMI en un bucket de S3 en la región actual mediante CreateStoreImageTask. En este ejemplo, el bucket de S3 se encuentra en us-east-2. Para obtener un comando de ejemplo, consulte Almacenar una AMI en un bucket de S3.

  • Supervise el progreso de la tarea de almacén mediante DescribeStoreImageTasks. El objeto se vuelve visible en el bucket de S3 cuando se completa la tarea. Para obtener un comando de ejemplo, consulte Describir el progreso de una tarea de almacén de AMI.

  • Copie el objeto AMI almacenado en un bucket de S3 en la partición de destino mediante un procedimiento que elija. En este ejemplo, el bucket de S3 se encuentra en us-gov-east-1.

    nota

    Debido a que necesita credenciales de AWS diferentes para cada partición, no puede copiar un objeto de S3 directamente de una partición a otra. El proceso para copiar un objeto de S3 a través de particiones está fuera del ámbito de esta documentación. Proporcionamos los siguientes procesos de copia como ejemplos, pero debe utilizar el proceso de copia que cumpla con los requisitos de seguridad.

    • Para copiar una AMI entre particiones, el proceso de copiado podría ser tan sencillo como el siguiente: descargue el objeto desde el bucket de origen a un host intermedio (por ejemplo, una instancia de EC2 o computadora personal) y, a continuación, cargue el objeto desde el host al bucket de destino. Para cada etapa del proceso, utilice las credenciales de AWS de la partición.

    • Para un uso más constante, considere la posibilidad de desarrollar una aplicación que administre las copias, posiblemente al utilizar descargas y cargas multiparte de S3.

  • Restaure la AMI desde el bucket de S3 en la partición de destino mediante CreateRestoreImageTask. En este ejemplo, el bucket de S3 se encuentra en us-gov-east-1. Para obtener un comando de ejemplo, consulte Restaurar una AMI desde un bucket de S3.

  • Supervise el progreso de la tarea de restauración describiendo la AMI para verificar cuando su estado esté disponible. También puede supervisar los porcentajes de progreso de las instantáneas que componen la AMI restaurada describiendo las instantáneas.

Hacer copias de archivo de AMI

Puede hacer copias de archivo de AMI almacenándolas en un bucket de S3. Para obtener un comando de ejemplo, consulte Almacenar una AMI en un bucket de S3.

La AMI se empaqueta en un solo objeto en S3 y todos los metadatos AMI (excluyendo la información compartida) se conservan como parte de la AMI almacenada. Los datos de AMI se comprimen como parte del proceso de almacenamiento. Las AMI que contienen datos que se pueden comprimir fácilmente darán como resultado objetos más pequeños en S3. Para reducir costos, puede utilizar niveles de almacenamiento S3 menos costosos. Para obtener más información, consulte las clases de almacenamiento de Amazon S3 y los precios de Amazon S3

Cómo funcionan las API de almacenamiento y restauración de AMI

Para almacenar y restaurar una AMI mediante S3, utilice las siguientes API:

  • CreateStoreImageTask – Almacena la AMI en un bucket de S3

  • DescribeStoreImageTasks – Proporciona el progreso de la tarea de almacenamiento de AMI

  • CreateRestoreImageTask – Restaura la AMI desde un bucket de S3

CreateStoreImageTask

La API CreateStoreImageTask almacena una AMI como un único objeto en un bucket de S3.

La API crea una tarea que lee todos los datos de la AMI y sus instantáneas y, a continuación, utiliza una carga multiparte de S3 para almacenar los datos en un objeto S3. La API toma todos los componentes de la AMI, incluida la mayoría de los metadatos AMI no específicos de la región, y todas las instantáneas de EBS contenidas en la AMI, y los empaqueta en un único objeto en S3. Los datos se comprimen como parte del proceso de carga para reducir la cantidad de espacio utilizado en S3, por lo que el objeto en S3 podría ser menor que la suma de los tamaños de las instantáneas en la AMI.

Si hay etiquetas AMI y de instantáneas visibles para la cuenta que llama a esta API, se conservan.

El objeto en S3 tiene el mismo ID que la AMI, pero con una extensión .bin. Los siguientes datos también se almacenan como etiquetas de metadatos S3 en el objeto S3: nombre de AMI, descripción de AMI, fecha de registro de AMI, cuenta de propietario de AMI y una marca de hora para la operación de almacén.

El tiempo que se tarda en completar la tarea depende del tamaño de la AMI. También depende de cuántas otras tareas estén en curso dado que las tareas están en cola. Puede realizar un seguimiento del progreso de la tarea llamando a la API DescribeStoreImageTasks.

La suma de los tamaños de todas las AMI en curso está limitada a 600 GB de datos de instantáneas de EBS por cuenta. Se rechazará la creación de tareas adicionales hasta que las tareas en curso sean inferiores al límite. Por ejemplo, si se está almacenando una AMI con 100 GB de datos de instantáneas y otra AMI con 200 GB de datos de instantáneas, se aceptará otra solicitud, dado que el total en curso es de 300 GB, que es menor que el límite. Sin embargo, si una sola AMI con 800 GB de datos de instantáneas se está almacenando actualmente, se rechazan otras tareas hasta que se complete la tarea.

DescribeStoreImageTasks

La API DescribeStoreImageTasks describe el progreso de las tareas del almacén de AMI. Puede describir tareas para AMI especificadas. Si no especifica AMI, obtendrá una lista paginada de todas las tareas de imagen de almacén que se han procesado en los últimos 31 días.

Para cada tarea AMI, la respuesta indica si la tarea es InProgress, Completed o Failed. En el caso de las tareas InProgress, la respuesta muestra un progreso estimado como porcentaje.

Las tareas se enumeran en orden cronológico inverso.

Actualmente, solo se pueden ver las tareas del mes anterior.

CreateRestoreImageTask

La API CreateStoreImageTask inicia una tarea que restaura una AMI de un objeto S3 que se creó previamente mediante una solicitud CreateStoreImageTask.

La tarea de restauración se puede realizar en la misma región o en una región diferente en la que se realizó la tarea de almacenamiento.

El bucket de S3 desde el que se restaurará el objeto AMI debe estar en la misma región en la que se solicita la tarea de restauración. La AMI será restaurada en esta Región.

La AMI se restaura con sus metadatos, como el nombre, la descripción y las asignaciones de dispositivos de bloque correspondientes a los valores de la AMI almacenada El nombre debe ser único para las AMI de la región de esta cuenta. Si no proporciona un nombre, la nueva AMI obtiene el mismo nombre que la AMI original. La AMI obtiene un nuevo ID de AMI que se genera en el momento del proceso de restauración.

El tiempo que se tarda en completar la tarea de restauración de la AMI depende del tamaño de la AMI. También depende de cuántas otras tareas estén en curso dado que las tareas están en cola. Puede ver el progreso de la tarea describiendo la AMI (describe-images) o sus instantáneas de EBS (describe-snapshots). Si la tarea falla, la AMI y las instantáneas se mueven a un estado de error.

La suma de los tamaños de todas las AMI en curso está limitada a 300 GB (según el tamaño después de la restauración) de los datos de instantáneas de EBS por cuenta. Se rechazará la creación de tareas adicionales hasta que las tareas en curso sean inferiores al límite.

Limitaciones

  • Para almacenar una AMI, su Cuenta de AWS debe ser propietaria de la AMI y sus instantáneas, o bien la AMI y sus instantáneas deben compartirse directamente con su cuenta. No puede almacenar una AMI si solo se comparte públicamente.

  • Solo se pueden almacenar AMI respaldadas por EBS usando estas API.

  • No se admiten AMI paravirtuales (PV).

  • El tamaño de una AMI (antes de la compresión) que se puede almacenar está limitado a 5000 GB.

  • Cuota en solicitudes de imágenes de almacén: 600 GB de trabajo de almacenamiento (datos de instantáneas) en curso.

  • Cuota en solicitudes de imagen de restauración: 300 GB de trabajo de restauración (datos de instantáneas) en curso.

  • Durante la tarea de almacenamiento, las instantáneas no deben eliminarse y la entidad principal de IAM que realiza el almacén debe tener acceso a las instantáneas; de lo contrario, el proceso de almacenamiento fallará.

  • No puede crear varias copias de una AMI en el mismo bucket de S3.

  • Una AMI almacenada en un bucket de S3 no se puede restaurar con su ID de AMI original. Puede mitigar esto mediante el uso de alias AMI.

  • En la actualidad, las API de almacenamiento y restauración solo se admiten mediante el uso de AWS Command Line Interface, AWS SDK y la API de Amazon EC2. No se puede almacenar ni restaurar una AMI mediante la consola de Amazon EC2.

Costos

Cuando almacena y restaura AMI mediante S3, se le cobran los servicios que utilizan las API de almacenamiento y restauración, así como por la transferencia de datos. Las API utilizan S3 y EBS Direct API (utilizadas internamente por estas API para acceder a los datos de instantáneas). Para obtener más información, consulte Precios de Amazon S3 y Precios de Amazon EBS.

Protección de sus AMI

Para utilizar las API de almacenamiento y restauración, el bucket de S3 y la AMI deben estar en la misma región. Es importante asegurarse de que el bucket de S3 esté configurado con la seguridad suficiente para proteger el contenido de la AMI y que la seguridad se mantenga mientras los objetos AMI permanezcan en el bucket. Si esto no se puede hacer, no se recomienda el uso de estas API. Asegúrese de que el acceso público al bucket de S3 no está permitido. Recomendamos habilitar el cifrado del lado del servidor para los buckets de S3 en los que almacena las AMI, aunque no es necesario.

Para obtener información acerca de cómo establecer la configuración de seguridad adecuada para los buckets de S3, consulte los siguientes temas de seguridad:

Cuando las instantáneas de AMI se copian en el objeto de S3, los datos se copian a través de conexiones TLS. Puede almacenar AMI con instantáneas cifradas, pero las instantáneas se descifran como parte del proceso de almacenamiento.

Permisos para almacenar y restaurar AMI mediante S3

Si sus entidades principales de IAM van a almacenar o restaurar AMI usando Amazon S3, debe concederles los permisos necesarios.

En la siguiente política de ejemplo se incluyen todas las acciones necesarias para permitir que una entidad principal de IAM lleve a cabo las tareas de almacenamiento y restauración.

También puede crear políticas de IAM que otorguen a las entidades principales acceso solo a recursos específicos. Para obtener más políticas de ejemplo, vea Administración de acceso para los recursos de AWS en la Guía del usuario de IAM.

nota

Si las instantáneas que componen la AMI están cifradas o si su cuenta está habilitada para el cifrado de forma predeterminada, la entidad principal de IAM debe tener permiso para usar la clave de KMS.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:PutObjectTagging", "s3:AbortMultipartUpload", "ebs:CompleteSnapshot", "ebs:GetSnapshotBlock", "ebs:ListChangedBlocks", "ebs:ListSnapshotBlocks", "ebs:PutSnapshotBlock", "ebs:StartSnapshot", "ec2:CreateStoreImageTask", "ec2:DescribeStoreImageTasks", "ec2:CreateRestoreImageTask", "ec2:GetEbsEncryptionByDefault", "ec2:DescribeTags", "ec2:CreateTags" ], "Resource": "*" } ] }

Trabajar con el almacén de AMI y restaurar las API

Almacenar una AMI en un bucket de S3

Para almacenar una AMI (AWS CLI)

Utilice el comando create-store-image-task. Especifique el ID de la AMI y el nombre del bucket de S3 en el que desea almacenar la AMI.

aws ec2 create-store-image-task \ --image-id ami-1234567890abcdef0 \ --bucket DOC-EXAMPLE-BUCKET

Salida prevista

{ "ObjectKey": "ami-1234567890abcdef0.bin" }

Describir el progreso de una tarea de almacén de AMI

Para describir el progreso de una tarea de almacén de AMI (AWS CLI)

Utilice el comando describe-store-image-tasks.

aws ec2 describe-store-image-tasks

Salida prevista

{ "StoreImageTaskResults": [ { "AmiId": "ami-1234567890abcdef0", "Bucket": "DOC-EXAMPLE-BUCKET", "ProgressPercentage": 17, "S3objectKey": "ami-1234567890abcdef0.bin", "StoreTaskState": "InProgress", "StoreTaskFailureReason": null, "TaskStartTime": "2022-01-01T01:01:01.001Z" } ] }

Restaurar una AMI desde un bucket de S3

Para restaurar una AMI (AWS CLI)

Utilice el comando create-restore-image-task. Utilizando los valores para S3ObjectKey y Bucket desde la salida describe-store-image-tasks, especifique la clave de objeto de la AMI y el nombre del bucket de S3 en el que se copió la AMI. Especifique también un nombre para la AMI restaurada. El nombre debe ser único para las AMI de la región de esta cuenta.

nota

La AMI restaurada obtiene un nuevo ID de AMI.

aws ec2 create-restore-image-task \ --object-key ami-1234567890abcdef0.bin \ --bucket DOC-EXAMPLE-BUCKET \ --name "New AMI Name"

Resultado previsto

{ "ImageId": "ami-0eab20fe36f83e1a8" }

Uso de rutas de archivos en S3

Puede utilizar las rutas de archivos al almacenar y restaurar las AMI de la siguiente manera:

  • Al almacenar una AMI en S3, la ruta del archivo se puede agregar al nombre del bucket. Internamente, el sistema separa la ruta del nombre del bucket y, a continuación, agrega la ruta a la clave de objeto que se genera para almacenar la AMI. La ruta de objeto completa se muestra en la respuesta de la llamada a la API.

  • Al restaurar la AMI, dado que hay un parámetro de clave de objeto disponible, la ruta se puede agregar al principio del valor de la clave de objeto.

Puede utilizar las rutas de archivos cuando utilice la AWS CLI y los SDK.

Ejemplo: uso de una ruta de archivo al almacenar y restaurar una AMI (AWS CLI)

En el siguiente ejemplo se almacena primero una AMI en S3, con la ruta de archivo agregada al nombre del bucket. A continuación, en el ejemplo se restaura la AMI desde S3, con la ruta de archivo antepuesta al parámetro de clave de objeto.

  1. Guarde la AMI. Para --bucket, especifique la ruta de archivo después del nombre del bucket, de la siguiente manera:

    aws ec2 create-store-image-task \ --image-id ami-1234567890abcdef0 \ --bucket DOC-EXAMPLE-BUCKET/path1/path2

    Resultado previsto

    { "ObjectKey": "path1/path2/ami-1234567890abcdef0.bin" }
  2. Restaure la AMI. Para --object-key, especifique el valor de la salida del paso anterior, que incluye la ruta de archivo.

    aws ec2 create-restore-image-task \ --object-key path1/path2/ami-1234567890abcdef0.bin \ --bucket DOC-EXAMPLE-BUCKET \ --name "New AMI Name"