Elastic Beanstalk への Rails アプリケーションのデプロイ - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Elastic Beanstalk への Rails アプリケーションのデプロイ

Rails は Ruby 用のオープンソースである model-view-controller (MVC) フレームワークです。このチュートリアルでは、Rails アプリケーションを生成して AWS Elastic Beanstalk 環境にデプロイする手順を説明します。

前提条件

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、Elastic Beanstalk を使用して開始する の指示に従って、最初の Elastic Beanstalk 環境を起動します。

このガイドの手順に従うには、run command のためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/eb-project$ this is a command this is output

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合したバージョニングである Ubuntu および Bash を入手できます。

Rails フレームワーク 6.1.4.1 には次の依存関係があります。それらのすべてがインストールされていることを確認します。

  • Ruby 2.5.0 以降 – インストール手順については、「Ruby 開発環境をセットアップする」を参照してください。

    このチュートリアルでは、Ruby 3.0.2 と対応する Elastic Beanstalk プラットフォームバージョンを使用します。

  • Node.js – インストール手順については、「Installing Node.js via package manager」を参照してください。

  • Yarn – インストールの手順については、Yarn のウェブサイトにある「Installation (インストール)」を参照してください。

Elastic Beanstalk 環境の起動

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[Ruby] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。

環境を起動するには (コンソール)
  1. 次の事前設定されたリンク console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced を使用して、Elastic Beanstalk コンソールを開きます。

  2. [プラットフォーム] で、アプリケーションで使用される言語に一致するプラットフォームとプラットフォームブランチを選択します。

  3. アプリケーションコード として、サンプルアプリケーション を選択します。

  4. 確認と起動 を選択します。

  5. 使用できるオプションを確認します。使用する有効なオプションを選択し、準備ができたら [アプリケーションの作成] を選択します。

環境の作成の所要時間は約 5 分です。以下のリソースが作成されます。

  • EC2 インスタンス – 選択したプラットフォームでウェブ・アプリケーションを実行するよう設定された Amazon Elastic Compute Cloud (Amazon EC2) 仮想マシン。

    各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、特定のソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、Apache または NGINX のいずれかをウェブアプリケーションの前にリバースプロキシとして配置します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供し、アクセスログとエラーログを生成します。

  • インスタンスセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブ・アプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

  • ロードバランサー – アプリケーションを実行するインスタンスにリクエストを分散するよう設定された Elastic Load Balancing ロードバランサー。ロードバランサーにより、インスタンスを直接インターネットに公開する必要もなくなります。

  • ロードバランサーセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、インターネットからの HTTP トラフィックが、ロードバランサーに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

  • Auto Scaling グループ – インスタンスが終了されたか利用不可になった場合にそのインスタンスを置き換えるよう設定された Auto Scaling グループ。

  • Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。

  • Amazon CloudWatch アラーム – 環境内のインスタンスの負荷をモニタリングし、負荷が高すぎるか低すぎる場合にトリガーされる 2 つの CloudWatch アラーム。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

  • stackAWS CloudFormation – Elastic Beanstalk は AWS CloudFormation を使用して環境内のリソースを起動し、設定の変更を伝達します。リソースは、AWS CloudFormation コンソールに表示できるテンプレートで定義されます。

  • ドメイン名 – ウェブ・アプリケーションまでのルートとなるドメイン名であり、subdomain.region.elasticbeanstalk.com の形式です。

    注記

    Elastic Beanstalk アプリケーションのセキュリティを強化するため、elasticbeanstalk.com ドメインはパブリックサフィックスリスト (PSL) に登録されています。セキュリティ強化のため、Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密な Cookie を設定する必要が生じた場合は、__Host- プレフィックスの付いた Cookie の使用をおすすめします。この方法は、ドメインをクロスサイトリクエストフォージェリ (CSRF) の攻撃から守るのに役立ちます。詳細については、Mozilla 開発者ネットワークの「Set-Cookie」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

