メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

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

このチュートリアルでは、Elastic Beanstalk コマンドラインインターフェイス(EB CLI)を使用して、単純な Sinatra ウェブアプリケーションを AWS Elastic Beanstalk にデプロイする方法について説明します。

注記

EB CLI を使用して環境を作成するには、サービスロールが必要です。Elastic Beanstalk 管理コンソールで環境を作成することで、サービスロールを作成できます。サービスロールがない場合は、eb create を実行したときに EB CLI によって作成されます。

前提条件

このウォークスルーでは、Linux、Windows、OS X のいずれかのワークステーションが必要です。このウォークスルーを実行すると、ワークステーションの Git および EB CLI の設定が変更されます。ウォークスルーでワークステーションの設定を変更したくない場合は、以下のいずれかを使用できます。

  • ワークステーションの仮想マシンで実行されるインスタンス。

    このウォークスルーは、Vagrant を使用して Ubuntu 14.04 LTS インスタンスを VirtualBox で実行するように準備されています。

  • Amazon Elastic Compute Cloud(Amazon EC2)インスタンス。

    SSH を使用して、インスタンスにログインします。コマンドラインからウォークスルー全体を実行できます。完了したら、インスタンスを終了できます。

このウォークスルーを完了するには、以下のツールが必要です。

  • EB CLI。「Elastic Beanstalk コマンドラインインターフェイス(EB CLI)のインストール」の説明に従ってインストールします。

    このトピックでは、AWS アカウントをお持ちでない場合のサインアップ方法も説明しています。

  • ご使用のシステムでアプリケーション環境を構成する AWS リソースを作成できるアクセス権限を持つ AWS 認証情報。

    これらの認証情報により、EB CLI がお客様に代わって環境のリソースを作成することができます。認証情報をまだ保存していない場合は、アプリケーションを作成するときに認証情報の入力を求めるプロンプトが EB CLI によって表示されます。認証情報を保存する方法と、保存された認証情報を EB CLI がどのように使用するかについては、「構成設定と優先順位」を参照してください。必要なアクセス権限の詳細については、「Elastic Beanstalk を AWS Identity and Access Management とともに使用する」を参照してください。

  • Git

    Linux システムでは、パッケージマネージャを使用して Git をインストールできます。たとえば、Ubuntu など、Debian ファミリの Linux システムでは、次のコマンドにより Git をインストールします。

    $ sudo apt-get install git

    Red Hat ファミリのシステムでは、同じコマンドを使用できますが、パッケージマネージャの名前として yum を使用します。OS X システムでの Git のインストールに関する指示を含め、詳細については、Git を参照してください。

ステップ 1: プロジェクトの設定

EB CLI を使用すると、Elastic Beanstalk 環境をすばやく作成し、Git リポジトリからのその環境にアプリケーションをデプロイできます。最初のプロジェクトを開始する前に、ウォークスルーのサンプルのプロジェクトを設定します。

サンプルプロジェクトを設定するには

  1. ターミナルウィンドウを開き、システム上のわかりやすい場所にプロジェクトディレクトリを作成します。このウォークスルーでは、ディレクトリに sinatraapp という名前を付けることを前提としています。

    ~$ mkdir sinatraapp
  2. sinatraapp ディレクトリに移動し、Git リポジトリを初期化します。

    ~$ cd sinatraapp
    ~sinatraapp$ git init .

    注記

    このウォークスルーでは、GitHub などのリモートリポジトリに対するアクセス権は不要です。このウォークスルーでは、ローカルの Git リポジトリを使用します。

  3. 初めて Git を使用する場合は、変更をコミットできるように、Git 設定にユーザー名とメールアドレスを追加します。

    $ git config --global user.email "you@example.com"
    $ git config --global user.name "Username"

ステップ 2: アプリケーションの作成

アプリケーションおよびそれに関連付けられる環境を作成します。

