2021年4月16日

ElasticBeanstalkでAmazonLinux2 Ruby環境にデプロイする

目次

  1. はじめに
  2. 環境を作成する
  3. デプロイする
  4. 構成ファイルによるAWSリソースのカスタマイズ
  5. まとめ

はじめに

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

AUTHOR

kobori

こぼり ともろう エンジニア

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

アプリでもっと便利に!気になる記事をチェック!

記事のお気に入り登録やランキングが表示される昨日に対応!毎日の情報収集や調べ物にもっと身近なメディアになりました。

簡単に自分で作れるWebAR

「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。

palanARへ
palanar

palanはWebARの開発を
行っています

弊社では企画からサービスの公開終了まで一緒に関わらせていただきます。 企画からシステム開発、3DCG、デザインまで一貫して承ります。

webar_waterpark

palanでは一緒に働く仲間を募集しています

正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。

話を聞いてみたい

運営メンバー

eishis

Eishi Saito 総務

SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。

sasakki デザイナー

アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

しまだ

しまだ デザイナー

WebAR/VRのデザインと3DCG制作がメインです。 肩書きは「アニメ案件に関わりたいデザイナー」。

Miu マーケター

ドイツでWEBマーケティングしています。

しんのき エンジニア

主に React Native を使ったアプリ開発と AWS や Firebase を使ったサーバーレスアーキテクチャを担当しています。元々はインフラとかPHPをやっていました。

yamakawa

やまかわたかし デザイナー

フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。

furuya エンジニア

サーバーサイド、フロントエンド、Unityと色々手を出してる雑食系エンジニア。ReactNativeが最近のマイブーム。

Sayaka Osanai デザイナー

Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた

はらた エンジニア

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

うえまつゆい エンジニア

サーバーサイドエンジニアからフロントエンドエンジニアになりました。主にReact Nativeでのアプリ開発をしています。

kobori

こぼり ともろう エンジニア

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

sasai

ささい エンジニア

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

damien

Damien

WebAR/VRを中心に企画・マークアップ・開発をやっています。森に住んでいます。

デザイナーゲスト

ゲスト デザイナー

かっきー

かっきー

まりな

まりな

suzuki

suzuki

taro

taro

xR界隈のビズをやっています。新しいガジェットとか使うのが好きです。あとお寿司は玉子のお寿司が好きです。

miyagi

ogawa

ogawa

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

いわもと

いわもと

CONTACT PAGE TOP