

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Conservar el acceso a una Imagen de máquina de Amazon (AMI) de una plataforma retirada
<a name="using-features.customenv-env-copy"></a>

Elastic Beanstalk establece el estado de una ramificación de la plataforma en *retirada* cuando el sistema operativo o el componente principal utilizado por la ramificación llega al final de su vida útil. La AMI *básica* de Elastic Beanstalk para la rama de plataforma también se puede convertir en privada para evitar el uso de esta AMI. out-of-date Los entornos AMIs que utilicen entornos que se hayan convertido en privados ya no podrán lanzar instancias.

Si no puede migrar la aplicación a un entorno compatible antes de que se retire, es posible que su entorno se encuentre en esta situación. Puede surgir la necesidad de actualizar un entorno para una ramificación de la plataforma Beanstalk, en la que la AMI base de Elastic Beanstalk se haya convertido en privada. Hay disponible un enfoque alternativo. Puede actualizar un entorno existente en función de una *copia* de la AMI base de Elastic Beanstalk utilizada en su entorno. 

Este apartado ofrece algunos pasos y un script independiente para actualizar un entorno existente en función de una *copia* de la AMI base de Elastic Beanstalk utilizada en su entorno. Una vez que pueda migrar la aplicación a una plataforma compatible, podrá seguir utilizando los procedimientos estándar para mantener la aplicación y los entornos compatibles.

## Procedimiento manual
<a name="using-features.customenv-env-copy.manual-steps"></a>

**Para actualizar un entorno basado en una AMI (copia de la AMI básica de Elastic Beanstalk)**

1. **Determine qué AMI utiliza tu entorno.** Este comando devuelve la AMI utilizada por el entorno de Elastic Beanstalk que proporcione en los parámetros. El valor devuelto se utiliza *source-ami-id*en el siguiente paso.

   En una ventana del sistema, ejecute un comando como el siguiente. Para obtener más información, consulte [describe-configuration-settings](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-configuration-settings.html) en la *Referencia de comandos de la AWS CLI *.

   Especifique la AWS región que almacena la AMI de origen que desea copiar. Sustituya el nombre de la aplicación y el nombre del entorno por aquellos basados en la AMI de origen. Ingrese el texto del parámetro de consulta como se muestra.  
**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. **Copie la AMI en su cuenta.** Este comando devuelve la nueva AMI resultante de copiar la *source-ami-id*que se devolvió en el paso anterior. 
**nota**  
Asegúrese de anotar el nuevo identificador de AMI que genera este comando. Deberá ingresarlo en el siguiente paso y reemplazarlo *copied-ami-id*en el comando de ejemplo.

   En una ventana del sistema, ejecute un comando como el siguiente. Para obtener más información, consulte [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) en la *Referencia de comandos de la AWS CLI *.

   **Especifique la AWS región de la AMI de origen que desea copiar (**--source-region) y la región** en la que quiere usar la nueva AMI personalizada (--region).** *source-ami-id *Sustitúyala por la AMI de la imagen que estás copiando. El comando *source-ami-id*devolvió el paso anterior. *new-ami-name*Sustitúyalo por un nombre que describa la nueva AMI en la región de destino. *El script que sigue este procedimiento genera el nuevo nombre de la AMI añadiendo la cadena «*Copia de*» al principio del nombre de. 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. **Actualice un entorno para utilizar la AMI copiada.** El comando devuelve el estado del entorno tras su ejecución.

   En una ventana del sistema, ejecute un comando como el siguiente. Para obtener más información, consulte [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) en la *Referencia de comandos de la AWS CLI *.

   Especifique la AWS región del entorno y la aplicación que necesita actualizar. Sustituya el nombre de la aplicación y el nombre del entorno por los que necesite asociar en el paso anterior. *copied-ami-id* Para el parámetro **--option-setttings**, sustitúyalo por *copied-ami-id* el identificador de AMI que anotaste en el resultado del 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 los costos de almacenamiento, considere limpiar la AMI AMI personalizada cuando ya no la necesite para lanzar entornos de Elastic Beanstalk. Para obtener más información, consulte [Limpieza de una AMI personalizada](using-features.customenv.md#using-features.customenv.cleanup).

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

El siguiente script proporciona los mismos resultados que los pasos manuales anteriores. Seleccione el siguiente enlace para descargar el script: [copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip).

### Origen del script: copy\$1ami\$1and\$1update\$1env.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**  
Debe tener el archivo AWS CLI instalado para ejecutar el script. Para obtener instrucciones de instalación, consulte [Instalación o actualización de la versión más reciente de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) en la *Guía del usuario de AWS Command Line Interface *.  
Tras instalarlo AWS CLI, también debe configurarlo para que utilice la AWS cuenta propietaria del entorno. Para obtener más información, consulte [Configuración de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) en la *Guía del usuario de AWS Command Line Interface *. La cuenta también debe tener permisos para crear una AMI y actualizar el entorno de Elastic Beanstalk. 

 Estos pasos describen el proceso que sigue el script. 

1. Imprima la cuenta en uso. 

1. Determine qué AMI utiliza el entorno (AMI de origen).

1. Compruebe si la AMI de origen ya es propiedad de la cuenta. En caso afirmativo, salga. 

1. Determine el nombre de la AMI de origen para que pueda usarse en el nombre de la nueva AMI. Esto también sirve para confirmar el acceso a la AMI de origen.

1. Compruebe si la AMI de origen ya se ha copiado en la cuenta. Esto se hace buscando AMIs con el nombre de la AMI copiada propiedad de la cuenta. Si el nombre de la AMI se ha cambiado entre las ejecuciones del script, volverá a copiar la imagen.

1. Si la AMI de origen aún no se ha copiado, cópiela en la cuenta y espere a que la nueva AMI esté disponible.

1. Actualice la configuración del entorno para utilizar la nueva AMI.

1. Espere a que se complete la actualización del entorno.

Tras extraer el script del archivo [copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip), ejecútelo mediante la ejecución del siguiente ejemplo. Sustituya el nombre de la aplicación y el nombre del entorno del ejemplo con sus propios valores.

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

**nota**  
Para minimizar los costos de almacenamiento, considere limpiar la AMI AMI personalizada cuando ya no la necesite para lanzar entornos de Elastic Beanstalk. Para obtener más información, consulte [Limpieza de una AMI personalizada](using-features.customenv.md#using-features.customenv.cleanup).