

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Behalten des Zugriffs auf ein Amazon Machine Image (AMI) für eine außer Betrieb genommene Plattform
<a name="using-features.customenv-env-copy"></a>

Elastic Beanstalk setzt einen Plattformzweig-Status auf *außer Betrieb genommen*, wenn das Betriebssystem oder die Hauptkomponente, die vom Zweig verwendet wird, das Ende der Lebensdauer erreicht. Das *Basis-AMI* von Elastic Beanstalk für den Plattformzweig kann auch privat gemacht werden, um die Verwendung dieses out-of-date AMI zu verhindern. Umgebungen, in AMIs denen das als privat deklariert wurde, werden keine Instances mehr starten können.

Wenn Sie Ihre Anwendung nicht in eine unterstützte Umgebung migrieren können, bevor sie außer Betrieb genommen wurde, befindet sich Ihre Umgebung möglicherweise in dieser Situation. Es kann sein, dass eine Umgebung für einen Zweig der Beanstalk-Plattform aktualisiert werden muss, dessen Elastic-Beanstalk-Basis-AMI privat gemacht wurde. Ein alternativer Ansatz ist verfügbar. Sie können eine bestehende Umgebung aktualisieren, die auf einer *Kopie* des von Ihrer Umgebung verwendeten Elastic-Beanstalk-Basis-AMIs basiert. 

In diesem Thema finden Sie einige Schritte und ein eigenständiges Skript zur Aktualisierung einer bestehenden Umgebung auf der Grundlage einer *Kopie* des von Ihrer Umgebung verwendeten Elastic-Beanstalk-AMI. Sobald Sie Ihre Anwendung zu einer unterstützten Plattform migrieren können, können Sie weiterhin die Standardverfahren für die Wartung Ihrer Anwendung und der unterstützten Umgebungen verwenden.

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

**So aktualisieren Sie eine Umgebung, die auf einer AMI-Kopie des von Elastic-Beanstalk-Basis-AMI basiert**

1. **Ermitteln Sie, welches AMI Ihre Umgebung verwendet.** Dieser Befehl gibt das AMI zurück, das von der Elastic-Beanstalk-Umgebung verwendet wird, die Sie in den Parametern angeben. Der zurückgegebene Wert wird als *source-ami-id*im nächsten Schritt verwendet.

   Führen Sie in einem Befehlsfenster einen ähnlichen Befehl wie den folgenden aus. Weitere Informationen finden Sie unter [describe-configuration-settings](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-configuration-settings.html) in der Referenz zum *AWS CLI -Befehl*.

   Geben Sie die AWS Region an, in der das Quell-AMI gespeichert wird, das Sie kopieren möchten. Ersetzen Sie den Anwendungsnamen und den Umgebungsnamen durch diejenigen, die auf dem Quell-AMI basieren. Geben Sie den Text für den Abfrageparameter wie in der Abbildung gezeigt ein.  
**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. **Kopieren Sie das AMI in Ihr Konto.** Dieser Befehl gibt das neue AMI zurück, das sich aus dem Kopieren des *source-ami-id*im vorherigen Schritt zurückgegebenen ergibt. 
**Anmerkung**  
Notieren Sie sich unbedingt die neue AMI-ID, die mit diesem Befehl ausgegeben wird. Sie müssen ihn im nächsten Schritt eingeben und ihn *copied-ami-id*im Beispielbefehl ersetzen.

   Führen Sie in einem Befehlsfenster einen ähnlichen Befehl wie den folgenden aus. Weitere Informationen finden Sie unter [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) in der *AWS CLI -Befehlsreferenz*.

   **Geben Sie die AWS Region des Quell-AMI an, das Sie kopieren möchten (**--source-region**), und die Region, in der Sie Ihr neues benutzerdefiniertes AMI verwenden möchten (--region).** *source-ami-id *Ersetzen Sie es durch das AMI des Images, das Sie kopieren. Das *source-ami-id*wurde vom Befehl im vorherigen Schritt zurückgegeben. *new-ami-name*Ersetzen Sie es durch einen Namen, der das neue AMI in der Zielregion beschreibt. *Das Skript, das diesem Verfahren folgt, generiert den neuen AMI-Namen, indem es die Zeichenfolge "*Kopie von*" an den Anfang des Namens von anhängt. 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. **Aktualisieren Sie eine Umgebung, um das kopierte AMI zu verwenden.** Nachdem der Befehl ausgeführt wurde, gibt er den Status der Umgebung zurück.

   Führen Sie in einem Befehlsfenster einen ähnlichen Befehl wie den folgenden aus. Weitere Informationen finden Sie unter [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) in der *AWS CLI -Befehlsreferenz*.

   Geben Sie die AWS Region der Umgebung und Anwendung an, die Sie aktualisieren möchten. Ersetzen Sie den Anwendungs- und Umgebungsnamen durch die Namen, die Sie *copied-ami-id*aus dem vorherigen Schritt zuordnen müssen. Ersetzen *copied-ami-id* Sie den Parameter **--option-setttings** durch die AMI-ID, die Sie in der Ausgabe des vorherigen Befehls notiert haben.

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

