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

Google 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 構成ファイルを指定し、ターゲット サービスの Version リソースと App Engine アプリケーションを定義します。

    たとえば、次の 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,
      }
      

      ヒント: view=FULL パラメータを末尾に追加すると、バージョンに関する参照可能な情報をすべて表示できます。次に例を示します。

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1?view=FULL
      
  4. (省略可)ブラウザを起動して http://[MY_VERSION_ID].[MY_PROJECT_ID].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 ファイルを作成してから、別の HTTP POST リクエストでアプリの v2 バージョンをデプロイできます。

更新された 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" } } }

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

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

App Engine アプリケーションで v1 バージョンを実行していて、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
            }
          }
        }
      ]
    }
    

次のステップ

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

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