AWS Elastic Beanstalk での Platform の更新

はじめに

先週、AWS Elastic Beanstalk の Application で、Environment の Platform の更新を行いました。更新したのは、ボランティアとして、開発や保守をしている SafecastAPIサーバー です。

きっかけ

APIサーバーで、追加する機能を確認しようとして、開発用のサーバーにデプロイしたら、エラーになってしまいました。エラーの原因を調査すると、デプロイの中で、RPM をダウンロードできなくて、アプリケーションのビルドができていませんでした。RPMのダウンロードができないのは、ダウンロード先のサーバーのSSL証明書が確認できないためですが、証明書には問題がなく、サーバー内の認証局情報が古いのが問題でした。情報が古いのは、サーバーが、古い Amazon Linux 上で動いているためでした。良い機会なので、Platform を Amazon Linux 2 ベースに更新することにしました。

docs.aws.amazon.com

移行作業

移行作業は、試してみて、問題があれば、文書を読んで、修正することの繰り返しでした。まずは、アプリケーションを ZIP 形式にして、そのZIP形式のファイルを元に以下のように application version を作成します。

$ aws elasticbeanstalk create-application-version --region <region> --application-name <application_name> --version-label <verison_label> --source-bundle S3Bucket=<bucket>,S3Key=<key> --description <description>

そして、新しい environment を作成します。

$ aws elasticbeanstalk create-environment --application-name <application_name> --environment-name <environment_name> --template-name <template_name> --platform-arn "arn:aws:elasticbeanstalk:us-west-2::platform/Ruby 2.6 running on 64bit Amazon Linux 2/3.4.0" --version-label <version_label>

問題があれば、修正しての繰り返してでした。

大きな変更点

Amazon Linux 2 への移行で気づいた点は以下になります。

  • Procfile で、アプリケーションサーバーの起動方法を書くことができる。
    • init スクリプトを書いていたので、とても楽になっています。
  • systemd ベースに変更になっている。
    • awslogs などの設定方法が変更になっています。また、nginx とかを再起動したい時も注意する必要がありました。
  • epel は、amazon-linux-extras 経由で有効にする。
    • 元からそうだったかもしれないです。
  • nginx の設定ファイルは、.platform/nginx/conf.d に配置する。

以下が、今回の変更内容です。

github.com

最後に

移行作業自体は、スムーズに終了しました。後で、少し問題点が見つかって、修正中です。 Elastic Beanstalk は、AWS サービスの中では、避けていたサービスなのですが、今回の移行作業を通じて、一通りの事ができるようになったと思います。