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

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

ローカルでの実行

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

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

gcloud app deploy コマンドで App Engine にアプリケーションをデプロイします。このコマンドは、Cloud Build サービスを使用してコンテナ イメージを自動的に作成し、そのイメージを App Engine フレキシブル環境にデプロイします。このコンテナには、ローカルでランタイム イメージに行った変更が含まれます。

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

始める前に

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

デプロイの成功の確認

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

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

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

サービスのデプロイ

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

アプリケーションのサービスの特定バージョンをデプロイするには、サービスの 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 つの deploy コマンドで複数のファイルを指定することもできます。

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

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

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

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

ファイルを無視する

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

.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 ドキュメントのアーティファクトのデプロイおよびビルドトリガーを使用したビルドの自動化をご覧ください。

PHP の Docker ベースイメージ

PHP カスタム ランタイム アプリケーションをゼロから作成する場合は、Dockerfile で提供されるベースイメージを使用します。

バージョン Docker コマンド
PHP 5.6 FROM gcr.io/google-appengine/php56
PHP 7.0 FROM gcr.io/google-appengine/php70
PHP 7.1 FROM gcr.io/google-appengine/php71

ベースイメージのソースコードは https://github.com/GoogleCloudPlatform/php-docker から入手できます。

アプリケーションの表示

アプリケーションを 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 アプリケーションの作成に必要な権限があるのは、オーナーの役割を持つアカウントだけです。
このページは役立ちましたか?評価をお願いいたします。

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

PHP の App Engine フレキシブル環境に関するドキュメント