アプリのバージョンを App Engine にデプロイする

リージョン ID

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

詳しくは、リージョン ID をご覧ください。

App Engine Admin API を使用すると、HTTP POST リクエストを通じて、アプリのバージョンを App Engine アプリケーションにプログラムでデプロイできます。

始める前に

HTTP デプロイ リクエストを送信する前に、HTTP リクエストを承認して、アプリのステージング済みファイルにアクセスし、JSON 形式の構成ファイルを用意する必要があります。これらの前提条件については、次のトピックをご覧ください。

Admin API を使用してアプリを App Engine にデプロイする

アプリのバージョンを App Engine のアプリケーションにデプロイするには:

  1. アクセス トークンの取得など、HTTP リクエストを承認します。

    Admin API へのアクセスの承認は、API アプリのニーズに応じてさまざまな OAuth フローを使用して行うことができます。詳細については、API へのアクセスをご覧ください。

  2. アクセス トークンと Admin API を使用して HTTP POST リクエストを送信し、バージョンを App Engine アプリケーションにデプロイします。

    バージョンをデプロイするには HTTP POST リクエストを送信します。このリクエストで JSON 構成ファイルを指定し、ターゲット サービスと App Engine アプリケーションの Version リソースを定義します。

    たとえば、次の HTTP POST リクエストを使用して、JSON 構成ファイルで指定されたバージョンを MY_PROJECT_ID アプリケーションの default サービスにデプロイできます。

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json
    

    cURL コマンドの例:

    curl -X POST -T "app.json" -H "Content-Type: application/json" -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions
    

    ここで

    • [MY_ACCESS_TOKEN] は、HTTP リクエストを承認するために取得したアクセス トークンです。
    • [MY_PROJECT_ID] は、バージョンをデプロイするプロジェクトの ID です。

    レスポンスの例:

    {
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "insertTime": "2015-05-29T17:12:44.679Z",
        "method": "google.appengine.v1.Versions.CreateVersion",
        "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "user": "me@example.com"
      }
      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
    }
    
  3. バージョンが App Engine アプリケーションにデプロイされたことを確認します。

    1. 実際のデプロイ オペレーションのステータスを表示します。

      前のステップで使用した HTTP POST リクエストに対するレスポンスの name フィールドにはオペレーション名が含まれています。このオペレーション名を apps.operations コレクションGET メソッドで使用して、デプロイ オペレーションのステータスを確認します。

      たとえば、レスポンスの name フィールドが次のとおりであるとします。

      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
      

      この場合、次の HTTP GET リクエストを送信します。

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      cURL コマンドの例:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      ここで、[MY_ACCESS_TOKEN] はアクセス トークンです。[MY_PROJECT_ID] はバージョンをデプロイしたプロジェクトの ID です。

      レスポンスの例:

      {
        "done": true,
        "metadata": {
          "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
          "endTime": "2015-05-29T17:13:20.424Z",
          "insertTime": "2015-05-29T17:12:44.679Z",
          "method": "google.appengine.v1.Versions.CreateVersion",
          "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "user": "me@example.com"
        },
        "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85",
        "response": {
          "@type": "type.googleapis.com/google.appengine.v1.Version",
          "creationTime": "2015-05-29T17:12:46.000Z",
          "deployer": "me@example.com",
          "id": "v1",
          "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "runtime": "python27",
          "servingStatus": "SERVING",
          "threadsafe": true,
        }
      }
      

      実行時間が長いオペレーションのポーリングの詳細については、google.longrunning の RPC リファレンスをご覧ください。

    2. バージョンが App Engine アプリケーションに作成されたことを確認します。

      バージョンの詳細を表示するには、apps.services.versions コレクションGET メソッドを使用します。HTTP GET リクエストでデプロイしたバージョンを指定する必要があります。次に例を示します。

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      cURL コマンドの例:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      ここで、[MY_ACCESS_TOKEN] はアクセス トークンです。[MY_PROJECT_ID] はバージョンをデプロイしたプロジェクトの ID です。

      レスポンスの例:

      {
        "creationTime": "2015-05-29T17:12:46.000Z",
        "deployer": "me@example.com",
        "deployment": {
          "files": {
            "my-python-app.py": {
              "sha1Sum": "7cffbdaa9fcfa46e5e58269bfe336dd815de0566",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/logo.jpg",
            },
            "logo.jpg": {
              "sha1Sum": "13f7ea1e24f7cd2de5c66660525f2b509da37c14",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/my-python-app.py"
            }
          }
        },
        "handlers": [
          {
            "authFailAction": "AUTH_FAIL_ACTION_REDIRECT",
            "login": "LOGIN_OPTIONAL",
            "script": {
              "scriptPath": "my-python-app.application",
            },
            "securityLevel": "SECURE_OPTIONAL",
            "urlRegex": "/.*"
          }
        ]
        "id": "v1",
        "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "runtime": "python27",
        "servingStatus": "SERVING",
        "threadsafe": true,
      }
      
      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1?view=FULL
      
  4. 省略可: ブラウザを起動して https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com でアプリを表示するには、次のコマンドを実行します。

    gcloud app browse -v [MY_VERSION_ID]
    
  5. デプロイしたバージョンで受信するトラフィック量を構成します。

    デフォルトでは、App Engine アプリケーションにデプロイする最初のバージョンがトラフィックの 100% を受信するように自動的に構成されます。ただし、同じ App Engine アプリケーションにデプロイするそれ以降のバージョンはすべて手動で構成する必要があります。構成しなかった場合、それらのバージョンはトラフィックを受信しません。

    バージョンのトラフィックを構成する方法の詳細については、トラフィックの移行と分割をご覧ください。

