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

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

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

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

前提条件

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

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

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

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

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

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

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

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

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

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 グループはレスポンスとしてスケールアップまたはダウンを行います。

  • AWS CloudFormation スタック - Elastic Beanstalk は AWS CloudFormation を使用して、環境内のリソースを起動し、設定の変更を反映させます。リソースは、AWS CloudFormation コンソールで表示できるテンプレートで定義されます。

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

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

注記

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

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

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

~$ gem install rails Fetching: concurrent-ruby-1.0.5.gem (100%) Successfully installed concurrent-ruby-1.0.5 Fetching: i18n-1.0.1.gem (100%) Successfully installed i18n-1.0.1 ...

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

~$ rails --version Rails 5.2.0

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

~$ rails new ~/eb-rails

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

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

~$ cd eb-rails eb-rails $ rails server => Booting Puma => Rails 5.2.0 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0: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)のコンテンツを表示します。

rails 設定の設定

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

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

Elastic Beanstalk コンソールで環境プロパティを設定するには

  1. Elastic Beanstalk コンソールを開き、[リージョン] リストで AWS リージョンを選択します。

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

    注記

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

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

  4. [ソフトウェア] 設定カテゴリで、[編集] を選択します。

  5. 環境プロパティ で、キーと値のペアを入力します。

    
        [ソフトウェア設定の変更] ページの [環境プロパティ] セクション
  6. [Apply] を選択します。

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

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

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. [Deploy] を選択します。

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソールを開き、[リージョン] リストで AWS リージョンを選択します。

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

    注記

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

  3. [環境アクション] を選択してから、[環境の終了] を選択します。

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

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

次のステップ

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

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

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