廃止されたプラットフォームの Amazon マシンイメージ (AMI) へのアクセスを維持する - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

廃止されたプラットフォームの Amazon マシンイメージ (AMI) へのアクセスを維持する

Elastic Beanstalk は、ブランチが使用するオペレーティングシステムまたは主要コンポーネントのサポートが終了になると、プラットフォームブランチのステータスを「廃止」に設定します。プラットフォームブランチの「ベース」 Elastic Beanstalk AMI をプライベートにして、この古い AMI の使用を禁止することもできます。プライベートにした AAMI を使用する環境ではインスタンスを起動できなくなります。

廃止される前にサポート対象の環境にアプリケーションを移行できない場合、ご使用の環境で、このような状況が発生するになる可能性があります。ベース Elastic Beanstalk AMI がプライベートにされた Beanstalk プラットフォームブランチの環境を更新する必要が生じる場合があります。別のアプローチもあります。環境で使用されているベース Elastic Beanstalk AMI の「コピー」に基づいて既存の環境を更新できます。

このトピックでは、環境で使用されているベース Elastic Beanstalk AMI の「コピー」に基づいて既存の環境を更新するステップとスタンドアロンスクリプトについて説明します。アプリケーションをサポート対象のプラットフォームに移行できたら、引き続きアプリケーションとサポート対象環境を維持するための標準の手順を使用できます。

手動ステップ

ベース Elastic Beanstalk AMI の AMI コピーに基づいて環境を更新するには
  1. 環境で使用している AMI を特定します。以下のコマンドは、パラメータで指定した Elastic Beanstalk 環境で使用されている AMI を返します。戻り値は次のステップで source-ami-id として使用します。

    コマンドウィンドウで、次のようなコマンドを実行します。詳細については、「AWS CLI コマンドリファレンス」の「describe-configuration-settings」を参照してください。

    コピーするソース AMI を格納する AWS リージョンを指定します。アプリケーション名と環境名をソース AMI に基づくもので置き換えます。次に示すように、クエリパラメータのテキストを入力します。

    >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. AMI をアカウントにコピーします。このコマンドは、前のステップで返された source-ami-id をコピーした結果となる新しい AMI を返します。

    注記

    このコマンドで出力される新しい AMI ID をメモしておいてください。これは、サンプルコマンドの copied-ami-id の部分を置き換えて口のステップで入力する必要があります。

    コマンドウィンドウで、次のようなコマンドを実行します。詳細については、「AWS CLI コマンドリファレンス」の「copy-image」を参照してください。

    コピーするソース AMI の AWS リージョン (--source-region) と新しいカスタム AMI を使用するリージョン (--region) を指定します。source-ami-id は、コピーするイメージの AMI で置き換えてください。source-ami-id は前のステップのコマンドによって返された値です。new-ami-name は、移行先のリージョンの新しい AMI を説明する名前で置き換えます。この手順の後のスクリプトは、source-ami-id の名前の先頭に「Copy of」という文字列を追加して新しい AMI 名を生成します。

    >aws ec2 copy-image \ --region us-east-2 \ --source-image-id source-ami-id \ --source-region us-east-2 \ --name new-ami-name
  3. 環境を更新して、コピーした AMI を使用します。コマンドを実行すると環境のステータスが返されます。

    コマンドウィンドウで、次のようなコマンドを実行します。詳細については、「AWS CLI コマンドリファレンス」の「update-environment」を参照してください。

    更新する必要のある環境とアプリケーションの AWS リージョンを指定します。アプリケーション名と環境名を、前のステップの copied-ami-id に関連付ける必要があるもので置き換えます。--option-setttings パラメータについては、copied-ami-id を、前のコマンドの出力からメモした AMI ID で置き換えてください。

    >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"
注記

Elastic Beanstalk 環境を起動する必要がなくなった場合は、ストレージコストを最小限に抑えるために AMI をクリーンアップすることを検討してください。詳細については、「カスタム AMI をクリーンアップする」を参照してください。

スタンドアロンスクリプト

次のスクリプトでは、前の手動ステップと同じ結果が得られます。[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"
注記

スクリプトを実行するには、AWS CLI がインストールされている必要があります。インストール手順の詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS CLI の最新バージョンを使用してインストールまたは更新を行う」を参照してください。

AWS CLI をインストールしたら、環境を所有する AWS アカウントを使用するように設定する必要もあります。詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS CLI を設定する」を参照してください。アカウントには、AMI の作成と Elastic Beanstalk 環境の更新を行うアクセス許可も必要です。

次のステップでは、スクリプトが実行するプロセスを説明します。

  1. 使用中のアカウントを出力します。

  2. 環境 (ソース AMI) が使用している AMI を確認します。

  3. ソース AMI が既にアカウントによって所有されているかどうかを確認します。所有されている場合は、終了します。

  4. 新しい AMI 名で使用できるように、ソース AMI の名前を決定します。これはソース AMI へのアクセスを確認するためにも使用されます。

  5. ソース AMI が既にアカウントにコピーされているかどうかを確認します。この確認は、アカウントが所有するコピー AMI の名前で AMI を検索することによって行います。スクリプト実行の合間に AMI 名が変更された場合、イメージは再度コピーされます。

  6. ソース AMI がまだコピーされていない場合は、ソース AMI をアカウントにコピーし、新しい AMI が使用可能になるまで待ちます。

  7. 新しい AMI を使用するように環境設定を更新します。

  8. 環境の更新が完了するまで待ちます。

copy_ami_and_update_env.zip ファイルからスクリプトを抽出し、次の例を実行してスクリプトを実行します。この例のアプリケーション名と環境名は実際の値で置き換えてください。

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

Elastic Beanstalk 環境を起動する必要がなくなった場合は、ストレージコストを最小限に抑えるために AMI をクリーンアップすることを検討してください。詳細については、「カスタム AMI をクリーンアップする」を参照してください。