Preservare l'accesso a una Amazon Machine Image (AMI) per una piattaforma ritirata - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Preservare l'accesso a una Amazon Machine Image (AMI) per una piattaforma ritirata

Elastic Beanstalk imposta lo stato di una ramificazione della piattaforma come ritirato quando il sistema operativo o il componente principale utilizzato dalla ramificazione raggiunge lo stato End of Life. L'AMI Elastic Beanstalk di base per la ramificazione della piattaforma può anche essere resa privata per impedire l'uso di questa AMI non aggiornata. Gli ambienti che utilizzano AMI rese private non saranno più in grado di avviare istanze.

Se non riesci a migrare l'applicazione in un ambiente supportato prima che venga ritirata, l'ambiente potrebbe trovarsi in questa situazione. Potrebbe sorgere la necessità di aggiornare un ambiente per una ramificazione della piattaforma Beanstalk, in cui la sua AMI Elastic Beanstalk di base è stata resa privata. È disponibile un approccio alternativo. Puoi aggiornare un ambiente esistente in base a una copia dell'AMI Elastic Beanstalk di base utilizzata dall'ambiente.

Questo argomento offre alcuni passaggi e uno script autonomo per aggiornare un ambiente esistente basato su una copia dell'AMI Elastic Beanstalk di base utilizzata dall'ambiente. Una volta che sarai in grado di migrare l'applicazione su una piattaforma supportata, potrai continuare a utilizzare le procedure standard per la manutenzione dell'applicazione e degli ambienti supportati.

Procedura manuale

Per aggiornare un ambiente basato su una copia AMI dell'AMI Elastic Beanstalk di base
  1. Determina quale AMI sta utilizzando il tuo ambiente. Questo comando restituisce l'AMI usato dall'ambiente Elastic Beanstalk fornito nei parametri. Il valore restituito viene utilizzato come source-ami-id nel passaggio successivo.

    In una finestra di comando, eseguire un comando come il seguente. Per ulteriori informazioni, consulta describe-configuration-settings nella Guida di riferimento dei comandi AWS CLI.

    Specifica la AWS regione che memorizza l'AMI di origine che desideri copiare. Sostituisci il nome dell'applicazione e il nome dell'ambiente con quelli basati sull'AMI di origine. Inserisci il testo per il parametro di interrogazione come mostrato.

    >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. Copia l'AMI nell'account. Questo comando restituisce il nuovo AMI risultante dalla copia del source-ami-id restituito nel passaggio precedente.

    Nota

    Assicurati di prendere nota del nuovo ID AMI emesso da questo comando. Dovrai inserirlo nel passaggio successivo, sostituendo copied-ami-id nel comando di esempio.

    In una finestra di comando, eseguire un comando come il seguente. Per ulteriori informazioni, consulta copy-image nella Guida di riferimento dei comandi AWS CLI.

    Specifica la regione AWS dell'AMI di origine che desideri copiare (--source-region) e la regione in cui desideri utilizzare la nuova AMI personalizzata (--region). Sostituisci source-ami-id con l'AMI dell'immagine che stai copiando. Il source-ami-id è stato restituito dal comando nel passaggio precedente. Sostituisci new-ami-name con un nome per descrivere la nuova AMI nella regione di destinazione. Lo script che segue questa procedura genera il nuovo nome AMI aggiungendo la stringa "Copia di" all'inizio del nome del 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. Aggiornare un ambiente per utilizzare l'AMI copiata. Dopo l'esecuzione, il comando restituisce lo stato dell'ambiente.

    In una finestra di comando, eseguire un comando come il seguente. Per ulteriori informazioni, consulta update-environment nella Guida di riferimento dei comandi AWS CLI.

    Specifica la regione AWS dell'ambiente e dell'applicazione da aggiornare. Sostituisci il nome dell'applicazione e il nome dell'ambiente con quelli che devi associare al copied-ami-id del passaggio precedente. Per il parametro --option-setttings, sostituisci copied-ami-id con l'ID AMI che hai annotato dall'output del comando precedente.

    >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

Per ridurre al minimo i costi di archiviazione, si consiglia di ripulire l'AMI personalizzata quando non è più necessaria per avviare gli ambienti Elastic Beanstalk. Per ulteriori informazioni, consulta Pulizia di un'AMI personalizzata.

Script standalone

Lo script seguente fornisce gli stessi risultati dei passaggi manuali precedenti. Scarica lo script selezionando questo 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

È necessario installare AWS CLI per eseguire lo script. Per le istruzioni di installazione, consulta Installa o aggiorna l'ultima versione della AWS CLI nella Guida per l'utente di AWS Command Line Interface.

Dopo aver installato AWS CLI, è inoltre necessario configurarlo per utilizzare l'account AWS proprietario dell'ambiente. Per ulteriori informazioni, consulta Configura la AWS CLI nella Guida per l'utente di AWS Command Line Interface. L'account deve inoltre disporre delle autorizzazioni per creare un'AMI e aggiornare l'ambiente Elastic Beanstalk.

Questi passaggi descrivono il processo seguito dallo script.

  1. Stampa l'account in uso.

  2. Determina quale AMI viene utilizzata dall'ambiente (AMI di origine).

  3. Verifica se l'AMI di origine è già di proprietà dell'account. Se sì, esci.

  4. Determina il nome dell'AMI di origine in modo che possa essere utilizzato nel nuovo nome AMI. Questo serve anche a confermare l'accesso all'AMI di origine.

  5. Controlla se l'AMI di origine è già stato copiato nell'account. Questa operazione viene eseguita cercando le AMI con il nome dell'AMI copiata di proprietà dell'account. Se il nome AMI è stato modificato tra le esecuzioni dello script, copierà nuovamente l'immagine.

  6. Se l'AMI di origine non è già stato copiato, copia l'AMI di origine sull'account e attendi che la nuova AMI sia disponibile.

  7. Aggiorna la configurazione dell'ambiente per utilizzare la nuova AMI.

  8. Attendi il completamento dell'aggiornamento dell'ambiente.

Dopo aver estratto lo script dal file copy_ami_and_update_env.zip, eseguilo procedendo come nell'esempio proposto. Sostituisci il nome dell'applicazione e il nome dell'ambiente nell'esempio con i propri valori.

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

Per ridurre al minimo i costi di archiviazione, si consiglia di ripulire l'AMI personalizzata quando non è più necessaria per avviare gli ambienti Elastic Beanstalk. Per ulteriori informazioni, consulta Pulizia di un'AMI personalizzata.