Armazenar e restaurar uma AMI usando o S3 - Amazon Elastic Compute Cloud

Armazenar e restaurar uma AMI usando o S3

É possível armazenar uma imagem de máquina da Amazon (AMI) em um bucket do Amazon S3, copiar a AMI para outro bucket do S3 e restaurá-la a partir do bucket do S3. Ao armazenar e restaurar uma AMI usando buckets do S3, é possível copiar AMIs de uma partição da AWS para outra, por exemplo, da principal partição comercial para a partição AWS GovCloud (US). Também é possível fazer cópias de arquivamento de AMIs armazenando-as em um bucket do S3.

As APIs compatíveis para armazenar e restaurar uma AMI usando o S3 são CreateStoreImageTaskDescribeStoreImageTasks e CreateRestoreImageTask.

CopyImage é a API recomendada para copiar AMIs dentro de uma partição da AWS. No entanto, CopyImage não pode copiar uma AMI para outra partição.

Para obter mais informações sobre as partições da AWS, consulte partição na página Nomes do recurso da Amazon (ARN) no Guia do usuário do IAM.

Atenção

Certifique-se de cumprir todas as leis e requisitos de negócios aplicáveis ao mover dados entre partições daAWS ou regiões da AWS, incluindo, entre outros, quaisquer regulamentos governamentais aplicáveis e requisitos de residência de dados.

Casos de uso

Copiar uma AMI de uma partição da AWS para outra partição da AWS

Ao armazenar e restaurar uma AMI usando buckets do S3, é possível copiar uma AMI de uma partição da AWS para outra ou de uma região da AWS para outra. No exemplo a seguir, você copia uma AMI da partição comercial principal para a partição AWS GovCloud (US), especificamente da região us-east-2 para a região us-gov-east-1.

Para copiar uma AMI de uma partição para outra, siga estas etapas:

  • Armazene a AMI em um bucket do S3 na região atual usando CreateStoreImageTask. Neste exemplo, o bucket do S3 está localizado em us-east-2. Para obter um exemplo de comando, consulte Armazenar uma AMI em um bucket do S3.

  • Monitore o andamento da tarefa de armazenamento usando DescribeStoreImageTasks. O objeto fica visível no bucket do S3 quando a tarefa é concluída. Para obter um exemplo de comando, consulte Descrever o andamento de uma tarefa de armazenamento de AMI.

  • Copie o objeto da AMI armazenado para um bucket do S3 na partição de destino usando um procedimento de sua escolha. Neste exemplo, o bucket do S3 está localizado em us-gov-east-1.

    nota

    Como você precisa de credenciais diferentes da AWS para cada partição, você não pode copiar um objeto S3 diretamente de uma partição para outra. O processo para copiar um objeto S3 entre partições está fora do escopo desta documentação. Fornecemos os processos de cópia a seguir como exemplos, mas use o processo de cópia que atenda aos seus requisitos de segurança.

    • Para copiar uma AMI entre partições, o processo de cópia pode ser tão simples quanto o seguinte: baixe o objeto do bucket de origem para um host intermediário (por exemplo, uma instância do EC2 ou um laptop) e carregue o objeto do host intermediário no bucket de destino. Para cada etapa do processo, use as credenciais da AWS para a partição.

    • Para um uso mais sustentável, considere desenvolver uma aplicação que gerencia as cópias, potencialmente usando downloads e uploads de várias partesdo S3.

  • Restaure a AMI do bucket do S3 na partição de destino usando CreateRestoreImageTask. Neste exemplo, o bucket do S3 está localizado em us-gov-east-1. Para obter um exemplo de comando, consulte Restaurar uma AMI de um bucket do S3.

  • Monitore o andamento da tarefa de restauração descrevendo a AMI para verificar quando seu estado se torna disponível. Também é possível monitorar as porcentagens de progresso dos snapshots que compõem a AMI restaurada descrevendo os instantâneos.

Fazer cópias de arquivamento de AMIs

É possível fazer cópias de arquivamento de AMIs armazenando-as em um bucket do S3. Para obter um exemplo de comando, consulte Armazenar uma AMI em um bucket do S3.

A AMI é embalada em um único objeto no S3 e todos os metadados da AMI (excluindo informações de compartilhamento) são preservados como parte da AMI armazenada. Os dados da AMI são compactados como parte do processo de armazenamento. AMIs que contêm dados que podem ser facilmente compactados resultarão em objetos menores no S3. Para reduzir custos, é possível usar camadas de armazenamento S3 mais econômicas. Para obter mais informações, consulte Classes de armazenamento do Amazon S3 e definição de preço do Amazon S3

Como as APIs de armazenamento e restauração da AMI funcionam

Para armazenar e restaurar uma AMI usando o S3, use as seguintes APIs:

  • CreateStoreImageTask – Armazena a AMI em um bucket do S3

  • DescribeStoreImageTasks – Fornece o andamento da tarefa de armazenamento da AMI

  • CreateRestoreImageTask – Restaura a AMI de um bucket do S3

CreateStoreImageTask

A API CreateStoreImagetAsk armazena uma AMI como um único objeto em um bucket do S3.

