アプリケーションのテストとデプロイ

アプリケーションをローカルで実行する方法と、App Engine にデプロイしてテストする方法を説明します。

ローカルでの実行

デプロイ前にアプリケーションの機能をテストするには、普段使用している開発ツールを使用して、アプリケーションをローカル環境で実行します。

たとえば、go run コマンドを実行します。

アプリケーションのデプロイ

gcloud app deploy コマンドを使用して App Engine にアプリをデプロイします。このコマンドは、go ツールと同じ方法でアプリの依存関係を正しく収集します。このコマンドは、Cloud Build サービスを使用してコンテナ イメージを自動的に作成し、そのイメージを App Engine フレキシブル環境にデプロイします。このコンテナには、ローカルでランタイム イメージに行った変更が含まれます。

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

始める前に

アプリケーションをデプロイする前に、次のことを確認してください。

デプロイの成功の確認

更新されたヘルスチェックを有効にすると、アプリケーションが正常な状態でない場合にデプロイがロールバックされます。

最初のアプリケーションをフレキシブル環境にデプロイするときに、仮想マシン(VM)や他のインフラストラクチャが設定されていると、遅延が発生することがあります。最初のセットアップ後、ヘルスチェックによって、インスタンスが正常で、トラフィックを受信可能な状態になっていることが確認されます。app.yaml ファイルの liveness_check セクションの initial_delay_sec フィールドで指定されている時間内に、アプリケーションが準備完了ステータスにならない場合、デプロイは失敗し、ロールバックされます。

アプリケーションが準備完了になるまで時間がかかる場合があります。たとえば、アプリケーションを初期化するために、大きなファイルをダウンロードしたり、キャッシュをプリロードしたりする場合があります。更新されたヘルスチェックを使用している場合は、app.yaml ファイルで readiness_check セクションの app_start_timeout_sec 構成設定を変更して、この時間を増やすことができます。

サービスのデプロイ

アプリケーション サービスのバージョンと構成ファイルをデプロイし、App Engine にアプリケーションをデプロイします。

アプリケーション サービスのバージョンをデプロイするには、サービスの app.yaml ファイルが保存されているディレクトリ内から次のコマンドを実行します。

gcloud app deploy

このコマンドでファイルを指定しないと、現在のディレクトリにある app.yaml ファイルのみがデプロイされます。デフォルトでは、deploy コマンドはデプロイするバージョンの一意の ID を生成し、gcloud ツールの処理対象として構成されている GCP プロジェクトにバージョンをデプロイし、すべてのトラフィックを新しいバージョンにルーティングします。

このコマンドのデフォルトの動作を変更するには、特定のファイルをターゲットとして指定するか、追加のパラメータを指定します。

  • サービスの他の構成ファイルをデプロイするには、各ファイルを個別に対象にし、デプロイする必要があります。次に例を示します。

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • カスタム バージョンの ID を指定するには、--version フラグを使用します。

  • トラフィックが新しいバージョンに自動的にルーティングされないようにするには、--no-promote フラグを使用します。

  • 特定の GCP プロジェクトにデプロイするには、--project フラグを使用します。

たとえば、app.yaml に定義されているサービスを特定の GCP プロジェクトにデプロイするには、カスタム バージョン ID を割り当て、トラフィックが新しいバージョンにルーティングされないようにします。

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

このコマンドの詳細については、gcloud app deploy リファレンスをご覧ください。

複数のサービスのデプロイ

アプリケーションを構成する複数のサービスをデプロイまたは更新するには、同じデプロイ コマンドを使用します。

複数のサービスをデプロイするには、各サービスの app.yaml ファイルを個別にデプロイする必要があります。次に例を示します。

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

1 つのデプロイ コマンドで複数のファイルを指定できます。

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

複数のサービスをデプロイするための要件

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

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

ファイルを無視する

.gcloudignore ファイルを使用して、サービスのデプロイ時に GCP にアップロードしないようにするファイルとディレクトリを指定できます。これは、デプロイ時にアップロードする必要のないビルド アーティファクトやその他のファイルを無視する場合に便利です。

.gcloudignore ファイルの構文について詳しくは、gcloud リファレンスをご覧ください。

デプロイで使用するコンテナを手動で作成する

Google Cloud Platform 以外でコンテナ イメージを作成するには、イメージをコンテナ イメージ リポジトリにアップロードしてから、gcloud app deploy コマンドを使用してイメージを App Engine にデプロイする必要があります。

たとえば、Docker でローカルにコンテナ イメージを作成する場合、これらのイメージを Google Container Registry に push し、コマンドの --image-url フラグにイメージの URL を指定します。

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE
独自のコンテナ イメージの作成方法については、ランタイムの拡張をご覧ください。

自動の継続的デプロイ パイプラインの使用

Cloud Build では、継続的デプロイ パイプラインを使用してデプロイを自動化できます。詳細については、Cloud Build ドキュメントのアーティファクトのデプロイおよびビルドトリガーを使用したビルドの自動化をご覧ください。

アプリケーションの表示

アプリケーションを App Engine にデプロイした後、次のコマンドでブラウザを起動すると、http://YOUR_PROJECT_ID.appspot.com にアプリケーションが表示されます。

gcloud app browse

App Engine 上でのテスト

新しいバージョンを構成してトラフィックを受信する前に、App Engine でテストできます。たとえば、default サービスの新しいバージョンをテストするには、次のようにします。

  1. --no-promote フラグを指定して新しいバージョンをデプロイします。

    gcloud app deploy --no-promote
  2. 次の URL に移動して、新しいバージョンにアクセスします。

    http://VERSION_ID.default.YOUR_PROJECT_ID.appspot.com
    

    以上で、新しいバージョンを App Engine ランタイム環境でテストできるようになりました。ログを確認してアプリケーションをデバッグできます。詳細については、アプリケーション ログの書き込みをご覧ください。

    http://YOUR_PROJECT_ID.appspot.com に送信されたリクエストは、トラフィックを受信するように以前に構成したバージョンに引き続きルーティングされます。

  3. トラフィックが新しいバージョンに送信されるようにするには、GCP Console でトラフィックを移行します。

    バージョンの管理

    デプロイしたバージョンを選択して、[トラフィックを移行] をクリックします。

同じ手順で他のサービスの新しいバージョンをテストできます。この場合、上記の URL の default をサービスの名前に置き換えます。

http://VERSION_ID.SERVICE_ID.YOUR_PROJECT_ID.appspot.com

特定のサービスとバージョンをターゲットにする方法については、リクエストのルーティング方法をご覧ください。

トラブルシューティング

アプリケーションのデプロイ時に発生する可能性のある一般的なエラー メッセージは次のとおりです。

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

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

Go の App Engine フレキシブル環境