注記

Elastic Beanstalk が作成する Amazon S3 バケットは、環境間で共有され、環境の終了時に削除されません。詳細については、「Amazon S3 で Elastic Beanstalk を使用する」を参照してください。

rails をインストールしてウェブサイトを生成します

gem コマンドを使用して、Rails とその依存関係をインストールします。

~$ gem install rails Fetching: concurrent-ruby-1.1.9.gem Successfully installed concurrent-ruby-1.1.9 Fetching: rack-2.2.3.gem Successfully installed rack-2.2.3 ...

Rails のインストールをテストします。

~$ rails --version Rails 6.1.4.1

アプリケーションの名前と共に rails new を使用して、新しい Rails プロジェクトを作成します。

~$ rails new ~/eb-rails

Rails によって、指定した名前を持つディレクトリが作成され、サンプルプログラムをローカルで実行する際に必要となるすべてのファイルが生成されます。その後で Bundler が実行され、プロジェクトの Gemfile で定義されている依存関係(Gem)がすべてインストールされます。

注記

このプロセスにより、プロジェクトの最新の Puma バージョンがインストールされます。このバージョンは、Elastic Beanstalk がお使いの環境の Ruby プラットフォームのバージョンに提供しているものとは異なる場合があります。Elastic Beanstalk で提供されている Puma のバージョンについては、AWS Elastic Beanstalk プラットフォームガイドの「Ruby プラットフォーム履歴」を参照してください。最新の Puma バージョンの詳細については、Puma.io のウェブサイトを参照してください。2 つの Puma バージョン間に矛盾があるときは、次のいずれかのオプションを使用します。

  • 以前の rails new コマンドによりインストールした Puma バージョンを使用する。この場合は、プラットフォームに Procfile を追加して、自分の Puma サーバーバージョンを使用します。詳細については、「[Procfile] でアプリケーションプロセスを設定します」を参照してください。

  • Puma のバージョンを更新して、お使いの環境の Ruby プラットフォームバージョンにプリインストールされているバージョンに一致させる。これを行うには、プロジェクトソースディレクトリのルートにある Gemfile の Puma バージョンを変更します。次に、bundle update を実行します。詳細については、Bundler.io のウェブサイトにある「bundle update (バンドルの更新)」ページを参照してください。

デフォルトのプロジェクトをローカルで実行して、Rails インストールをテストします。

~$ cd eb-rails ~/eb-rails$ rails server => Booting Puma => Rails 6.1.4.1 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.5.2 (ruby 3.0.2-p107) ("Zawgyi") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 77857 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stop ...

デフォルトのプロジェクトのアクションを確認するには、ウェブ・ブラウザで http://localhost:3000 を開きます。


        デフォルトの rails サイトの開発ページ

このページは、開発モードでのみ表示されます。アプリケーションのフロントページにいくつかのコンテンツを追加して、Elastic Beanstalk への実稼働デプロイメントをサポートします。rails generate を使用して、コントローラー、ルート、および先頭ページのビューを作成します。

~/eb-rails$ rails generate controller WelcomePage welcome create app/controllers/welcome_page_controller.rb route get 'welcome_page/welcome' invoke erb create app/views/welcome_page create app/views/welcome_page/welcome.html.erb invoke test_unit create test/controllers/welcome_page_controller_test.rb invoke helper create app/helpers/welcome_page_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/welcome_page.coffee invoke scss create app/assets/stylesheets/welcome_page.scss.

これにより、/welcome_page/welcome のページにアクセスするのに必要なすべてが提供されます。ただし、変更を発行する前に、ビューのコンテンツを変更し、このページがサイトの最上位レベルに表示されるようにルートを追加します。

テキストエディターを使用して app/views/welcome_page/welcome.html.erb の内容を編集します。この例では、cat を使用して既存のファイルのコンテンツを上書きします。

例 app/views/welcome_page/welcome.html.erb
<h1>Welcome!</h1> <p>This is the front page of my first Rails application on Elastic Beanstalk.</p>

