1
Help us understand the problem. What are the problem?
Organization

Elastic BeanstalkでAmazon Linux 2に移行する際に気をつけること

はじめに

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のバージョンがズレているとエラーが発生して正常に起動されません。

puma/puma.log
[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のデベロッパーガイドにかなり詳しく説明が記載されているので作業を始める前に一度確認しておくことをおすすめします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?