A API cria uma tarefa que lê todos os dados da AMI e seus snapshots e, a seguir, usa um multipart upload do S3 para armazenar os dados em um objeto do S3. A API leva todos os componentes da AMI, incluindo a maioria dos metadados de AMI não específicos da região e todos os snapshots do EBS contidos na AMI, e os empacota em um único objeto no S3. Os dados são compactados como parte do processo de upload para reduzir a quantidade de espaço usado no S3; portanto, o objeto no S3 pode ser menor do que a soma dos tamanhos dos snapshots na AMI.

Se houver tags de AMI e de snapshot visíveis para a conta chamando essa API, elas serão preservadas.

O objeto no S3 tem o mesmo ID que a AMI, mas com uma extensão .bin. Os dados a seguir também são armazenados como tags de metadados do S3 no objeto do S3: nome da AMI, descrição da AMI, data de registro da AMI, conta de proprietário da AMI e um timestamp para a operação de armazenamento.

O tempo necessário para concluir a tarefa depende do tamanho da AMI. Também depende de quantas outras tarefas estão em andamento porque as tarefas estão em fila. É possível acompanhar o andamento da tarefa chamando a API DescribestoreImageTasks.

A soma dos tamanhos de todas as AMIs em andamento é limitada a 600 GB de dados de snapshot do EBS por conta. A criação de tarefas adicionais será rejeitada até que as tarefas em andamento sejam inferiores ao limite. Por exemplo, se uma AMI com 100 GB de dados de snapshot e outra AMI com 200 GB de dados de snapshot estiverem sendo armazenadas no momento, outra solicitação será aceita, pois o total em andamento é de 300 GB, que é inferior ao limite. Mas se uma única AMI com 800 GB de dados de snapshot estiver sendo armazenada no momento, outras tarefas serão rejeitadas até que a tarefa seja concluída.

DescriboesToreImageTasks

A API DescribestoreImageTasks descreve o andamento das tarefas de armazenamento da AMI. É possível descrever tarefas para AMIs especificadas. Se você não especificar AMIs, receberá uma lista paginada de todas as tarefas de imagem de armazenamento que foram processadas nos últimos 31 dias.

Para cada tarefa de AMI, a resposta indica se a tarefa é InProgressCompleted ou Failed. Para tarefas InProgress, a resposta mostra um andamento estimado como uma porcentagem.

As tarefas são listadas em ordem cronológica inversa.

No momento, somente as tarefas do mês anterior podem ser visualizadas.

CreateRestoreImageTask

A API CreateRestoreImagetAsk inicia uma tarefa que restaura uma AMI de um objeto do S3 que foi criado anteriormente usando uma solicitação CreateStoreImagetAsk.

A tarefa de restauração pode ser executada na mesma região ou em uma região diferente daquela em que a tarefa de armazenamento foi executada.

O bucket do S3 a partir do qual o objeto da AMI será restaurado deve estar na mesma região em que a tarefa de restauração é solicitada. A AMI será restaurada nessa região.

A AMI é restaurada com seus metadados, como o nome, a descrição e os mapeamentos de dispositivos de blocos correspondentes aos valores da AMI armazenada. O nome deve ser exclusivo para AMIs na região dessa conta. Se você não fornecer um nome, a nova AMI obterá o mesmo nome da AMI original. A AMI obtém um novo ID de AMI que é gerado no momento do processo de restauração.

O tempo necessário para a conclusão da tarefa de restauração da AMI depende do tamanho da AMI. Também depende de quantas outras tarefas estão em andamento porque as tarefas estão em fila. É possível visualizar o andamento da tarefa descrevendo a AMI (describe-images) ou seus snapshots do EBS (describe-snapshots). Se a tarefa falhar, a AMI e os snapshots serão movidos para um estado com falha.

A soma dos tamanhos de todas as AMIs em andamento é limitada a 300 GB (com base no tamanho após a restauração) dos dados de snapshot do EBS por conta. A criação de tarefas adicionais será rejeitada até que as tarefas em andamento sejam inferiores ao limite.

Limitações

  • Para armazenar uma AMI, sua Conta da AWS deve possuir a AMI e seus snapshots, ou a AMI e seus snapshots devem ser compartilhados diretamente com sua conta. Você não pode armazenar uma AMI se ela for compartilhada publicamente apenas.

  • Somente AMIs baseadas no EBS podem ser armazenadas usando essas APIs.

  • Não há suporte a AMIs paravirtuais (PV).

  • O tamanho de uma AMI (antes da compactação) que pode ser armazenada é limitado a 5.000 GB.

  • Cota em solicitações de imagem de armazenamento : 600 GB de trabalho de armazenamento (dados de snapshots) em andamento.

  • Cota em solicitações de imagem de restauração : 300 GB de trabalho de restauração (dados de snapshots) em andamento.

  • Durante a tarefa de armazenamento, os snapshots não devem ser excluídos e a entidade principal do IAM que faz o armazenamento deve ter acesso aos snapshots, caso contrário o processo de armazenamento apresentará falha.

  • Não é possível criar várias cópias de uma AMI no mesmo bucket do S3.

  • Uma AMI armazenada em um bucket do S3 não pode ser restaurada com seu ID de AMI original. É possível mitigar isso usando Alias de AMI.

  • Atualmente, as APIs de armazenamento e restauração só são compatíveis se for utilizada a AWS Command Line Interface, os AWS SDKs e a API do Amazon EC2. Não é possível armazenar e restaurar uma AMI usando o console do Amazon EC2.

