Preservar o acesso a uma imagem de máquina da Amazon (AMI) para uma plataforma descontinuada - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Preservar o acesso a uma imagem de máquina da Amazon (AMI) para uma plataforma descontinuada

O Elastic Beanstalk define o status de uma ramificação da plataforma como descontinuada quando o sistema operacional ou componente principal usado pela ramificação atinge o fim da vida útil. Podemos também transformar a AMI básica do Elastic Beanstalk para a ramificação da plataforma em privada para evitar o uso dessa AMI desatualizada. Os ambientes que usam AMIs que foram alteradas para privadas não poderão mais iniciar instâncias.

Se você não conseguir migrar sua aplicação para um ambiente compatível antes de ser descontinuada, seu ambiente pode estar nessa situação. Pode ser necessário atualizar um ambiente para uma ramificação da plataforma Beanstalk, onde sua AMI básica do Elastic Beanstalk foi alterada para privada. Há uma abordagem alternativa. Você pode atualizar um ambiente existente com base em uma cópia da AMI básica do Elastic Beanstalk usada pelo seu ambiente.

Este tópico apresenta algumas etapas e um script independente para atualizar um ambiente existente com base em uma cópia da AMI básica do Elastic Beanstalk usada pelo seu ambiente. Depois de migrar sua aplicação para uma plataforma compatível, você pode continuar usando os procedimentos padrão para manter sua aplicação e ambientes compatíveis.

Etapas manuais

Para atualizar um ambiente com base em uma cópia da AMI básica do Elastic Beanstalk
  1. Determine qual AMI seu ambiente está usando. Este comando retorna a AMI usada pelo ambiente do Elastic Beanstalk que você fornece nos parâmetros. O valor retornado é usado como source-ami-id na próxima etapa.

    Em uma janela de comando, execute um comando semelhante ao seguinte. Para obter mais informações, consulte describe-configuration-settings na Referência de comandos da AWS CLI.

    Especifique a região da AWS que armazena a AMI de origem que você deseja copiar. Substitua o nome da aplicação e o nome do ambiente por aqueles baseados na AMI de origem. Insira o texto para o parâmetro de consulta, conforme mostrado.

    >aws elasticbeanstalk describe-configuration-settings \ --application-name my-application \ --environment-name my-environment \ --region us-east-2 \ --query "ConfigurationSettings[0].OptionSettings[?OptionName=='ImageId'] | [0].Value"
  2. Copie a AMI em sua conta. Este comando retorna a nova AMI resultante da cópia do source-ami-id que foi retornada na etapa anterior.

    nota

    Não se esqueça de anotar o novo ID da AMI que é gerado por esse comando. Você precisará inseri-lo na próxima etapa, substituindo copied-ami-id no comando de exemplo.

    Em uma janela de comando, execute um comando semelhante ao seguinte. Para obter mais informações, consulte copy-image na AWS CLI Command Reference.

    Especifique a região da AWS da AMI de origem que você deseja copiar (--source-region) e a região em que você deseja usar sua nova AMI personalizada (--region). Substitua source-ami-id pela AMI da imagem que você está copiando. O source-ami-id foi retornado pelo comando na etapa anterior. Substitua new-ami-name por um nome para descrever a nova AMI na região de destino. O script que segue esse procedimento gera o novo nome da AMI anexando a string "Copy of" ao início do nome do source-ami-id.

    >aws ec2 copy-image \ --region us-east-2 \ --source-image-id source-ami-id \ --source-region us-east-2 \ --name new-ami-name
  3. Atualize o ambiente para usar a AMI copiada. Depois de executar o comando, ele retornará o status do ambiente.

    Em uma janela de comando, execute um comando semelhante ao seguinte. Para obter mais informações, consulte update-environment na Referência de comandos da AWS CLI.

    Especifique a região da AWS do ambiente e da aplicação que você precisa atualizar. Substitua o nome da aplicação e o nome do ambiente pelos que você precisa associar ao copied-ami-id da etapa anterior. Para o parâmetro --option-setttings, substitua copied-ami-id pelo ID da AMI que você anotou na saída do comando anterior.

    >aws elasticbeanstalk update-environment \ --application-name my-application \ --environment-name my-environment \ --region us-east-2 \ --option-settings "Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value=copied-ami-id"
nota

Para minimizar o custo de armazenamento, considere limpar a AMI personalizada quando não precisar mais dela para iniciar ambientes do Elastic Beanstalk. Para ter mais informações, consulte Limpeza de uma AMI personalizada.

Script autônomo

O script a seguir fornece os mesmos resultados das etapas manuais anteriores. Faça o download do script selecionando este link: copy_ami_and_update_env.zip.