アプリケーションを作成するには

  1. sinatraapp ディレクトリで、次のコマンドを実行して、アプリケーションを作成します。

    ~/sinatraapp$ eb init
  2. デフォルトの AWS リージョンを選択します。このウォークスルーでは、US-West-2 を選択します。

    Select a default region
    1) us-east-1 : 米国東部 (バージニア西部) 2) us-west-1 : 米国西部 (北カリフォルニア) 3) us-west-2 : 米国西部 (オレゴン) 4) eu-west-1 : 欧州 (アイルランド) 5) eu-central-1 : 欧州 (フランクフルト) 6) ap-south-1 : アジアパシフィック (ムンバイ) 7) ap-southeast-1 : アジアパシフィック (シンガポール) 8) ap-southeast-2 : アジアパシフィック (シドニー) 9) ap-northeast-1 : アジアパシフィック (東京) 10) ap-northeast-2 : アジアパシフィック (ソウル) 11) sa-east-1 : 南米 (サンパウロ) 12) cn-north-1 : 中国 (北京) 13) us-east-2 : 米国東部 (コロンバス) 14) ca-central-1 : カナダ (中部) 15) eu-west-2 : 欧州 (ロンドン)
    (default is 3): 3

    注記

    過去に EB CLI、AWS CLI、SDK のいずれかでデフォルトのリージョンを設定したことがある場合は、--region オプションを使用してリージョンを明示的に指定しない限り、EB CLI はこのステップをスキップし、デフォルトのリージョンにアプリケーションを作成します。

  3. 適切なアクセス権限を持つ AWS 認証情報のセットを指定します。保存された認証情報の適切なセットがある場合、EB CLI はそれらの認証情報を自動的に使用し、このステップをスキップします。

    重要

    当社では、お客様のアカウントのルート認証情報を Elastic Beanstalk に指定しないことをお勧めします。その代わりに、適切なアクセス権限を指定して AWS Identity and Access Management (IAM) ユーザーを作成し、その認証情報を指定します。AWS 認証情報の管理については、「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

    保存された認証情報がないか、保存された認証情報では適切なアクセス権限が付与されない場合、eb init により、認証情報の入力を求める次のようなプロンプトが表示されます。

    You have not yet set up your credentials or your credentials are incorrect
    You must provide your credentials.
    (aws-access-id): AKIAIOSFODNN7EXAMPLE
    (aws-secret-key): wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

    その後で、Elastic Beanstalk はそれらの認証情報を、eb-cli のプロファイル名で AWS CLI の設定ファイルに保存します。

  4. アプリケーション名を入力します。このウォークスルーでは、デフォルトの値(アプリケーションのルートディレクトリ名)を使用します。

    Enter Application Name
    (default is "sinatraapp"): sinatraapp
  5. プラットフォームを指定します。このウォークスルーでは、Ruby を使用します。

    Select a platform.
    1) Node.js
    2) PHP
    3) Python
    4) Ruby
    5) Tomcat
    6) IIS
    7) Docker
    8) Multi-container Docker
    9) GlassFish
    10) Go
    11) Java
    (default is 1): 6
  6. プラットフォームのバージョンを指定します。この例では、Ruby 2.1 (Puma) を使用します。

    Select a platform version.1
    1) Ruby 2.1 (Puma)
    2) Ruby 2.1 (Passenger Standalone)
    3) Ruby 2.0 (Puma)
    4) Ruby 2.0 (Passenger Standalone)
    5) Ruby 1.9.3
    (default is 1): 1
  7. インスタンスへのログインに SSH を使用するかどうかを指定します。このウォークスルーでは、インスタンスにログインする必要がないため、n と入力します。

    Do you want to set up SSH for your instances?
    (y/n): n

ステップ 3: 環境の作成

次に、Elastic Beanstalk 環境を作成し、eb create でその環境にサンプルアプリケーションをデプロイします。

~/sinatraapp$ eb create sinatraapp-dev --sample

注記

「service role required」エラーメッセージが表示された場合は、eb create をインタラクティブに (環境名を指定せずに) 実行してください。EB CLI によってロールが作成されます。

1 つのコマンドを使用するだけで、EB CLI では、アプリケーションを AWS で実行する際に必要となるすべてリソースをセットアップします。次のようなリソースがあります。

  • 環境データを保存する Amazon S3 バケット

  • トラフィックをウェブサーバーに分散するロードバランサー

  • 着信ウェブトラフィックを許可するセキュリティグループ

  • 負荷の変化に応じてサーバーの数を調整する Auto Scalingグループ

  • 負荷が低くなった場合または高くなった場合に Auto Scaling グループに通知する Amazon CloudWatch アラーム

  • アプリケーションをホストする Amazon EC2 インスタンス

処理が完了すると、EB CLI はアプリケーションサーバーのパブリック DNS 名を出力します。デフォルトのブラウザでウェブサイトを開くには、eb open を使用します。

~/sinatraapp$ eb open

ステップ 4: 単純な Sinatra アプリケーションのデプロイ

