Criar uma AMI baseada em armazenamento de instância - Amazon Elastic Compute Cloud

Criar uma AMI baseada em armazenamento de instância

A AMI que você especifica ao executar a instância determina o tipo de volume do dispositivo raiz

Para criar uma AMI em Linux com armazenamento de instâncias, inicie a instância que você executou a partir de uma AMI em Linux com o armazenamento de instâncias existente. Depois de personalizar a instância para atender às suas necessidades, empacote o volume e registre uma nova AMI, que é possível usar para executar novas instâncias com essas personalizações.

Não é possível criar uma AMI do Windows baseada no armazenamento de instância porque as AMIs do Windows não são compatíveis com o armazenamento de instância para o dispositivo raiz.

Importante

Somente os seguintes tipos de instância oferecem suporte a um volume de armazenamento de instância como o dispositivo raiz e exigem uma AMI baseada em um armazenamento de instância: C1, C3, D2, I2, M1, M2, M3, R3 e X1.

O processo de criação da AMI é diferente para AMIs baseadas no Amazon EBS. Para ter mais informações, consulte Criação de uma AMI baseada no Amazon EBS.

Visão geral da criação de uma AMI

O diagrama a seguir resume o processo de criação de uma AMI a partir de uma instância com armazenamento de instâncias.

Criar uma AMI baseada em armazenamento de instância.

Primeiro, execute uma instância de uma AMI semelhante à AMI que você deseja criar. É possível conectá-la à sua instância e personalizá-la. Quando a instância estiver configurada da forma como você deseja, é possível empacotá-la. Demora vários minutos para o processo de empacotamento ser concluído. Depois de o processo ser concluído, você terá um pacote, que consiste em um manifesto de imagem (image.manifest.xml) e nos arquivos (image.part.xx) que contêm um modelo para o volume raiz. Em seguida, você carrega o pacote para seu bucket Amazon S3 e registra sua AMI.

nota

Para carregar objetos para um bucket do S3 para sua AMI de Linux baseada em armazenamento de instâncias, as ACLs devem estar habilitadas para o bucket. Caso contrário, o Amazon EC2 não poderá definir ACLs nos objetos a serem carregados. Se o bucket de destino usar a configuração imposta pelo proprietário do bucket para propriedade de objeto do S3, isso não funcionará, porque as ACLs estarão desabilitadas. Para obter mais informações, consulte Controle da propriedade de objetos carregados usando a propriedade de objeto do S3.

Quando você executa uma instância usando a nova AMI, criamos o volume do dispositivo raiz da instância usando o pacote que você carregou para o Amazon S3. O espaço de armazenamento usado pelo pacote no Amazon S3 gera cobranças na sua conta até que você o exclua. Para obter mais informações, consulte Cancelar o registro de uma AMI do Amazon EC2.

Se você adicionar volumes de armazenamento de instâncias à sua instância além do volume do dispositivo raiz, o mapeamento de dispositivos de blocos para a nova AMI conterá informações para esses volumes, e os mapeamentos de dispositivos de blocos para as instâncias que você executar pela nova AMI conterão automaticamente informações para esses volumes. Para ter mais informações, consulte Mapeamento de dispositivos de blocos para volumes em instâncias do Amazon EC2.

Pré-requisitos

Antes que você crie uma AMI, é preciso concluir as tarefas seguir:

  • Instale as ferramentas da AMI. Para obter mais informações, consulte Configurar as ferramentas de AMIs do Amazon EC2.

  • Instale o AWS CLI. Para obter mais informações, consulte Configuração da AWS Command Line Interface.

  • Verifique se você tem um bucket do S3 para o pacote e se o bucket tem ACLs habilitadas. Para obter mais informações sobre a configuração de ACLs, consulte Configuração de ACLs.

    • Para criar um bucket do S3 usando o AWS Management Console, abra o console do Amazon S3 em https://console.aws.amazon.com/s3/ e escolha Criar bucket.

    • Para criar um bucket do S3 com a AWS CLI, é possível usar o comando mb. Se a versão instalada das ferramentas da AMI for 1.5.18 ou posterior, também será possível usar o comando ec2-upload-bundle para criar o bucket do S3. Para ter mais informações, consulte ec2-upload-bundle.

  • Certifique-se de que os arquivos em seu pacote não estejam criptografados no bucket do S3. Caso precise de criptografia para sua AMI, você poderá usar uma AMI baseada no EBS em vez disso. Para ter mais informações, consulte Usar criptografia com AMIs com EBS.

  • Verifique se você tem seu ID de conta da AWS. Para obter mais informações, consulte Visualizar identificadores de Conta da AWS no Guia de referência de gerenciamento de contas da AWS.

  • Certifique-se de ter credenciais para usar o AWS CLI. Para obter mais informações, consulte Best Practices for AWS accounts (Práticas recomendadas para contas da ) no Guia de referência do AWS Account Management.

  • Verifique se você tem um certificado x.509 e a chave privada correspondente.

    • Se você precisar criar um certificado X.509, consulte Gerenciar certificados de assinatura. O certificado X.509 e a chave privada são usados para criptografar e descriptografar sua AMI.

    • [China (Pequim)] Use o certificado $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem.

    • [AWS GovCloud (US-West)] Use o certificado $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem.

  • Conecte-se à sua instância e personalize-a. Por exemplo, é possível instalar softwares e aplicações, copiar dados, excluir arquivos temporários e modificar a configuração do Linux.

Criar uma AMI de uma instância do Linux da Amazon

Os procedimentos a seguir descrevem como criar uma AMI de uma instância baseada em armazenamento de instância em execução no Amazon Linux 1. Eles podem não funcionar para instâncias em execução em outras distribuições do Linux.

