

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

# Elastic Beanstalk への Rails アプリケーションのデプロイ
<a name="ruby-rails-tutorial"></a>

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

**Topics**
+ [前提条件](#ruby-rails-tutorial-prereqs)
+ [Elastic Beanstalk の基本的な知識](#ruby-rails-tutorial-prereqs-basic)
+ [Elastic Beanstalk 環境の起動](#ruby-rails-tutorial-launch)
+ [rails をインストールしてウェブサイトを生成します](#ruby-rails-tutorial-generate)
+ [rails 設定の構成](#ruby-rails-tutorial-configure)
+ [アプリケーションをデプロイします](#ruby-rails-tutorial-deploy)
+ [クリーンアップ](#ruby-rails-tutorial-cleanup)
+ [次の手順](#ruby-rails-tutorial-nextsteps)

## 前提条件
<a name="ruby-rails-tutorial-prereqs"></a>

## Elastic Beanstalk の基本的な知識
<a name="ruby-rails-tutorial-prereqs-basic"></a>

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

### コマンドライン
<a name="ruby-rails-tutorial-prereqs-cmdline"></a>

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

### Rails の依存関係
<a name="ruby-rails-tutorial-prereqs-railsreqs"></a>

Rails フレームワーク 6.1.4.1 には次の依存関係があります。それらのすべてがインストールされていることを確認します。
+ **Ruby 2.5.0 以降** – インストール手順については、「[Elastic Beanstalk 用の Ruby 開発環境の設定](ruby-development-environment.md)」を参照してください。

  このチュートリアルでは、Ruby 3.0.2 と対応する Elastic Beanstalk プラットフォームバージョンを使用します。
+ **Node.js** – インストール手順については、「[Installing Node.js via package manager](https://nodejs.org/en/download/package-manager/)」を参照してください。
+ **Yarn** – インストールの手順については、*Yarn* のウェブサイトにある「[Installation](https://yarnpkg.com/lang/en/docs/install/) (インストール)」を参照してください。

## Elastic Beanstalk 環境の起動
<a name="ruby-rails-tutorial-launch"></a>

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

**環境を起動するには (コンソール)**

1. 事前に設定されたリンク ([console.aws.amazon.com/elasticBeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)) を使用して、Elastic Beanstalk コンソールを開きます。

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

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

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

## rails をインストールしてウェブサイトを生成します
<a name="ruby-rails-tutorial-generate"></a>

`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 プラットフォーム履歴](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-ruby.html)」を参照してください。最新の Puma バージョンの詳細については、[Puma.io](http://puma.io) のウェブサイトを参照してください。2 つの Puma バージョン間に矛盾があるときは、次のいずれかのオプションを使用します。  
以前の `rails new` コマンドによりインストールした Puma バージョンを使用する。この場合は、プラットフォームに `Procfile` を追加して、自分の Puma サーバーバージョンを使用します。詳細については、「[Elastic Beanstalk の Procfile でアプリケーションプロセスを設定する](ruby-platform-procfile.md)」を参照してください。
Puma のバージョンを更新して、お使いの環境の Ruby プラットフォームバージョンにプリインストールされているバージョンに一致させる。これを行うには、プロジェクトソースディレクトリのルートにある [Gemfile](ruby-platform-gemfile.md#ruby-platform-gemfile.title) の Puma バージョンを変更します。次に、`bundle update` を実行します。詳細については、Bundler.io のウェブサイトにある「[bundle update](https://bundler.io/man/bundle-update.1.html) (バンドルの更新)」ページを参照してください。

デフォルトのプロジェクトをローカルで実行して、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 サイトの開発ページ\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/ruby-rails-default.png)


このページは、開発モードでのみ表示されます。アプリケーションのフロントページにいくつかのコンテンツを追加して、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` を使用して既存のファイルのコンテンツを上書きします。

**Example app/views/welcome\$1page/welcome.html.erb**  

```
<h1>Welcome!</h1>
<p>This is the front page of my first Rails application on Elastic Beanstalk.</p>
```

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

**Example 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.lock`。`Gemfile.lock ` のいくつかの依存関係は、プラットフォーム固有かもしれません。したがって、追加する必要があります**platform ruby**に`Gemfile.lock`必要な依存関係がすべてデプロイと共にインストールされるようにします。

**Example**  

```
~/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 設定の構成
<a name="ruby-rails-tutorial-configure"></a>

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

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

**Elastic Beanstalk コンソールで環境変数を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

1. **[ランタイム環境変数]** まで下にスクロールします。

1. **[環境変数を追加]** を選択します。

1. **[ソース]** では、**[プレーンテキスト]** を選択します。
**注記**  
ドロップダウンの **[Secrets Manager]** と **[SSM Parameter Store]** の値は、認証情報や API キーなどの機密データを保存するシークレットとして環境変数を設定するためのものです。詳細については、「[AWS Secrets Manager および Parameter Store での Elastic Beanstalk AWS Systems Manager の使用](AWSHowTo.secrets.md)」を参照してください。

1. **[環境変数名]** と **[環境変数値]** のペアを入力します。

1. さらに変数を追加する必要がある場合は、**ステップ 6** から **ステップ 8** までを繰り返します。

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

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

## アプリケーションをデプロイします
<a name="ruby-rails-tutorial-deploy"></a>

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

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

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## クリーンアップ
<a name="ruby-rails-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

## 次の手順
<a name="ruby-rails-tutorial-nextsteps"></a>

Rails の詳細については、[rubyonrails.org](https://rubyonrails.org/) を参照してください。

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

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