アプリのデプロイとは、開発したアプリを App Engine にアップロードして実行することです。アプリをデプロイすると、そのアプリのバージョンと、それに対応するサービスが App Engine 内に作成されます。アプリ全体(すべてのソースコードと構成ファイルも含む)をデプロイすることも、個々のバージョンまたは構成ファイルをデプロイして更新することもできます。
プログラムによってアプリをデプロイするには、Admin API を使用します。
アプリのデプロイに非推奨の appcfg
ツールを使用している場合は、ツールの使用に関する情報について appcfg リファレンスをご覧ください。
始める前に
アプリをデプロイする前に:
Cloud プロジェクトのオーナーが App Engine アプリケーションを作成する必要があります。
ユーザー アカウントに必要な権限が割り当てられていることを確認します。
プロジェクトでアプリをデプロイするための Cloud Build の権限を付与します。アプリをデプロイするときに、App Engine は Cloud Build を使用してアプリをコンテナにビルドし、コンテナをランタイムにデプロイします。Cloud Build には、デフォルトでは Python 2 アプリをデプロイする権限がないため、アプリをデプロイする前に権限を付与する必要があります。
gcloud
コマンドライン ツールのインストール
gcloud
ツールを使用してアプリをデプロイする場合は、Cloud SDK をダウンロードしてインストールし、初期化する必要があります。
gcloud
ツールがすでにインストールされ、初期化時に指定した ID とは異なる Cloud プロジェクト ID を使用する場合には、Cloud SDK 構成の管理をご覧ください。
プロキシの使用
HTTP プロキシまたは HTTPS プロキシを使用するシステムからデプロイ コマンドを実行する場合は、プロキシ経由で通信を行うようにツールを構成する必要があります。
次のコマンドを実行して gcloud
ツールを構成します。
gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]
プロキシに username
と password
を設定することもできます。詳細については、gcloud config をご覧ください。
アプリのデプロイ
アプリを App Engine にデプロイするには、構成ファイル(app.yaml
など)が配置されている場所から gcloud app deploy
コマンドを実行します。
一意のバージョン ID の選択
手動でスケーリングされるインスタンスの場合は、数値のインスタンス番号と区別するために、バージョン ID の先頭を文字にする必要があります。これによりリクエストが正しい宛先に確実にルーティングされ、URL パターンのあいまいさを回避できます。たとえば、123-dot-my-service.[REGION_ID].r.appspot.com
は次の 2 通りの解釈が可能です。
- バージョン
123
が存在する場合は、my-service
サービスのバージョン123
にリクエストをルーティングする。 - バージョン
123
が存在しない場合は、その代わりに、my-service
サービスの各バージョンが実行されているインスタンス ID123
にリクエストをルーティングする。
ただし、自動スケーリングまたは基本スケーリングが構成されているインスタンスはターゲットにすることができないため、そのような場合はバージョンに名前を付けることができます。
gcloud app deploy [CONFIGURATION_FILES]
デフォルトでは、このコマンドは現在のディレクトリから app.yaml
構成ファイルをデプロイします。アプリの app.yaml
が含まれていないディレクトリからコマンドを実行する場合、または複数のアプリをデプロイする場合は、[CONFIGURATION_FILES]
を 1 つ以上の構成ファイルのパスに置き換えます。パス名は 1 つの空白文字で区切ります。
オプションのフラグ:
--version
: カスタム バージョン IDを指定します。デフォルトでは、App Engine によってバージョン ID が生成されます。--no-promote
: すべてのトラフィックを自動的にそのバージョンにルーティングすることなく、アプリをデプロイします。デフォルトでは、デプロイする各バージョンが 100% のトラフィックを受信するように自動的に構成されます。--project
:gcloud
ツールでデフォルトとして初期化されたものに代わる Cloud プロジェクト ID を指定します。
詳細については、gcloud app deploy
リファレンスをご覧になるか、コマンドラインから gcloud help
を実行してください。
例:
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]
バージョンをデプロイするときに、指定したバージョン ID と同じものがすでに App Engine に存在する場合は、デプロイしたファイルで既存のバージョンが上書きされます。ただし、その時点で既存のバージョンがトラフィックを処理している場合は、これによりアプリケーションへのトラフィックが中断され、問題が発生することもあります。トラフィックの中断を回避するには、別のバージョン ID を指定して新しいバージョンをデプロイしてから、その新しいバージョンにトラフィックを移してください。
複数サービス アプリケーションをデプロイする
アプリケーションが複数のサービスで構成されている場合は、対象のサービスを個別にデプロイして更新することも、すべてのサービスを同時にデプロイすることもできます。更新内容をサービスにデプロイする際は、個々の構成ファイルを更新できます。また、対応するバージョンのソースコードを更新することもできます。
たとえば、App Engine に 2 つのバージョンをデプロイして作成し、それぞれ専用のサービスで実行されるようにします。最初のバージョンをアプリのフロントエンド サービス、他方をバックエンド サービスとして機能させるとしましょう。この場合、個々の構成ファイルをデプロイすると一方のサービスの設定のみ更新できます。また、フロントエンドとバックエンドの一方または両方のソースコードを更新するために、特定のサービスの新しいバージョンをデプロイすることもできます。
複数サービスの要件
アプリケーションのサービスが複数の場合も、デプロイと更新のためのコマンドは同じですが、次の要件があります。
最初にアプリのバージョンの 1 つを
default
サービスにデプロイする必要があります。これで、後続のサービスを作成してデプロイできるようになります。対応するバージョンの
app.yaml
構成ファイルにサービスの ID を指定する必要があります。サービス ID を指定するには、各構成ファイルにservice: [YOUR_SERVICE_ID]
要素の定義を追加します。この要素の定義が構成ファイル内にないと、デフォルトでバージョンのデプロイ先はdefault
サービスとなります。複数のサービスを同時にデプロイするには、対応するすべての
app.yaml
構成ファイルをデプロイ コマンドで指定する必要があります。
複数のサービスのデプロイ方法
構成ファイルが存在するアプリケーションのルート ディレクトリから、デプロイ コマンドを実行します。その際、各サービスの app.yaml
ファイルの相対パスとファイル名を指定します。
gcloud app deploy [CONFIGURATION_FILES]
[CONFIGURATION_FILES]
には、1 つ以上の構成ファイルのパスと名前を 1 つの空白文字で区切って指定します。
例
gcloud app deploy main/app.yaml service1/app.yaml service2/app.yaml
各サービスが正常にデプロイされると、その確認がコマンドラインに表示されます。
インデックスの更新
アプリで使用するインデックスを作成または更新するには、index.yaml
構成ファイルを Datastore にアップロードします。この構成ファイルがアップロードされた後、まだ存在していないインデックスが作成されます。
Datastore がすべてのインデックスの作成に時間がかかることがあります。そのため、それらのインデックスは App Engine ですぐに使用できません。アプリがすでにトラフィックを受け取るように構成されている場合は、まだ作成中のインデックスを必要とするクエリに対して例外が発生する可能性があります。
例外を避けるには、次のように、すべてのインデックスを作成するための時間を確保する必要があります。
バージョンをデプロイする前に、
index.yaml
構成ファイルを Datastore にアップロードします。index.yaml
ファイルを Datastore にアップロードします。<pre class="prettyprint lang-sh">gcloud datastore indexes create index.yaml</pre> For information, see the <a href="/sdk/gcloud/reference/datastore/"><code>gcloud datastore</code> reference</a>.
Cloud Console を使用して、すべてのインデックスのステータスをモニタリングします。
すべてのインデックスが作成されたら、新しいバージョンを App Engine にデプロイします。
トラフィックをバージョンに移行または分割する前に、インデックスを作成します。
- 新しいバージョンをデプロイし、そのバージョンにトラフィックがルーティングされないようにします。
app.yaml
ファイルとindex.yaml
ファイルを両方とも指定し、そのバージョンにトラフィックがルーティングされないように--no-promote
フラグも指定する必要があります。gcloud app deploy app.yaml index.yaml --no-promote
- Cloud Console を使用して、すべてのインデックスのステータスをモニタリングします。
- すべてのインデックスが作成されたら、Cloud Console を使用して、トラフィックをバージョンに移行または分割します。
- 新しいバージョンをデプロイし、そのバージョンにトラフィックがルーティングされないようにします。
インデックスの詳細については、データストア インデックスの構成をご覧ください。
トラブルシューティング
発生する可能性のあるエラー メッセージのうち主なものを次に示します。
PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
- 必要な App Engine アプリケーションが Cloud プロジェクトに含まれていない場合、
gcloud app deploy
コマンドがgcloud app create
コマンドを実行しようとしたときに失敗する可能性があります。App Engine アプリケーションの作成に必要な権限は、オーナーのロールを持つアカウントのみに付与されています。 Command not found
- App Engine SDK(非推奨)のインストール時に
dev_appserver.sh
ツールのシンボリック リンクを作成しなかった場合、このツールを実行する際にツールの完全なディレクトリ パスを指定する必要があります([PATH_TO_CLOUD_SDK]/bin/dev_appserver.py
など)。 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
)を指定してコマンドを実行することもできます。
[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 では、アプリケーションのデプロイ済みバージョン数の上限が定められています。これは、無料アプリケーションとデプロイ済みアプリケーションとで異なります。上限に達した場合は、Cloud Console で古いバージョンを削除してから最新コードをアップロードしてください。
- その他のデプロイエラー
- デプロイが失敗した場合は、Cloud Build API がプロジェクトで有効になっていることを確認してください。App Engine は初めてアプリをデプロイする際、この API を自動的に有効にしますが、API を無効にした場合、デプロイが失敗します。
次のステップ
- サービスを使用して大規模なアプリケーションを構築する。
- トラフィックの分割またはトラフィックの移行を使用して、デプロイするバージョンにトラフィックをルーティングする。
gcloud app deploy
コマンドラインの引数とフラグを確認する。