AWS Elastic Beanstalk での Platform の更新
はじめに
先週、AWS Elastic Beanstalk の Application で、Environment の Platform の更新を行いました。更新したのは、ボランティアとして、開発や保守をしている Safecast の APIサーバー です。
きっかけ
APIサーバーで、追加する機能を確認しようとして、開発用のサーバーにデプロイしたら、エラーになってしまいました。エラーの原因を調査すると、デプロイの中で、RPM をダウンロードできなくて、アプリケーションのビルドができていませんでした。RPMのダウンロードができないのは、ダウンロード先のサーバーのSSL証明書が確認できないためですが、証明書には問題がなく、サーバー内の認証局情報が古いのが問題でした。情報が古いのは、サーバーが、古い Amazon Linux 上で動いているためでした。良い機会なので、Platform を Amazon Linux 2 ベースに更新することにしました。
移行作業
移行作業は、試してみて、問題があれば、文書を読んで、修正することの繰り返しでした。まずは、アプリケーションを 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
に配置する。
以下が、今回の変更内容です。
最後に
移行作業自体は、スムーズに終了しました。後で、少し問題点が見つかって、修正中です。 Elastic Beanstalk は、AWS サービスの中では、避けていたサービスなのですが、今回の移行作業を通じて、一通りの事ができるようになったと思います。