Elastic Beanstalk でカスタムAMI を更新する方法
概要
- Elastic Beanstalk を使用する際に、標準のAMI ではなく、カスタムAMI を使用したい場面があるかと思います。例えば、あらかじめイメージにパッケージを導入したい、スクリプトを配置したいといったケースです。今回、ご紹介する記事は、そんなかゆい所に手が届く、Elastic Beanstalk でカスタムAMI を更新する方法になります。
- OS のカスタマイズは、設定ファイル (.ebextensions)を利用することも可能です。しかし、設定ファイル (.ebextensions)は、環境の作成や更新時に時間が掛かる場合があります。あらかじめ、カスタムAMI を作成することで、環境の作成や更新時の時間が短縮できるメリットがあります。
Elastic Beanstalk でカスタムAMI を更新する方法
Elastic Beanstalk のAMI を特定する
- Elastic Beanstalk では、Elastic Beanstalk 環境で起動しているインスタンスから AMI を作成してはいけません。先ずは、Elastic Beanstalk のAMI を特定することが必要になります。
- aws cli のelasticbeanstalk describe-platform-version を使用します。カスタム AMI を使用する AWS のリージョンを指定し、プラットフォームの ARN(バージョンを含む)を指定します。
aws elasticbeanstalk describe-platform-version –region ap-northeast-1 –platform-arn “arn:aws:elasticbeanstalk:ap-northeast-1::platform/Python 3.8 running on 64bit Amazon Linux 2" –query PlatformDescription.CustomAmiList
- 以下の場合、AMI ID の “ami-04b9c3fd89cd227f5" を特定することができました。
- 続けて、AMI ID のName を確認します。aws cli のec2 describe-images を使用します。AMI のNameによって確認できた年と月(例:2021.11)を後述のリポジトリバージョン番号に使用します。
$ aws elasticbeanstalk describe-platform-version --region ap-northeast-1 \
--platform-arn "arn:aws:elasticbeanstalk:ap-northeast-1::platform/Python 3.8 running on 64bit Amazon Linux 2" \
--query PlatformDescription.CustomAmiList
[
{
"VirtualizationType": "pv",
"ImageId": ""
},
{
"VirtualizationType": "hvm",
"ImageId": "ami-04b9c3fd89cd227f5"
}
]
$ aws ec2 describe-images --image-ids ami-04b9c3fd89cd227f5 --query 'Images[].Name'
[
"aws-elasticbeanstalk-amzn-2.0.20211103.64bit-eb_python38_amazon_linux_2-hvm-2021-11-17T15-34"
]
カスタムAMI 作成用のインスタンス起動
- AWSコンソールにて、EC2 サービスを開きます。「インスタンスを起動」を選択し、新規インスタンスを作成します。
- 先ほど特定したElastic Beanstalk のAMI を検索して、選択します。
- 「高度な詳細」の「ユーザーデータ」に下記のスクリプトを指定します。repository version number は、先ほど特定したAMI の年と月となります。
#cloud-config
repo_releasever: repository version number
repo_upgrade: none
- ユーザーデータの指定は、以下のようになります。
- カスタムAMI 作成用のインスタンスが起動しました。
目的のカスタマイズを行う
- ターミナルからカスタムAMI 作成用のインスタンスにログインします。
- パッケージの追加インストールを行ったり、スクリプト導入(/etc/rc*.d, /etc/cloud/cloud.cfg.d)など、目的のカスタマイズを行います。今回は、/etc/cloud/cloud.cfg.d/ 配下にcfg、スクリプトを配置しました。
- インスタンスを停止します。
- AMI を取得します。
Elastic Beanstalk のAMI を更新する
- AWSコンソールにて、Elastic Beanstalk サービスを開きます。
- 環境を選択します。
- 「設定」→「容量」の「編集」を押します。
- AMI に先ほど作成したカスタムAMI を登録します。
- 設定した変更を反映します。以下の画面で、「確認」を押します。
- 環境の更新完了を待ちます。
- 環境が無事に更新されました。