Go アプリをデプロイする

アプリをデプロイして、App Engine にアプリをアップロードし実行します。アプリをデプロイすると、そのアプリのバージョンと、それに対応するサービスが App Engine 内に作成されます。アプリ全体(すべてのソースコードと構成ファイルも含む)をデプロイすることも、個々のバージョンまたは構成ファイルをデプロイして更新することもできます。

アプリをプログラムでデプロイするには、Admin API を使用します。

始める前に

アプリをデプロイする前に:

gcloud コマンドライン ツールのインストール

gcloud ツールを使用してアプリをデプロイする場合は、Cloud SDK をダウンロードしてインストールし、初期化する必要があります。

SDK をダウンロード

インストール済みの gcloud ツールを、初期化時とは異なる GCP プロジェクト ID を使用するように構成する場合は、Cloud SDK 構成の管理をご覧ください。

プロキシの使用

HTTP プロキシまたは HTTPS プロキシを使用するシステムからデプロイ コマンドを実行する場合は、プロキシ経由で通信を行うようにツールを構成する必要があります。

gcloud

次のコマンドを実行して gcloud ツールを構成します。

gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]

プロキシに usernamepassword を設定することもできます。詳細については、gcloud config をご覧ください。

appcfg / goapp

プロキシに合わせて環境変数を設定します。

Mac / Linux
export HTTP_PROXY="http://cache.example.com:3128"
export HTTPS_PROXY="http://cache.example.com:3128"
Windows
set HTTP_PROXY=http://cache.example.com:3128
set HTTPS_PROXY=http://cache.example.com:3128

アプリをデプロイする

アプリを App Engine にデプロイするには、構成ファイルapp.yaml など)が置かれている場所から gcloud app deploy コマンドを実行します。

一意のバージョン ID を選択する

手動でスケーリングされるインスタンスの場合は、数値のインスタンス番号と区別するために、バージョン ID の先頭を文字にする必要があります。これによりリクエストが正しい宛先に確実にルーティングされ、URL パターンのあいまいさを回避できます。たとえば、123.my-service.appspot.com は次の 2 通りの解釈が可能です。

  • バージョン 123 が存在する場合は、my-service サービスのバージョン 123 にリクエストをルーティングする。
  • バージョン 123 が存在しない場合は、その代わりに、my-service サービスの各バージョンが実行されているインスタンス ID 123 にリクエストをルーティングする。

ただし、自動スケーリングまたは基本スケーリングが構成されているインスタンスはターゲットにすることができないため、そのような場合はバージョンに名前を付けることができます。

gcloud

gcloud app deploy [YOUR_DEPLOYMENTS]

[YOUR_DEPLOYMENTS] は 1 つ以上の構成ファイルのパスと名前です。構成ファイルの間を 1 つの空白文字で区切ります。構成ファイルを指定していない場合は、デフォルトで app.yaml がデプロイされます。

オプション フラグ:

  • カスタム バージョン ID を指定するには、--version フラグを指定します。指定しなければ、ID が自動的に生成されます。
  • アプリをデプロイするときに、このバージョンにすべてのトラフィックを自動的にルーティングしない場合には、--no-promote フラグを指定します。
  • gcloud ツールでデフォルトとして初期設定したものに代わる GCP プロジェクト ID を指定するには、--project フラグを指定します。

例:

gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]

デフォルトでは、デプロイする各バージョンが 100% のトラフィックを受信するように自動的に構成されます。構成オプションについては、gcloud app deploy リファレンス--promote フラグをご覧ください。

ヒント: コマンドラインから gcloud help を実行すると、引数とフラグの完全なリストを確認できます。

appcfg

App Engine SDK for Go 1.9 オリジナル版をインストールしている場合は、次のコマンドを実行できます。

appcfg.py -A [YOUR_PROJECT_ID] -V [YOUR_VERSION_ID] update [YOUR_APP_DIR]

デフォルトでは、サービスに対して最初にデプロイするバージョンはトラフィックの 100% を受け取るように自動的に構成されます。ただし、同じサービスに対してデプロイされるそれ以降のバージョンはすべて、手動で構成しない限り、トラフィックを受け取ることはありません。

goapp

goapp deploy -application [YOUR_PROJECT_ID] -version [YOUR_VERSION_ID] [YOUR_APP_DIR]

このツールの使用方法について詳しくは、goapp help deploy コマンドを実行してください。

デフォルトでは、サービスに対して最初にデプロイするバージョンはトラフィックの 100% を受け取るように自動的に構成されます。ただし、同じサービスに対してデプロイされるそれ以降のバージョンはすべて、手動で構成しない限り、トラフィックを受け取ることはありません。

複数サービス アプリケーションをデプロイする

アプリケーションが複数のサービスで構成されている場合は、対象のサービスを個別にデプロイして更新することも、すべてのサービスを同時にデプロイすることもできます。更新内容をサービスにデプロイする際は、個々の構成ファイルを更新したり、対応するバージョンのソースコードを更新したりすることもできます。

たとえば、App Engine に 2 つのバージョンをデプロイして作成し、それぞれ専用のサービスで実行されるようにします。最初のバージョンをアプリのフロントエンド サービス、他方をバックエンド サービスとして機能させるとしましょう。この場合、個々の構成ファイルをデプロイすると一方のサービスの設定のみ更新することができます。また、フロントエンドとバックエンドの一方または両方のソースコードを更新するために、特定のサービスの新しいバージョンをデプロイすることもできます。

複数サービスの要件