追加のバージョンとサービスをデプロイする

追加サービスの作成を含め、アプリの後続バージョンをデプロイする手順は、このタスクで説明しているデプロイ手順とほぼ同じです。App Engine アプリケーションで実行されている現在のバージョンを置き換えたい場合や、サービスを追加したい場合は、構成ファイルをわずかに変更した後で新しいバージョンをデプロイします。

App Engine アプリケーションに追加のバージョンをデプロイする方法については、次の例を参照してください。バージョンをデプロイした後、トラフィックを構成する必要があることを忘れないでください。

例: 追加のバージョンをデプロイする

古いバージョンや問題のあるバージョンが App Engine で実行されている場合、それらのバージョンを置き換えるには、別のバージョンを App Engine アプリケーションにデプロイしてから、そのバージョンにトラフィックをルーティングします。たとえば、アプリのソースコードを変更してから、app.yaml ファイルの version の値を変更し、新しい app.json ファイルを作成してアプリの v2 バージョンを別の HTTP POST リクエストを使用してデプロイできます。

更新された app.yaml ファイルの例:

  service: default
  version: v2
  runtime: python27
  threadsafe: true
  handlers:
  - url: /.*
    script: my-python-app.application

バージョン v2 用の HTTP POST リクエストの例:

  POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json

バージョンが正常にデプロイされたことを確認する手順を実行した後、HTTP PATCH リクエストを送信して、すべてのトラフィックを新しいバージョンに転送できます。次に例を示します。

  PATCH https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/?updateMask=split {"split": { "allocations": { "v2": "1" } } }

トラフィックのルーティングの詳細については、トラフィックの移行と分割をご覧ください。

例: 複数のサービスをデプロイする

v1 バージョンを App Engine アプリケーションで実行している場合に、backend などの追加のサービスをデプロイする場合も、同じデプロイ手順を行います。

たとえば、backend サービスを作成する v1 バージョンをデプロイするには、次のようにします。

  1. backend サービスの新しいコードとソースファイルを作成します。
  2. backend サービスのアプリケーション リソースを Cloud Storage バケットにステージングします。
  3. backend/app.json 構成ファイルを作成します。
  4. HTTP リクエストを使用して、backend サービスの v1 バージョンを App Engine アプリケーションにデプロイします。

    HTTP POST リクエストの例:

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/backend/versions backend/app.json
    

    backend サービスの v1 バージョンが作成されたことを確認する HTTP GET リクエストの例:

    GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services
    

    レスポンスの例:

    {
      "services": [
        {
          "name": "apps/[MY_PROJECT_ID]/services/default",
          "id": "default",
          "split": {
            "allocations": {
              "v2": 1
            }
          }
        },
        {
          "name": "apps/[MY_PROJECT_ID]/services/backend",
          "id": "backend",
          "split": {
            "allocations": {
              "v1": 1
            }
          }
        }
      ]
    }
    

次のステップ