App Engine フレキシブル環境における Ruby のクイックスタート

このクイックスタートでは、短いメッセージを表示する小さな App Engine アプリを作成する方法について説明します。

始める前に

このクイックスタートを実行してデプロイする前に、Cloud SDK をインストールして、App Engine 用に GCP プロジェクトを設定します。

  1. Cloud SDK をダウンロードしてインストールします。

    SDK をダウンロード

    : Cloud SDK がすでにインストールされている場合は、次のコマンドを実行して更新します。

    gcloud components update
    
  2. 新規プロジェクトを作成します。

    gcloud projects create [YOUR_PROJECT_NAME] --set-as-default
    

    プロジェクトが作成されたことを確認します。

    gcloud projects describe [YOUR_PROJECT_NAME]
    

    次のようなプロジェクトの詳細が表示されます。

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. プロジェクトで App Engine アプリを初期化し、そのリージョンを選択します。

    gcloud app create --project=[YOUR_PROJECT_NAME]
    

    プロンプトが表示されたら、App Engine アプリケーションを配置するリージョンを選択します。

  4. プロジェクトで課金が有効になっていることを確認します。アプリケーションを App Engine にデプロイするには、課金アカウントをプロジェクトにリンクする必要があります。

    課金を有効にする

  5. 次の前提条件をインストールします。

App Engine のロケーション

App Engine はリージョナルです。つまり、アプリを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たすことが、アプリを実行するリージョンを選択する際の主な要素になります。一般的には、アプリのユーザーに最も近いリージョンを選択しますが、アプリで使用されている他の GCP プロダクトやサービスのロケーションを考慮する必要があります。使用するサービスが複数のロケーションにまたがっていると、アプリのレイテンシだけでなく、料金にも影響します。

App Engine は次のリージョンで利用できます。

  • northamerica-northeast1(モントリオール)
  • us-central(アイオワ)
  • us-west2(ロサンゼルス)
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • southamerica-east1(サンパウロ)
  • europe-west(ベルギー)
  • europe-west2(ロンドン)
  • europe-west3(フランクフルト)
  • europe-west6 - チューリッヒ
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • asia-east2(香港)
  • asia-south1(ムンバイ)
  • australia-southeast1(シドニー)

アプリのリージョンを設定した後で変更することはできません。

App Engine アプリケーションがすでに作成されている場合は、gcloud app describe コマンドを実行するか、GCP Console で App Engine ダッシュボードを開いて、そのアプリケーションに設定されているリージョンを確認できます。App Engine アプリケーションのリージョンは http://[YOUR_PROJECT_ID].appspot.com に表示されます。

このクイックスタートでは、Sinatra ウェブ フレームワークを使用して記述された、App Engine にデプロイ可能なシンプルな Ruby アプリの例を示します。このサンプルでは Sinatra を使用しますが、Ruby on Rails などの他のフレームワークも使用できます。

Hello World アプリをダウンロードする

Ruby 用のシンプルな Hello World アプリが用意されています。これを使用して、Google Cloud Platform へのアプリのデプロイをすぐに試すことができます。

  1. Hello World サンプルアプリ リポジトリのクローンをローカルマシンに作成します。

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples
    

    または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。

  2. サンプルコードが含まれているディレクトリに移動します。

    cd ruby-docs-samples/appengine/hello_world
    

ローカルマシンで Hello World を実行する

ローカルのパソコンで Hello World アプリを実行するには:

  1. このプロジェクトの依存関係をインストールします。

    bundle install
    
  2. ローカルのウェブサーバーを起動します。

    bundle exec ruby app.rb -p 8080
    
  3. ウェブブラウザに「http://localhost:8080」と入力します。

    サンプルアプリから Hello World というメッセージがページに表示されます。ターミナル ウィンドウで Ctrl+C キーを押してウェブサーバーを終了します。

    Hello World を App Engine にデプロイして実行する

    App Engine フレキシブル環境にアプリをデプロイする手順は次のとおりです。

    1. hello_world ディレクトリで次のコマンドを実行し、Hello World アプリをデプロイします。

      gcloud app deploy

      オプションのフラグをご覧ください。

      一般的な gcloud コマンドフラグ

      • アプリのバージョンを一意に識別する ID を指定するには --version フラグを含めます。これを含めない場合、自動的に生成されます。例: --version [YOUR_VERSION_ID]
      • gcloud ツールでデフォルトとして初期設定したものに代わる GCP プロジェクト ID を指定するには、--project フラグを含めます。例: --project [YOUR_PROJECT_ID]

      例:

      gcloud app deploy --version pre-prod-5 --project my-sample-app

      コマンドラインからアプリをデプロイする方法については、アプリのテストとデプロイをご覧ください。すべてのコマンドフラグの一覧については、gcloud app deploy リファレンスをご覧ください。

    2. ブラウザを起動し、http://YOUR_PROJECT_ID.appspot.com にアクセスしてアプリを表示します。

      gcloud app browse
      YOUR_PROJECT_ID は GCP のプロジェクト ID を表します。

    今回、Hello World メッセージが表示されるページは、App Engine インスタンスで実行されているウェブサーバーから配信されます。

    これで完了です。 App Engine フレキシブル環境に最初の Ruby アプリがデプロイされました。

    クリーンアップの詳細については、以下の説明をご覧ください。また、活用できる次のステップへのリンクも併せてご覧ください。

クリーンアップ

課金されないようにするには、GCP プロジェクトを削除してプロジェクト内のすべてのリソースへの課金を停止します。

  1. GCP Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

これで Hello World のデプロイが完了したので、次に Bookshelf サンプルアプリに進むことができます。Bookshelf アプリは少し複雑な Ruby ウェブアプリで、データ ストレージ、認証、ロギング、Pub/Sub などの複数の GCP 機能を使用します。

Bookshelf アプリのチュートリアルを開始

App Engine フレキシブル環境のより詳しい情報については、App Engine フレキシブル環境をご覧ください。

Hello World コードレビュー

Hello World は、サービスが 1 つだけ含まれ、バージョンも 1 つだけで、すべてのコードがアプリのルート ディレクトリにあるという、最もシンプルな App Engine アプリです。このセクションでは、このアプリの各ファイルを詳しく説明します。

app.rb

Hello World アプリは 1 つのファイルからなる基礎的な Sinatra アプリです。

require "sinatra"

get "/" do
  "Hello world!"
end

app.yaml

app.yaml ファイルには、アプリのデプロイ構成が記述されています。

runtime: ruby
env: flex
entrypoint: bundle exec ruby app.rb

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/ruby/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

この例では、このアプリによって使用されるランタイムを app.yaml で指定しています。また、env: flex を設定して、このアプリがフレキシブル環境を使用することを指定しています。

Gemfile

Gemfile はアプリの RubyGem 依存関係を指定するために使用され、Bundler は依存関係を宣言およびインストールするために使用されます。Hello World アプリには 1 つの Ruby gem(Sinatra ウェブ フレームワーク)が必要です。

source "https://rubygems.org"

gem "sinatra"