最後に、次のルートを config/routes.rb に追加します。

例 config/routes.rb
Rails.application.routes.draw do get 'welcome_page/welcome' root 'welcome_page#welcome'

これにより、Rails は、リクエストをウェブサイトのルートに送り、先頭ページのコントローラーの welcome メソッドにルーティングできるようになります。このメソッドでは、先頭ページのビュー(welcome.html.erb)のコンテンツを表示します。

Elastic Beanstalk が Ruby プラットフォームにアプリケーションを正常にデプロイするには、更新する必要があります。Gemfile.lockGemfile.lock のいくつかの依存関係は、プラットフォーム固有かもしれません。したがって、追加する必要がありますplatform rubyGemfile.lock必要な依存関係がすべてデプロイと共にインストールされるようにします。

~/eb-rails$ bundle lock --add-platform ruby Fetching gem metadata from https://rubygems.org/............ Resolving dependencies... Writing lockfile to /Users/janedoe/EBDPT/RubyApps/eb-rails-doc-app/Gemfile.lock

rails 設定の構成

Elastic Beanstalk コンソールを使用して、環境プロパティで Rails を設定します。最大 256 文字の英数字の文字列の SECRET_KEY_BASE 環境プロパティを設定します。

Rails はこのプロパティを使用してキーを作成します。したがって、これは秘密に保ち、プレーンテキストで出典管理に保存しないでください。その代わり、環境プロパティを介して環境の Rails コードに提供します。

Elastic Beanstalk コンソールで環境プロパティを設定するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで、[設定] を選択します。

  4. [更新、モニタリング、ログ] の設定カテゴリで、[編集] を選択します。

  5. [環境プロパティ] まで下にスクロールします。

  6. [環境プロパティの追加] を選択します。

  7. プロパティの [名前] と [値] のペアを入力します。

  8. さらに変数を追加する必要がある場合は、ステップ 6 および ステップ 7 を繰り返します。

  9. ページの最下部で [適用] を選択し変更を保存します。

ここで、サイトを環境にデプロイする準備が整いました。

アプリケーションをデプロイします

Rails で作成されたファイルを含む出典バンドルを作成します。次のコマンドでは、rails-default.zip という出典バンドルが作成されます。

~/eb-rails$ zip ../rails-default.zip -r * .[^.]*

ソースバンドルを Elastic Beanstalk にアップロードして、Rails を環境にデプロイします。

出典バンドルをデプロイするには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. 環境の概要ページで、[Upload and deploy (アップロードとデプロイ)] を選択します。

  4. 画面上のダイアログボックスを使用して、ソースバンドルをアップロードします。

  5. [デプロイ] を選択します。

  6. デプロイが完了したら、新しいタブのウェブサイトを開く、サイトの URL を選択できます。

クリーンアップ

Elastic Beanstalk での作業が終了したら、環境を終了できます。Elastic Beanstalk は、Amazon EC2 インスタンスデータベースインスタンスロードバランサー、セキュリティグループ、アラーム など、環境に関連付けられているすべての AWS リソースを終了します。

Elastic Beanstalk 環境を終了するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. [Actions] (アクション)、[Terminate environment] (環境の終了) の順に選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

次のステップ

Rails の詳細については、rubyonrails.org を参照してください。

アプリケーションの開発が進むにつれ、.zip ファイルを手動で作成して Elastic Beanstalk コンソールにアップロードすることなく、環境を管理してアプリケーションをデプロイする方法が必要になります。Elastic Beanstalk コマンドラインインターフェイス (EB CLI) には、 easy-to-use コマンドラインからアプリケーションを作成、設定、および Elastic Beanstalk 環境にデプロイするためのコマンドが用意されています。

最後に、本稼働環境でアプリケーションを使用する予定の場合は、お客様の環境にカスタムドメイン名を設定し、安全な接続のために HTTPS を有効にすることが必要になります。