#!/bin/bash set -ue USAGE="This script is used to copy an AMI used by your Elastic Beanstalk environment into your account to use in your environment.\n\n" USAGE+="Usage:\n\n" USAGE+="./$(basename $0) [OPTIONS]\n" USAGE+="OPTIONS:\n" USAGE+="\t--application-name <application-name>\tThe name of your Elastic Beanstalk application.\n" USAGE+="\t--environment-name <environment-name>\tThe name of your Elastic Beanstalk environment.\n" USAGE+="\t--region <region> \t\t\tThe AWS region your Elastic Beanstalk environment is deployed to.\n" USAGE+="\n\n" USAGE+="Script Usage Example(s):\n" USAGE+="./$(basename $0) --application-name my-application --environment-name my-environment --region us-east-1\n" if [ $# -eq 0 ]; then echo -e $USAGE exit fi while [[ $# -gt 0 ]]; do case $1 in --application-name) APPLICATION_NAME="$2"; shift ;; --environment-name) ENVIRONMENT_NAME="$2"; shift ;; --region) REGION="$2"; shift ;; *) echo "Unknown option $1" ; echo -e $USAGE ; exit ;; esac shift done aws_cli_version="$(aws --version)" if [ $? -ne 0 ]; then echo "aws CLI not found. Please install it: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html. Exiting." exit 1 fi echo "Using aws CLI version: ${aws_cli_version}" account=$(aws sts get-caller-identity --query "Account" --output text) echo "Using account ${account}" environment_ami_id=$(aws elasticbeanstalk describe-configuration-settings \ --application-name "$APPLICATION_NAME" \ --environment-name "$ENVIRONMENT_NAME" \ --region "$REGION" \ --query "ConfigurationSettings[0].OptionSettings[?OptionName=='ImageId'] | [0].Value" \ --output text) echo "Image associated with environment ${ENVIRONMENT_NAME} is ${environment_ami_id}" owned_image=$(aws ec2 describe-images \ --owners self \ --image-ids "$environment_ami_id" \ --region "$REGION" \ --query "Images[0]" \ --output text) if [ "$owned_image" != "None" ]; then echo "${environment_ami_id} is already owned by account ${account}. Exiting." exit fi source_image_name=$(aws ec2 describe-images \ --image-ids "$environment_ami_id" \ --region "$REGION" \ --query "Images[0].Name" \ --output text) if [ "$source_image_name" = "None" ]; then echo "Cannot find ${environment_ami_id}. Please contact AWS support if you need additional help: https://aws.amazon.com/support." exit 1 fi copied_image_name="Copy of ${source_image_name}" copied_ami_id=$(aws ec2 describe-images \ --owners self \ --filters Name=name,Values="${copied_image_name}" \ --region "$REGION" \ --query "Images[0].ImageId" \ --output text) if [ "$copied_ami_id" != "None" ]; then echo "Detected that ${environment_ami_id} has already been copied by account ${account}. Skipping image copy." else echo "Copying ${environment_ami_id} to account ${account} with name ${copied_image_name}" copied_ami_id=$(aws ec2 copy-image \ --source-image-id "$environment_ami_id" \ --source-region "$REGION" \ --name "$copied_image_name" \ --region "$REGION" \ --query "ImageId" \ --output text) echo "New AMI ID is ${copied_ami_id}" echo "Waiting for ${copied_ami_id} to become available" aws ec2 wait image-available \ --image-ids "$copied_ami_id" \ --region "$REGION" echo "${copied_ami_id} is now available" fi echo "Updating environment ${ENVIRONMENT_NAME} to use ${copied_ami_id}" environment_status=$(aws elasticbeanstalk update-environment \ --application-name "$APPLICATION_NAME" \ --environment-name "$ENVIRONMENT_NAME" \ --option-settings "Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value=${copied_ami_id}" \ --region "$REGION" \ --query "Status" \ --output text) echo "Environment ${ENVIRONMENT_NAME} is now ${environment_status}" echo "Waiting for environment ${ENVIRONMENT_NAME} update to complete" aws elasticbeanstalk wait environment-updated \ --application-name "$APPLICATION_NAME" \ --environment-names "$ENVIRONMENT_NAME" \ --region "$REGION" echo "Environment ${ENVIRONMENT_NAME} update complete"
nota

Você deve ter a AWS CLI instalada para executar o script. Para obter instruções de atualização, consulte Instalar ou atualizar a versão mais recente da AWS CLI no Guia do usuário do AWS Command Line Interface.

Depois de instalar a AWS CLI, você também deve configurá-la para usar a conta da AWS proprietária do ambiente. Para obter mais informações, consulte Configurar a AWS CLI no Guia do usuário da AWS Command Line Interface. A conta também deve ter permissões para criar uma AMI e atualizar o ambiente do Elastic Beanstalk.

Estas etapas descrevem o processo que o script segue.

  1. Imprima a conta em uso.

  2. Determine qual AMI é usada pelo ambiente (AMI de origem).

  3. Verifique se a AMI de origem já pertence à conta. Se sim, saia.

  4. Determine o nome da AMI de origem para que ela possa ser usada no novo nome da AMI. Isso também serve para confirmar o acesso à AMI de origem.

  5. Verifique se a AMI de origem já foi copiada para a conta. Isso é feito pesquisando AMIs com o nome da AMI copiada de propriedade da conta. Se o nome da AMI tiver sido alterado entre as execuções do script, ela copiará a imagem novamente.

  6. Se a AMI de origem ainda não tiver sido copiada, copie a AMI de origem para a conta e aguarde até que a nova AMI esteja disponível.

  7. Atualize a configuração do ambiente para usar a nova AMI.

  8. Aguarde a conclusão da atualização do ambiente.

Depois de extrair o script do arquivo copy_ami_and_update_env.zip, execute-o conforme o exemplo a seguir. Substitua o nome da aplicação e o nome do ambiente no exemplo por seus valores.

>sh copy_ami_and_update_env.sh \ --application-name my-application \ --environment-name my-environment \ --region us-east-1
nota

Para minimizar o custo de armazenamento, considere limpar a AMI personalizada quando não precisar mais dela para iniciar ambientes do Elastic Beanstalk. Para ter mais informações, consulte Limpeza de uma AMI personalizada.