Behalten des Zugriffs auf ein Amazon Machine Image (AMI) für eine außer Betrieb genommene Plattform - AWS Elastic Beanstalk

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

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 veralteten AMI zu verhindern. Umgebungen, die AMIs verwenden, die privat gemacht wurden, können keine Instances mehr starten.

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

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 im nächsten Schritt als source-ami-id verwendet.

    Führen Sie in einem Befehlsfenster einen ähnlichen Befehl wie den folgenden aus. Weitere Informationen finden Sie unter describe-configuration-settings in der AWS CLI-Befehlsreferenz.

    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.

    >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. Kopieren Sie das AMI in Ihr Konto. Dieser Befehl gibt das neue AMI zurück, das sich aus dem Kopieren der source-ami-id ergibt, die im vorherigen Schritt zurückgegeben wurde.

    Anmerkung

    Notieren Sie sich unbedingt die neue AMI-ID, die mit diesem Befehl ausgegeben wird. Sie müssen sie im nächsten Schritt eingeben und dabei 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 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). Ersetzen Sie source-ami-id durch das AMI des Images, das Sie kopieren. Die source-ami-if wurde vom Befehl im vorherigen Schritt zurückgegeben. Ersetzen Sie new-ami-name 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 „Copy of“ (Kopie von) an den Anfang des Namens der source-ami-id anhängt.

    >aws ec2 copy-image \ --region us-east-2 \ --source-image-id source-ami-id \ --source-region us-east-2 \ --name new-ami-name
  3. 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 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 der copied-ami-id im vorherigen Schritt zuordnen müssen. Ersetzen Sie für den Parameter --option-settings copied-ami-id durch die AMI-ID, die Sie bei 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.

Eigenständiges Skript

Das folgende Skript liefert dieselben Ergebnisse wie die vorherigen manuellen Schritte. Laden Sie das Skript herunter, indem Sie auf diesen Link klicken: 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"
Anmerkung

Sie müssen die 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 im Benutzerhandbuch zu AWS Command Line Interface.

Nach der Installation müssen Sie AWS CLI auch so konfigurieren, dass sie das AWS-Konto verwendet, dem die Umgebung gehört. Weitere Informationen finden Sie unter Konfigurieren der AWS CLI 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.

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

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

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

  5. Prüfen Sie, ob das Quell-AMI bereits in das Konto kopiert wurde. Dazu wird nach AMIs mit 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.

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

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

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

Nachdem Sie das Skript aus der Datei 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.