次に、Sinatra アプリケーションを作成してデプロイすることができます。このステップでは、単純な Sinatra アプリケーションを実装し、前のステップで作成した環境にデプロイする方法について説明します。この例では、単純な文字列 Hello World! を表示する古典的なアプリケーションを実装します。この例を拡張することで、より複雑な古典的アプリケーションまたはモジュール式のアプリケーションを簡単に実装することができます。

注記

これ以降の手順では、すべてのアプリケーションファイルを、アプリケーションのルートディレクトリ sinatraapp に作成します。

Sinatra アプリケーションを作成してデプロイするには

  1. 次の内容で、config.ru という名前の設定ファイルを作成します。

    require './helloworld'
    run Sinatra::Application
  2. 次の内容で、helloworld.rb という名前の Ruby コードファイルを作成します。

    require 'sinatra'
    get '/' do
      "Hello World!"
    end
  3. 次の内容で、Gemfile を作成します。

    source 'http://rubygems.org'
    gem 'sinatra'
  4. 次のように、ファイルを Git リポジトリに追加し、変更をコミットします。

    ~/sinatraapp$ git add .
    ~/sinatraapp$ git commit -m "Add a simple Sinatra application"

    ファイルが正常にコミットされたことを示す、次のような出力が表示されます。

    [master (root-commit) dcdfe6c] Add a simple Sinatra application
     4 files changed, 13 insertions(+)
     create mode 100644 .gitignore
     create mode 100644 Gemfile
     create mode 100644 config.ru
     create mode 100644 helloworld.rb

    ファイルは現在の Git ブランチにコミットされます。ブランチを明示的に作成しなかったため、master という名前のデフォルトのブランチにファイルがコミットされます。リポジトリに複数のブランチがある場合、各ブランチを別の環境にプッシュするように Git を設定できます。詳細については、「EB CLI による Elastic Beanstalk 環境の管理」を参照してください。

  5. 新しい Sinatra アプリケーションを環境にデプロイします。

    ~/sinatraapp$ eb deploy

    eb deploy コマンドは、アプリケーションコードのバンドルを master ブランチに作成して環境にデプロイし、デフォルトのアプリケーションを置き換えます。2 回目にデプロイするときは、環境の AWS リソースがすでに作成されているため、1 回目よりもはるかに高速です。

  6. eb status --verbose コマンドを実行して、環境のステータスを確認します。次のような出力が表示されます。

    ~/sinatraapp$ eb status --verbose
    Environment details for: sinatraapp-dev
      Application name: sinatraapp
      Region: us-west-2
      Deployed Version: dcdf
      Environment ID: e-kn7feaqre2
      Platform: 64bit Amazon Linux 2014.09 v1.2.0 running Ruby 2.1 (Puma)
      Tier: WebServer-Standard
      CNAME: sinatraapp-dev.elasticbeanstalk.com
      Updated: 2015-03-03 23:15:19.183000+00:00
      Status: Ready
      Health: Green
      Running instances: 1
          i-c2e712cf: InService

    [Status] が [Ready] になり、[Health] が [Green] になるまで、コマンドを繰り返します。次に、ブラウザを更新するか、eb open を再び実行して、更新されたアプリケーションを表示します。Hello World! と表示されるはずです。

注記

デプロイの詳細な説明については、eb logs を実行して、デプロイのログを表示することができます。

ステップ 5: クリーンアップ

手順が完了したら、ルートディレクトリ sinatraapp から次のコマンドを実行して、アプリケーションの環境を終了することができます。

~/sinatraapp$ eb terminate

このコマンドを実行すると、環境のすべての AWS リソースがシャットダウンされるため、それ以上の料金は発生しません。通常は数分かかります。プロセスが完了すると、Elastic Beanstalk によって次のメッセージが表示されます。

INFO: terminateEnvironment completed successfully.

注記

Amazon Relational Database Service (Amazon RDS) データベースインスタンスを環境にアタッチした場合は、終了することでそのインスタンスが削除されます。データを保存する場合は、環境を終了する前にスナップショットを作成してください。詳細については、「DB スナップショットの作成」を参照してください。Elastic Beanstalk での Amazon RDS の使用の詳細については、「Ruby での Amazon RDS の使用」を参照してください。

関連リソース

Git コマンドの詳細については、「Git – Fast Version Control System」を参照してください。

このウォークスルーでは、限られた EB CLI コマンドのみを使用します。完全なリストについては、eb --help を実行するか、「EB CLI コマンドリファレンス」を参照してください。