

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
<a name="using-features.customenv-env-copy"></a>

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 il ramo della piattaforma può anche essere resa privata per impedire l'uso di questa AMI. out-of-date Gli ambienti AMIs che utilizzano quelle che sono state 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
<a name="using-features.customenv-env-copy.manual-steps"></a>

**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](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-configuration-settings.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

   Specificare la AWS regione che memorizza l'AMI di origine che si desidera 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.  
**Example**  

   ```
   >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"
   ```

1. **Copia l'AMI nell'account.** Questo comando restituisce la nuova AMI risultante dalla copia di *source-ami-id*quella restituita nel passaggio precedente. 
**Nota**  
Assicurati di prendere nota del nuovo ID AMI emesso da questo comando. Dovrai inserirlo nel passaggio successivo, sostituendolo *copied-ami-id*nel comando di esempio.

   In una finestra di comando, eseguire un comando come il seguente. Per ulteriori informazioni, consulta [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) nella *Guida di riferimento dei comandi AWS CLI *.

   **Specificare la AWS regione dell'AMI di origine che si desidera copiare (**--source-region) e la regione** in cui si desidera utilizzare la nuova AMI personalizzata (--region).** Sostituisci *source-ami-id *con l'AMI dell'immagine che stai copiando. *source-ami-id*È stato restituito dal comando nel passaggio precedente. Sostituiscilo *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 di. 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}}
   ```

1. **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](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) nella *Guida di riferimento dei comandi AWS CLI *.

   Specificate la AWS regione dell'ambiente e dell'applicazione da aggiornare. Sostituisci il nome dell'applicazione e il nome dell'ambiente con quelli che devi associare *copied-ami-id*al passaggio precedente. Per il parametro **--option-setttings**, sostituiscilo con {{copied-ami-id}} 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](using-features.customenv.md#using-features.customenv.cleanup).

## Script standalone
<a name="using-features.customenv-env-copy.script"></a>

Lo script seguente fornisce gli stessi risultati dei passaggi manuali precedenti. Scarica lo script selezionando questo link: [copy\_ami\_and\_update\_env.zip](samples/copy_ami_and_update_env.zip).

### Fonte dello script: copy\_ami\_and\_update\_env.sh
<a name="abc"></a>

```
#!/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 averlo AWS CLI installato per eseguire lo script. Per le istruzioni di installazione, consulta [ Installa o aggiorna l'ultima versione della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) nella *Guida per l'utente di AWS Command Line Interface *.  
Dopo aver installato AWS CLI, è inoltre necessario configurarlo per utilizzare l' AWS account proprietario dell'ambiente. Per ulteriori informazioni, consulta [Configura la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 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. 

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

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

1. 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.

1. Controlla se l'AMI di origine è già stato copiato nell'account. Questa operazione viene eseguita mediante la ricerca AMIs 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.

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

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

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

Dopo aver estratto lo script dal file [copy\_ami\_and\_update\_env.zip](samples/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](using-features.customenv.md#using-features.customenv.cleanup).