App Engine フレキシブル環境でカスタム ランタイム アプリを作成する

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r が App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。

カスタム ランタイムを使用すると、Dockerfile で定義された環境で動作するアプリを構築できます。Dockerfile を使用することで、Google Cloud に含まれていない言語やパッケージを使用したり、App Engine フレキシブル環境で使用されているものと同じリソースやツールを利用したりできます。

このクイックスタートでは、nginx ウェブサーバーで、カスタム ランタイムを使用して App Engine を起動します。

始める前に

このクイックスタートでサンプルアプリを実行する前に、環境を設定して App Engine 用に新しい Google Cloud プロジェクトを作成する必要があります。

  1. Google Cloud コンソールを使用して新しい Google Cloud プロジェクトを作成します。

    1. Google Cloud コンソールを開きます。

      プロジェクトに移動

    2. [プロジェクトの作成] をクリックし、新しい Google Cloud プロジェクトの名前を付けます。

    3. 新しい請求先アカウントを作成するか、既存のアカウントを設定して、新しい Google Cloud プロジェクトの請求を有効にします。

      [お支払い] に移動

  2. Google Cloud CLI をダウンロードしてインストールし、gcloud CLI を初期化します。

    SDK をダウンロード

  3. 次の gcloud コマンドを実行して App Engine アプリケーションを作成し、アプリを実行するリージョンを指定します。

    gcloud app create
    

App Engine のロケーション

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

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

設定したアプリのリージョンは変更できません。

すでに App Engine アプリケーションを作成している場合は、次のいずれかの方法でそのリージョンを表示できます。

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

  1. Hello World サンプルアプリを GitHub からローカルマシンにダウンロードするには、次のいずれかを選択します。

    • 次のリポジトリから Hello World サンプルアプリのクローンを作成します。

      git clone https://github.com/GoogleCloudPlatform/appengine-custom-runtimes-samples
      
    • zip ファイルとしてサンプルをダウンロードし、ローカル ディレクトリに展開します。

  2. サンプルコードがある nginx ディレクトリに移動します。たとえば、次のようになります。

    cd appengine-custom-runtimes-samples/nginx
    

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

Docker をダウンロードしてインストールし、ローカルマシンで Hello World コンテナを実行することで、サンプルアプリをテストできます。

この時点で、App Engine に固有の手順はありませんので、希望するツールやアプローチを使ってサンプルアプリをテストできます。

App Engine に Hello World をデプロイする

サンプルアプリを App Engine にデプロイする準備ができたら、次の手順を行います。

  1. app.yamlDockerfile が配置されているディレクトリから次のコマンドを実行します。

    gcloud app deploy
    

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

  2. ブラウザを起動して https://PROJECT_ID.REGION_ID.r.appspot.com でアプリを動作させるには、次のコマンドを実行します。

    gcloud app browse
    

共通の gcloud コマンドフラグ

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

例:

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

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

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ

Dockerfile の詳細については、Dockerfile リファレンスを参照してください。

独自のカスタム ランタイムを作成する方法については、カスタム ランタイムの作成をご覧ください。

コードのレビュー

Hello World は、コンテナを 1 つ作成して 1 つのサービスと 1 つのバージョンのみを実行する、最もシンプルな App Engine アプリです。このセクションでは、このアプリの各ファイルを詳しく説明します。

app.yaml

アプリの構成を指定します。app.yaml ファイルは Dockerfile ファイルと同じディレクトリに配置する必要があります。

runtime: custom
env: flex

runtime: custom エントリでランタイムのイメージを定義する Dockerfile を検索するよう App Engine に指定し、env: flex でフレキシブル環境にデプロイすることを指定します。

詳細については、app.yaml リファレンスをご覧ください。

Dockerfile

サンプルアプリのコンテナの Docker イメージの作成に使用される一連の命令を定義します。Dockerfile ファイルは app.yaml ファイルと同じディレクトリに配置する必要があります。この Dockerfile は nginx ウェブサーバーをインストールし、いくつかの基本的な構成をコピーします。

# The standard nginx container just runs nginx. The configuration file added
# below will be used by nginx.
FROM nginx

# Copy the nginx configuration file. This sets up the behavior of nginx, most
# importantly, it ensure nginx listens on port 8080. Google App Engine expects
# the runtime to respond to HTTP requests at port 8080.
COPY nginx.conf /etc/nginx/nginx.conf

# create log dir configured in nginx.conf
RUN mkdir -p /var/log/app_engine

# Create a simple file to handle health checks. Health checking can be disabled
# in app.yaml, but is highly recommended. Google App Engine will send an HTTP
# request to /_ah/health and any 2xx or 404 response is considered healthy.
# Because 404 responses are considered healthy, this could actually be left
# out as nginx will return 404 if the file isn't found. However, it is better
# to be explicit.
RUN mkdir -p /usr/share/nginx/www/_ah && \
    echo "healthy" > /usr/share/nginx/www/_ah/health

# Finally, all static assets.
ADD www/ /usr/share/nginx/www/
RUN chmod -R a+r /usr/share/nginx/www

FROM コマンドは、nginx ウェブサーバーの公式の docker イメージを使用して基本イメージを作成します。

この Dockerfile を使用すると、コンテナ イメージに nginx が含まれ、www/ ディレクトリ内のすべてのコンテンツをアプリケーションで使用できます。

Hello World サンプルアプリには、基本的な nginx 構成情報を含む nginx.conf ファイルと、nginx ウェブサーバーのルートページとして機能する index.html ファイルも含まれています。