Elastic Beanstalk でカスタムAMI を更新する方法

12月 5, 2021AWS,Elastic Beanstalk

概要

  • 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 を登録します。

 

  • 設定した変更を反映します。以下の画面で、「確認」を押します。

 

  • 環境の更新完了を待ちます。

 

  • 環境が無事に更新されました。

 

 

関連資料

AWS,Elastic Beanstalk

Posted by takaaki