**Anmerkung**  
Um die Speicherkosten zu minimieren, sollten Sie Ihr benutzerdefiniertes AMI bereinigen, wenn Sie es nicht mehr zum Starten von Elastic-Beanstalk-Umgebungen benötigen. Weitere Informationen finden Sie unter [Bereinigen eines benutzerdefinierten AMI](using-features.customenv.md#using-features.customenv.cleanup).

## Eigenständiges Skript
<a name="using-features.customenv-env-copy.script"></a>

Das folgende Skript liefert dieselben Ergebnisse wie die vorherigen manuellen Schritte. Laden Sie das Skript herunter, indem Sie auf diesen Link klicken: [copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip).

### Skriptquelle: 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"
```

**Anmerkung**  
Sie müssen das AWS CLI installiert haben, um das Skript ausführen zu können. Installationsanweisungen finden Sie unter [Installieren oder Aktualisieren der aktuellen Version der AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) im *Benutzerhandbuch zu AWS Command Line Interface *.  
Nach der Installation müssen Sie es auch so konfigurieren AWS CLI, dass es das AWS Konto verwendet, dem die Umgebung gehört. Weitere Informationen finden Sie unter [Konfigurieren der AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) im *AWS Command Line Interface -Benutzerhandbuch*. Das Konto muss außerdem über Berechtigungen zum Erstellen eines AMI und zum Aktualisieren der Elastic-Beanstalk-Umgebung verfügen. 

 Diese Schritte beschreiben den Prozess, dem das Skript folgt. 

1. Drucken Sie das verwendete Konto aus. 

1. Ermitteln Sie, welches AMI von der Umgebung verwendet wird (Quell-AMI).

1. Prüfen Sie, ob das Quell-AMI bereits dem Konto gehört. Falls ja, beenden Sie das Programm. 

1. Ermitteln Sie den Namen des Quell-AMI, damit er im neuen AMI-Namen verwendet werden kann. Dies dient auch dazu, den Zugriff auf das Quell-AMI zu bestätigen.

1. Prüfen Sie, ob das Quell-AMI bereits in das Konto kopiert wurde. Dazu wird nach AMIs dem Namen des kopierten AMI gesucht, das dem Konto gehört. Wenn der AMI-Name zwischen den Skriptausführungen geändert wurde, wird das Image erneut kopiert.

1. Wenn das Quell-AMI noch nicht kopiert wurde, kopieren Sie das Quell-AMI in das Konto und warten Sie, bis das neue AMI verfügbar ist.

1. Aktualisieren Sie die Umgebungskonfiguration, um das neue AMI zu verwenden.

1. Warten Sie, bis die Aktualisierung der Umgebung abgeschlossen ist.

Nachdem Sie das Skript aus der Datei [copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip) extrahiert haben, führen Sie es aus, indem Sie das folgende Beispiel ausführen. Ersetzen Sie den Anwendungsnamen und den Umgebungsnamen im Beispiel durch Ihre eigenen Werte.

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

**Anmerkung**  
Um die Speicherkosten zu minimieren, sollten Sie Ihr benutzerdefiniertes AMI bereinigen, wenn Sie es nicht mehr zum Starten von Elastic-Beanstalk-Umgebungen benötigen. Weitere Informationen finden Sie unter [Bereinigen eines benutzerdefinierten AMI](using-features.customenv.md#using-features.customenv.cleanup).