2021年4月16日
ElasticBeanstalkでAmazonLinux2 Ruby環境にデプロイする


はじめに
ElasticBeanstalkでAmazonLinux2ベースのRubyプラットフォームでRailsアプリケーションを動かしてみました。実際にやってみてハマりどころが多く、公開されているブログ記事も少なかったため今回記事にすることにしました。また、この記事では「ElasticBeanstalk上で動かす」ことをゴールとしており、SSLやDBの設定、デプロイ設定などには深くは触れません。
環境
- Ruby: 2.7.2
- Rails: 6.0.3
環境を作成する
ElasticBeanstalk上でアプリケーション及び環境の作成を行います。
まず環境名やプラットフォーム選択などの基本的な情報の設定を行います。
- 環境枠の選択: ウェブサーバ環境
- アプリケーション名: 任意のアプリケーション名
- 環境名: 任意の環境名
- プラットフォーム: 管理されたプラットフォーム
* プラットフォーム: Ruby
* プラットフォームのブランチ: Ruby2.7 running on 64bit Amazon Linux 2
* プラットフォームのバージョン: AWSの推奨バージョンを選択(今回は3.2.4を使用)
- アプリケーションコード: サンプルアプリケーション
次に「より多くのオプションの設定」をクリックして、詳細設定へ進みます。
今回はALBを使用した負荷分散を実現するためにプリセットは「高可用」に設定します。
環境プロパティにはRailsアプリケーションを動かすために必要な環境変数を設定します。詳細は割愛しますが、今回は別で立てたRDBへの接続に必要な情報とSECRET_KEY_BASE、RAILS_ENVを環境変数として設定しました。
- プリセット: 高可用
- ソフトウェア
- 環境プロパティ: アプリケーションに必要な環境変数を設定
ここまで設定できたら「環境の作成」ボタンをクリックして数分待つとElasticBeanstalk環境が作成されます。
環境に設定されたURLにアクセスするとサンプルアプリが表示されることが確認できるかと思います。
デプロイする
今回デプロイにはEB CLIを使用しました。EB CLIのインストール手順は公式のドキュメントがあるのでそちらを参考にすると良いかと思います。自分の開発環境はMacなので、macOSでEB CLIをインストールするを参考にしました。
インストール後、eb deployコマンドを使って実際にデプロイしてみたところ、まずコケました。
今回かなりハマってしまったProcfileと、トラブルシューティングに役立ったログファイルの見方についてご紹介します。
Procfile
公式のガイドによると、ElasticBeanstalkでRuby アプリケーションを起動するコマンドを指定するには、ルートディレクトリにProcfile を作成して配置する必要があります。
Procfileが配置されていない場合は、下記のデフォルトファイルが生成されます。この場合ElasticBeanstalkによりグローバルにインストールされたPumaが使用されるため、Puma5.2.1(現時点のRuby2.7プラットフォームの場合)でアプリケーションの起動が行われます。アプリケーションで設定されたPumaとのバージョンの違いによりデプロイが失敗していたと考えられます。
web: puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
Railsアプリ内のGemfileで指定されたPumaで起動するためには、下記コードのProcufileを配置します。これでPuma4.3.7でアプリケーションを起動することができるようになりました。
web: bundle exec puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
さらに、Railsアプリケーション内のPumaの設定ファイルを指定して起動するために下記のようにファイルを修正しました。これによりソースコード内でPumaの設定を変更することができるようになります。
web: bundle exec puma -C /var/app/current/config/puma.rb
インターネット上には、Pumaのバージョンを変える、nginxの設定を変えるなど様々な情報がありますが、公式のドキュメントを丁寧に読んでいくのが正義だなと改めて思いました。
ログファイル
デプロイ時にどこでエラーが発生したのかはログに記録されています。ここでは今回の作業のトラブルシューティングに役立ったファイルを簡単にご紹介します。
- /var/log/eb-engine.log
* デプロイ全般に関するログを確認することができる
* eb-activity.logと同じ位置づけであると認識しています
- /var/log/cfn-init-cmd.log
* .ebextensionsのログを確認することができる
- /var/log/web.stdout.log
* サーバの起動に関するログが見れる
- /var/log/nginx/error.log
* nginxのエラーログが見れる
- /var/log/puma/puma.log
* pumaのエラーログが見れる
構成ファイルによるAWSリソースのカスタマイズ
本記事の趣旨とは少しずれますが、ElasticBeanstalkでは構成ファイルをソースコードに追加してAWSリソースをカスタマイズすることができます。本記事では詳細な説明は割愛しますが、参考なった公式ドキュメントのリンクを貼りましたので何かのお役に立てばと思います。
Elastic Beanstalk Linux プラットフォームの拡張
設定ファイル (.ebextensions) による高度な環境のカスタマイズ
Elastic Beanstalk Ruby プラットフォームを使用する
まとめ
今回はElasticBeanstalkでAmazonLinux2ベースのRubyプラットフォームでRailsアプリケーションを動かす方法をご紹介しました。ElasticBeanstalkは設定の勘所さえつかめれば、アプリケーションのデプロイ/運用が簡単に実現できるサービスだと思います。ぜひ一度使ってみてはいかがでしょうか。その際に本記事が少しでもお役に立てば嬉しく思います。
AWSのお仕事に関するご相談
Bageleeの運営会社、palanではAWSに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
0
0
関連記事
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。

kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya

aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!