Para se preparar para usar as ferramentas da AMI (somente instâncias do HVM)
  1. As ferramentas de AMI exigem GRUB Legacy para inicializarem corretamente. Use o comando a seguir para instalar o GRUB:

    [ec2-user ~]$ sudo yum install -y grub
  2. Instale os pacotes de gerenciamento de partição com o seguinte comando:

    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
Para criar uma AMI a partir de uma instância de Amazon Linux com armazenamento de instâncias

Este procedimento pressupõe que você atendeu aos pré-requisitos de Pré-requisitos.

Nos comandos a seguir, substitua cada espaço reservado para entrada do usuário por suas próprias informações.

  1. Carregue suas credenciais para sua instância. Usamos essas credenciais para garantir que só você e o Amazon EC2 possam acessar sua AMI.

    1. Crie um diretório temporário na sua instância para suas credenciais, da seguinte forma:

      [ec2-user ~]$ mkdir /tmp/cert

      Isso permite que você exclua suas credenciais da imagem criada.

    2. Copie o certificado X.509 e a chave privada correspondente do seu computador para o diretório /tmp/cert na sua instância usando uma ferramenta de cópia segura, como scp. A opção -i my-private-key.pem no comando scp é a chave privada que você usa para se conectar à sua instância com o SSH, não a chave privada X.509. Por exemplo:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00

    Como alternativa, por serem arquivos de texto simples, é possível abrir o certificado e a chave em um editor de texto e copiar o conteúdo para novos arquivos em /tmp/cert.

  2. Prepare o pacote para carregar para o Amazon S3 executando o comando ec2-bundle-vol em sua instância. Não se esqueça de especificar a opção -e para de excluir o diretório onde suas credenciais estão armazenadas. Por padrão, o processo de colocação em pacotes exclui arquivos que possam conter informações confidenciais. Esses arquivos incluem *.sw, *.swo, *.swp, *.pem, *.priv, *id_rsa*, *id_dsa* *.gpg, *.jks, */.ssh/authorized_keys e */.bash_history. Para incluir todos os arquivos, use a opção --no-filter. Para incluir alguns dos arquivos, use a opção --include.

    Importante

    Por padrão, o processo de empacotamento da AMI cria um conjunto de arquivos compactados e criptografados no diretório /tmp que representa o volume raiz. Se você não tem o espaço em disco suficiente em /tmp para armazenar o pacote, precisa especificar um local diferente para o pacote ser armazenado com a opção -d /path/to/bundle/storage. Algumas instâncias têm armazenamento temporário montado em /mnt ou /media/ephemeral0 que você pode usar, ou você pode também criar, associar e montar um novo volume do Amazon EBS para armazenar o pacote. Para obter mais informações, consulte Criar um volume do Amazon EBS no Guia do usuário do Amazon EC2.

    1. Execute o comando ec2-bundle-vol como raiz. Na maioria dos comandos, é possível usar sudo para ganhar permissões elevadas, mas neste caso, é necessário executar sudo -E su para manter as variáveis do ambiente.

      [ec2-user ~]$ sudo -E su

      Observe que prompt bash agora identifica você como usuário raiz, e o cifrão foi substituído por uma hashtag, sinalizando que você está em um shell raiz:

      [root ec2-user]#
    2. Para criar o pacote de AMIs, execute o comando ec2-bundle-vol da seguinte forma:

      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      nota

      Para as regiões China (Pequim) e AWS GovCloud (US-West), use o parâmetro --ec2cert e especifique os certificados de acordo com os pré-requisitos.

      Pode demorar alguns minutos para criar a imagem. Quando esse comando for concluído, o diretório /tmp (ou não padrão) conterá o pacote (image.manifest.xml, além de vários arquivos image.part.xx).

    3. Saída do shell raiz.

      [root ec2-user]# exit
  3. (Opcional) Para adicionar mais volumes de armazenamento de instâncias, edite os mapeamentos de dispositivos de blocos no arquivo image.manifest.xml para sua AMI. Para obter mais informações, consulte Mapeamento de dispositivos de blocos para volumes em instâncias do Amazon EC2.

    1. Crie um backup do seu arquivo image.manifest.xml.

      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. Reformate o arquivo image.manifest.xml para que seja mais fácil ler e editar.

      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. Edite os mapeamentos de dispositivos de blocos em image.manifest.xml com um editor de texto. O exemplo abaixo mostra uma nova entrada para o volume do armazenamento de instâncias ephemeral1.

      nota

      Para obter uma lista dos arquivos excluídos, consulte ec2-bundle-vol.

      <block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping> <mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping> <mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping>
    4. Salve o arquivo image.manifest.xml e saia do seu editor de texto.

  4. Para fazer upload do pacote para o Amazon S3, execute o comando ec2-upload-bundle da seguinte forma.

    [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    Importante

    Para registrar a AMI em uma região diferente de US East (N. Virginia), é preciso especificar tanto a região de destino com a opção --region quanto um caminho do bucket que já exista na região de destino, ou um caminho de bucket exclusivo que possa ser criado na região de destino.

  5. (Opcional) Depois de o pacote ser carregado para o Amazon S3, é possível removê-lo do diretório /tmp na instância usando o comando rm a seguir:

    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    Importante

    Se você tiver especificado um caminho com a opção -d /path/to/bundle/storage em Passo 2, use esse caminho em vez de /tmp.

  6. Para registrar a AMI, execute o comando register-image da seguinte maneira.

    [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    Importante

    Se você tiver especificado previamente uma região para o comando ec2-upload-bundle, especifique essa região novamente para esse comando.