概要

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

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

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

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

関連資料

カスタム AMI を作成し、Elastic Beanstalk 環境を起動してプロビジョニング速度を向上させ、低レベルコンポーネントをカスタマイズします。
概要AWS Elastic Beanstalk とは これまで、ペーパー上しか(AWS 認定試験しか)関わってこなかった AWS Elastic Beanstalk を学ぶ機会が出来ました。案件に感謝です。 AWS Elastic Beanstalk は、アプリケーションのデプロイと管理を簡単にする AWSサービスです。イ...

元記事はこちら

https://oji-cloud.net/2021/12/05/post-6769/
著者:
新川貴章


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://www.iret.co.jp/contact/service/form/