アプリケーションのサービスが複数の場合も、デプロイと更新のためのコマンドは同じですが、次の要件があります。

  • 最初にアプリのバージョンの 1 つを default サービスにデプロイする必要があります。これで、後続のサービスを作成してデプロイできるようになります。

  • 対応するバージョンの app.yaml 構成ファイルにサービスの ID を指定する必要があります。サービス ID を指定するには、各構成ファイルに service: [YOUR_SERVICE_ID] 要素定義を追加します。この要素の定義が構成ファイル内にないと、デフォルトでバージョンのデプロイ先は default サービスとなります。

  • 複数のサービスを同時にデプロイするには、対応するすべての app.yaml 構成ファイルをデプロイ コマンドで指定する必要があります。

複数のサービスをデプロイするには

構成ファイルが存在するアプリケーションのルート ディレクトリから、デプロイ コマンドを実行します。その際、各サービスの app.yaml ファイルの相対パスとファイル名を指定します。

gcloud

gcloud app deploy [DEPLOYMENTS]

appcfg

appcfg.py update [DEPLOYMENTS]

goapp

goapp deploy [DEPLOYMENTS]

[DEPLOYMENTS] には、1 つ以上の構成ファイルのパスと名前を 1 つの空白文字で区切って指定します。

gcloud

gcloud app deploy main/app.yaml service1/app.yaml service2/app.yaml

appcfg

appcfg.py update main/app.yaml service1/app.yaml service2/app.yaml

goapp

goapp deploy main/app.yaml service1/app.yaml service2/app.yaml

各サービスが正常にデプロイされると、その確認がコマンドラインに表示されます。

インデックスを更新する

アプリで使用するインデックスを作成または更新するには、index.yaml 構成ファイルを Cloud Datastore にアップロードします。この構成ファイルがアップロードされた後、まだ存在していないインデックスが作成されます。

App Engine によるすべてのインデックスの作成が完了するまでに、しばらく時間がかかることがあるため、このようなインデックスは App Engine ですぐに使用できるようにはなりません。アプリがすでにトラフィックを受け取るように構成されている場合は、まだ作成中のインデックスを必要とするクエリに対して例外が発生する可能性があります。

例外を避けるには、次のように、すべてのインデックスを作成するための時間を確保する必要があります。

  • バージョンをデプロイする前に、index.yaml 構成ファイルを Cloud Datastore にアップロードします。

    1. index.yaml ファイルを Cloud Datastore にアップロードします。

      appcfg
      appcfg.py -A [YOUR_PROJECT_ID] -V [YOUR_VERSION_ID] update_indexes [YOUR_APP_DIR]

    2. GCP Console を使用して、すべてのインデックスのステータスをモニタリングします。

      [Datastore] ページに移動

    3. すべてのインデックスが作成されたら、新しいバージョンを App Engine にデプロイします。

  • トラフィックをバージョンに移行または分割する前に、インデックスを作成します。

    1. 新しいバージョンをデプロイし、そのバージョンにトラフィックがルーティングされないようにします。
      gcloud
      app.yaml ファイルと index.yaml ファイルを両方とも指定し、そのバージョンにトラフィックがルーティングされないように --no-promote フラグも指定する必要があります。
      gcloud app deploy app.yaml index.yaml --no-promote
      appcfg
      appcfg.py -A [YOUR_PROJECT_ID] -V [YOUR_VERSION_ID] update [YOUR_APP_DIR]
    2. GCP Console を使用して、すべてのインデックスのステータスをモニタリングします。

      [データストア] ページに移動

    3. すべてのインデックスが作成されたら、GCP Console を使用して、トラフィックをバージョンに移行または分割します。

      [バージョン] ページに移動

インデックスの詳細については、データストア インデックスの構成をご覧ください。

トラブルシューティング

発生する可能性のあるエラー メッセージのうち主なものを次に示します。

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
必要な App Engine アプリケーションが GCP プロジェクトに含まれていない場合、gcloud app deploy コマンドが gcloud app create コマンドを実行しようとして失敗する可能性があります。App Engine アプリケーションを作成するために必要な権限があるのは、オーナーの役割を持つアカウントのみです。
Command not found

App Engine SDK(非推奨)のインストール時に appcfg.py ツールや dev_appserver.sh ツールのシンボリック リンクを作成しなかった場合、これらのツールを実行する際にツールの完全なディレクトリ パスを指定する必要があります([PATH_TO_APP_ENGINE_SDK]/appcfg.py[PATH_TO_CLOUD_SDK]/bin/dev_appserver.py など)。

注: appcfg.py または goapp を使用するには、App Engine SDK for Go 1.9 オリジナル版をダウンロードしてインストールする必要があります。

Import Error

Cloud SDK と元の App Engine SDK の両方をインストールすると、PATH へのエントリが競合してインポート エラーが発生する可能性があります。Cloud SDK コマンドの実行中にエラーが発生した場合は、元の App Engine SDK を明示的に使用してみてください。PATH で、元の App Engine SDK のエントリを Cloud SDK の前に移動すると、それらのコマンドを優先させることができます。または、完全なディレクトリ パス([PATH_TO_APP_ENGINE_SDK]/dev_appserver.py)を指定してコマンドを実行することもできます。
ヒント: Linux または Mac では、which dev_appserver.py を実行すると PATH 内の最初の SDK を判断できます。

[400] The first service (module) you upload to a new application must be the 'default' service (module)

アプリケーションの複数のサービスをデプロイして作成するには、その前に default サービスをデプロイして作成する必要があります。バージョンを default サービスにデプロイする方法については、複数のサービス アプリケーションのデプロイをご覧ください。

Too Many Versions (403)

App Engine では、アプリケーションのデプロイ済みバージョン数の上限が定められています。これは、無料アプリケーションとデプロイ済みアプリケーションとで異なります。上限に達した場合は、GCP Console で古いバージョンを削除してから最新コードをアップロードしてください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境