Custos

Quando você armazena e restaura AMIs usando o S3, é cobrado pelos serviços usados pelas APIs de armazenamento e restauração e pela transferência de dados. As APIs usam o S3 e a API direta do EBS (usadas internamente por essas APIs para acessar os dados do snapshot). Para obter mais informações, consulte Definição de preço do Amazon S3 e Definição de preço do Amazon EBS.

Proteger suas AMIs

Para usar as APIs de armazenamento e restauração, o bucket do S3 e a AMI devem estar na mesma região. É importante garantir que o bucket do S3 esteja configurado com segurança suficiente para proteger o conteúdo da AMI e que a segurança seja mantida enquanto os objetos da AMI permanecerem no bucket. Se isso não puder ser feito, o uso dessas APIs não será recomendado. Não permita acesso público ao bucket do S3. Recomendamos que você ative a Server Side Encryption (Criptografia do lado do servidor) para o bucket do S3 no qual você armazena as AMIs, embora não seja necessário.

Para obter informações sobre como definir as configurações de segurança apropriadas para os buckets do S3, consulte os seguintes tópicos de segurança:

Quando os snapshots da AMI são copiados para o objeto S3, os dados são copiados em conexões TLS. É possível armazenar AMIs com snapshots criptografados, mas os snapshots são descriptografados como parte do processo de armazenamento.

Permissões para armazenar e restaurar AMIs usando o S3

Caso as entidades principais do IAM armazenem ou restaurem AMIs usando o Amazon S3, você precisará conceder a elas as permissões necessárias.

A política de exemplo a seguir inclui todas as ações necessárias para permitir que uma entidade principal do IAM execute as tarefas de armazenamento e restauração.

Também é possível criar políticas do IAM que concedam às entidades principais acesso apenas a recursos específicos. Para obter mais exemplos de políticas, consulte Gerenciamento de acesso para recursos da AWS no Guia do usuário do IAM.

nota

Se os snapshots que compõem a AMI estiverem criptografados ou se a conta estiver habilitada para criptografia por padrão, seu principal do IAM deverá ter permissão para usar a chave 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": "*" } ] }

Trabalhar com o armazenamento da AMI e restaurar APIs

Armazenar uma AMI em um bucket do S3

Para armazenar uma AMI (AWS CLI)

Use o comando create-store-image-task. Especifique o ID da AMI e o nome do bucket do S3 no qual a AMI será armazenada.

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

Saída esperada

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

Descrever o andamento de uma tarefa de armazenamento de AMI

Para descrever o andamento de uma tarefa de armazenamento de AMI (AWS CLI)

Use o comando describe-store-image-tasks.

aws ec2 describe-store-image-tasks

Saída esperada

{ "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 uma AMI de um bucket do S3

Para restaurar uma AMI (AWS CLI)

Use o comando create-restore-image-task. Usando os valores de Bucket e S3ObjectKey da describe-store-image-tasks saída, especifique a chave de objeto da AMI e o nome do bucket do S3 para o qual a AMI foi copiada. Especifique também um nome para a AMI restaurada. O nome deve ser exclusivo para AMIs na região dessa conta.

nota

A AMI restaurada obtém um novo ID de AMI.

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

Saída esperada

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

Usar caminhos de arquivo no S3

É possível usar caminhos de arquivo ao armazenar e restaurar AMIs, da seguinte forma:

  • Ao armazenar uma AMI no S3, o caminho do arquivo pode ser adicionado ao nome do bucket. Internamente, o sistema separa o caminho do nome do bucket e, em seguida, adiciona o caminho à chave do objeto que é gerada para armazenar a AMI. O caminho completo do objeto é mostrado na resposta da chamada de API.

  • Ao restaurar a AMI, como um parâmetro de chave de objeto está disponível, o caminho pode ser adicionado ao início do valor da chave do objeto.

É possível usar caminhos de arquivo ao usar a AWS CLI e os SDKs.

Exemplo: use um caminho de arquivo ao armazenar e restaurar uma AMI (AWS CLI)

O exemplo a seguir primeiro armazena uma AMI no S3, com o caminho do arquivo anexado ao nome do bucket. O exemplo restaura então a AMI do S3, com o caminho do arquivo anexado ao parâmetro da chave do objeto.

  1. Armazene a AMI. Em --bucket, especifique o caminho do arquivo após o nome do bucket, da seguinte forma:

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

    Saída esperada

    { "ObjectKey": "path1/path2/ami-1234567890abcdef0.bin" }
  2. Restaure a AMI. Em --object-key, especifique o valor da saída na etapa anterior, o que inclui o caminho do arquivo.

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