Mempertahankan akses ke Amazon Machine Image (AMI) untuk platform yang sudah pensiun - AWS Elastic Beanstalk

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mempertahankan akses ke Amazon Machine Image (AMI) untuk platform yang sudah pensiun

Elastic Beanstalk menetapkan status cabang platform untuk pensiun ketika sistem operasi atau komponen utama yang digunakan oleh cabang mencapai End of Life. Basis Elastic Beanstalk AMI untuk cabang platform juga dapat dibuat pribadi untuk mencegah penggunaan AMI ini. out-of-date Lingkungan yang menggunakan AMI yang telah dibuat pribadi tidak akan lagi dapat meluncurkan instance.

Jika Anda tidak dapat memigrasikan aplikasi Anda ke lingkungan yang didukung sebelum dihentikan, lingkungan Anda mungkin berada dalam situasi ini. Kebutuhan untuk memperbarui lingkungan untuk cabang platform Beanstalk, di mana dasarnya Elastic Beanstalk AMI telah dibuat pribadi, mungkin timbul. Pendekatan alternatif tersedia. Anda dapat memperbarui lingkungan yang ada berdasarkan salinan dasar Elastic Beanstalk AMI yang digunakan oleh lingkungan Anda.

Topik ini menawarkan beberapa langkah dan skrip mandiri untuk memperbarui lingkungan yang ada berdasarkan salinan dasar Elastic Beanstalk AMI yang digunakan oleh lingkungan Anda. Setelah Anda dapat memigrasikan aplikasi Anda ke platform yang didukung, Anda dapat terus menggunakan prosedur standar untuk memelihara aplikasi dan lingkungan yang didukung.

Langkah-langkah manual

Untuk memperbarui lingkungan berdasarkan salinan AMI dari dasar Elastic Beanstalk AMI
  1. Tentukan AMI mana yang digunakan lingkungan Anda. Perintah ini mengembalikan AMI yang digunakan oleh lingkungan Elastic Beanstalk yang Anda berikan dalam parameter. Nilai yang dikembalikan digunakan sebagai source-ami-idpada langkah berikutnya.

    Dalam jendela perintah, jalankan perintah seperti berikut. Untuk informasi selengkapnya, lihat describe-configuration-settingsdi Referensi AWS CLI Perintah.

    Tentukan AWS Wilayah yang menyimpan sumber AMI yang ingin Anda salin. Ganti nama aplikasi dan nama lingkungan dengan yang didasarkan pada sumber AMI. Masukkan teks untuk parameter kueri seperti yang ditunjukkan.

    >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. Salin AMI ke akun Anda. Perintah ini mengembalikan AMI baru yang dihasilkan dari menyalin source-ami-idyang dikembalikan pada langkah sebelumnya.

    catatan

    Pastikan untuk membuat catatan id AMI baru yang dihasilkan oleh perintah ini. Anda harus memasukkannya di langkah berikutnya, mengganti copied-ami-idperintah contoh.

    Dalam jendela perintah, jalankan perintah seperti berikut. Untuk informasi selengkapnya, lihat copy-image di AWS CLICommand Reference.

    Tentukan AWS Wilayah AMI sumber yang ingin Anda salin (--source-region) dan Wilayah tempat Anda ingin menggunakan AMI kustom baru Anda (--region). Ganti source-ami-id dengan AMI gambar yang Anda salin. source-ami-idItu dikembalikan oleh perintah pada langkah sebelumnya. Ganti new-ami-namedengan nama untuk menggambarkan AMI baru di Wilayah tujuan. Skrip yang mengikuti prosedur ini menghasilkan nama AMI baru dengan menambahkan string "Salinan" ke awal namasource-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. Perbarui lingkungan untuk menggunakan AMI yang disalin. Setelah perintah berjalan, ia mengembalikan status lingkungan.

    Dalam jendela perintah, jalankan perintah seperti berikut. Untuk informasi selengkapnya, lihat update-environment di Command Reference. AWS CLI

    Tentukan AWS Wilayah lingkungan dan aplikasi yang perlu Anda perbarui. Ganti nama aplikasi dan nama lingkungan dengan yang perlu Anda kaitkan dengan copied-ami-iddari langkah sebelumnya. Untuk parameter --option-setttings, ganti dengan id AMI copied-ami-idyang Anda catat dari output dari perintah sebelumnya.

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

Untuk meminimalkan biaya penyimpanan, pertimbangkan untuk membersihkan AMI khusus Anda saat Anda tidak membutuhkannya untuk meluncurkan lingkungan Elastic Beanstalk lagi. Untuk informasi selengkapnya, lihat Membersihkan kustom AMI.

Skrip mandiri

Skrip berikut memberikan hasil yang sama dengan langkah manual sebelumnya. Unduh skrip dengan memilih tautan ini: 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"
catatan

Anda harus AWS CLI menginstal untuk menjalankan skrip. Untuk petunjuk penginstalan, lihat Menginstal atau memperbarui versi terbaru dari Panduan AWS Command Line Interface Pengguna. AWS CLI

Setelah menginstalAWS CLI, Anda juga harus mengkonfigurasinya untuk menggunakan AWS akun yang memiliki lingkungan. Untuk informasi selengkapnya, lihat Mengkonfigurasi AWS CLI dalam Panduan AWS Command Line Interface Pengguna. Akun juga harus memiliki izin untuk membuat AMI dan memperbarui lingkungan Elastic Beanstalk.

Langkah-langkah ini menggambarkan proses yang diikuti skrip.

  1. Cetak akun yang sedang digunakan.

  2. Tentukan AMI mana yang digunakan oleh lingkungan (sumber AMI).

  3. Periksa apakah sumber AMI sudah dimiliki oleh akun. Jika ya, keluarlah.

  4. Tentukan nama sumber AMI sehingga dapat digunakan dalam nama AMI baru. Ini juga berfungsi untuk mengkonfirmasi akses ke sumber AMI.

  5. Periksa apakah sumber AMI telah disalin ke akun. Ini dilakukan dengan mencari AMI dengan nama AMI yang disalin yang dimiliki oleh akun. Jika nama AMI telah diubah di antara eksekusi skrip, itu akan menyalin gambar lagi.

  6. Jika sumber AMI belum disalin, salin sumber AMI ke akun dan tunggu AMI baru tersedia.

  7. Perbarui konfigurasi lingkungan untuk menggunakan AMI baru.

  8. Tunggu hingga pembaruan lingkungan selesai.

Setelah Anda mengekstrak skrip dari file copy_ami_and_update_env.zip, jalankan dengan mengeksekusi contoh berikut. Ganti nama aplikasi dan nama lingkungan dalam contoh dengan nilai Anda sendiri.

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

Untuk meminimalkan biaya penyimpanan, pertimbangkan untuk membersihkan AMI khusus Anda saat Anda tidak membutuhkannya untuk meluncurkan lingkungan Elastic Beanstalk lagi. Untuk informasi selengkapnya, lihat Membersihkan kustom AMI.