はじめに
Amazon Linux AMIのプラットフォームが非推奨となったため、Amazon Linux 2への乗り換えを実施したのですが、いろいろとハマった箇所があったので解決法とともに紹介したいと思います。
プラットフォームの変更によりファイルの配置などが大幅に変更されているので、新しい環境を立ち上げてデプロイするだけではまともに起動することも出来ません。
.ebextensions
を使用したカスタマイズを行っている場合は特に注意が必要です。
環境
弊社ではRuby on Railsを使用しているので、Ruby2.7のAmazon Linux 2プラットフォームを選択しました。
- Ruby 2.7 AL2バージョン 3.3.4
※移行時点(現在は3.3.6)
乗り換え時の注意点
Procfile
アプリケーションの実行はProcfileを使用するようになりました。
アプリケーションソースのルートディレクトリにあるProcfileが参照されます。
開発時にforemanを使用している方は開発用のProcfileをデプロイ時に含めないように注意する必要があります。
Pumaのバージョン
Procfileが存在しない場合、アプリケーションサーバーとしてプリインストールされているPumaが使用されます。
Gemfileで指定しているPumaのバージョンと環境のPumaのバージョンがズレているとエラーが発生して正常に起動されません。
[3119] - Gracefully shutting down workers...
=== puma startup: 2021-08-19 12:54:53 +0900 ===
=== puma startup: 2021-08-19 12:54:53 +0900 ===
[9446] + Gemfile in context: /var/app/current/Gemfile
[9448] + Gemfile in context: /var/app/current/Gemfile
[9448] ! Unable to start worker
[9448] /opt/rubies/ruby-2.7.4/lib/ruby/site_ruby/2.7.0/bundler/runtime.rb:302:in `check_for_activated_spec!'
[9448] Early termination of worker
[9453] + Gemfile in context: /var/app/current/Gemfile
[9446] ! Unable to start worker
[9446] /opt/rubies/ruby-2.7.4/lib/ruby/site_ruby/2.7.0/bundler/runtime.rb:302:in `check_for_activated_spec!'
BundlerでインストールされたPumaを使用する場合はProcfileに下記のように記述します。
web: bundle exec puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
awslogsの設定
アプリケーションのログファイルをCloudWatch Logsへ取り込むには以前と同様に.ebextensions
で設定が可能です。
ただし、以前はservice
コマンドを使っていたところがAL2からsystemctl
を使用するように変わっているので注意が必要です。
以前の形式
commands:
"01":
command: chkconfig awslogs on
"02":
command: service awslogs restart
AL2版
commands:
"01":
command: systemctl enable awslogsd.service
"02":
command: systemctl restart awslogsd
nginx(リバースプロキシ)のカスタマイズ
以前は.ebextensions
でnginxのcond.d以下に設定ファイルを追加したり、nginxをリスタートするように設定していましたが、AL2では決められたパスにファイルを置いておくだけで自動的に取り込まれる仕組みになりました。
詳しい設定方法はドキュメントの「リバースプロキシの設定」の項目をご覧ください。
ただし、アプリケーションソースに含める必要があるため、環境変数などに依存したカスタマイズは出来ませんので注意してください。
.platform/hooks/prebuild/
に設定ファイルを書き出すスクリプトを置くことで細かい制御が可能ですが、長くなるため説明は省略します。
まとめ
プラットフォームの更新でファイル構成についてはかなり変わってしまった印象を受けました。
AWSのデベロッパーガイドにかなり詳しく説明が記載されているので作業を始める前に一度確認しておくことをおすすめします。