ロールバック、段階的なロールアウト、トラフィックの移行

Cloud Run では、トラフィックを受信するリビジョンと、リビジョンが受信するトラフィックの割合を指定できます。この機能を使用すると、以前のリビジョンへのロールバック、リビジョンの段階的なロールアウト(Blue / Green デプロイメントとも呼ばれます)、複数のリビジョン間でのトラフィックの分割ができます。このページでは、この機能を使用して Cloud Run リビジョンへのトラフィックを管理する方法について説明します。

以前のリビジョンにロールバックする

以前のリビジョンにロールバックするには:

Console

  1. Cloud Run に移動します

  2. サービスリストでサービスを見つけてクリックします。

  3. [リビジョン] タブをクリックして、そのサービスの現在のリビジョンのリストを表示します。

  4. リビジョンのリストで、ロールバックしているリビジョンの右側にある省略記号アイコンをクリックします。

    manage-traffic

  5. [トラフィックの管理] をクリックして、トラフィック管理フォームを表示します。

    1. プルダウン リストからロールバックする以前のリビジョンを選択します。
    2. 前のリビジョンのトラフィックの割合を 100 に設定します。
    3. 現在、配信されているリビジョンの割合を 0 に設定します。
    4. [保存] をクリックします。

コマンドライン

次のコマンドを使用します。

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • SERVICE は、サービスの名前に置き換えます。
  • REVISION は、ロールバックするリビジョンの名前に置き換えます。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 属性の下にある traffic 属性を見つけて、次のように更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    次のように置き換えます。

    • REVISION は、ロールバックするリビジョンの名前に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml
  4. 更新が完了するまで待ちます。完了すると、ロールバック元のリビジョンがすでにデプロイされてトラフィックの 0% を処理しているというメッセージが表示されます。

リビジョンを段階的にロールアウトする

新しいリビジョンを段階的にロールアウト(Blue / Green デプロイメント)するには:

Console

  1. Cloud Run に移動します

  2. サービスリストでサービスを見つけてクリックします。

  3. [Deploy New Revision] をクリックします。

  4. 必要に応じてデプロイ フォームに記入します。[このリビジョンをすぐに利用する] のチェックボックスは必ずオフにしてください。

  5. [デプロイ] をクリックします。

  6. [トラフィックを管理] をクリックします。

  7. 新しいリビジョンが一覧表示されますが、割合は 0 に設定され、現在はトラフィックが処理されていないことを示します。フォームで次の操作を行います。

    1. 希望する割合(たとえば 5 )に設定します。現在配信中のバージョンの割合は、自動的に同じ値が減少します。
    2. [保存] をクリックします。
    3. これらの [トラフィックの管理] 手順を繰り返します。割合を変更する場合は、新しいリビジョンに必要な割合を増やします。トラフィックの割合を変更するために再デプロイする必要はありません。

コマンドライン

  1. 段階的にロールアウトするリビジョンをデプロイします。初期設定では、トラフィックを受信しません。

    gcloud run deploy --image IMAGE --no-traffic

    IMAGE は、デプロイするイメージに置き換えます。

  2. 新しいリビジョンに処理するトラフィックの割合(たとえば、5%)を指定します。

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • SERVICE は、サービスの名前に置き換えます。
    • REVISION は、段階的にロールアウトするリビジョンの名前に置き換えます。最新のリビジョンを指定するには、LATEST を使用します(たとえば、LATEST=5 )。
    • PERCENTAGE は、新しいリビジョンに送信するトラフィックの割合に置き換えます。たとえば、5 ではトラフィックの 5% が送信されます。
  3. リビジョンのパフォーマンスが十分な場合は、上記の update-traffic ステップを繰り返しますが、必要に応じて割合の値を増やします。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. さまざまな構成に関するページで説明されている手順に沿ってサービスに必要な構成の変更を行い、新しいリビジョンのリビジョン名を指定します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME は、新しいリビジョンに付ける名前に置き換えます。
  3. spec 属性の下にある traffic 属性を見つけて、新しいリビジョンが少量のトラフィックのみを処理するように更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-NEW
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    割合を合計すると 100 になる必要があります。次のように置き換えます。

    • REVISION-NEW は、段階的にロールアウトするリビジョンの名前に置き換えます。
    • REVISION-FORMER は、現在トラフィックを処理しているリビジョンの名前に置き換えます。
    • PERCENT-NEW は、新しいリビジョンに送信するトラフィックの割合に置き換えます。たとえば、10 を使用すると、新しいリビジョンにトラフィックの 10% が送信されます。
    • PERCENT-FORMER は、古いリビジョンに送信するトラフィックの割合に置き換えます。
  4. 更新が完了するまで待ちます。完了すると、段階的ロールアウト対象の新しいリビジョンがすでにデプロイされ、設定した割合のトラフィックを処理しているというメッセージが表示されます。

複数のリビジョン間でトラフィックを分割する

2 つ以上のリビジョン間でトラフィックを分割するには:

Console

  1. Cloud Run に移動します

  2. サービスリストでサービスを見つけてクリックします。

  3. [トラフィックを管理] をクリックします。

  4. 現在、配信されている新しいリビジョンが一覧表示されます。フォームで次の操作を行います。

    1. 現在、配信されているリビジョンの割合を目的の値に分割します。
    2. プルダウン リストを使用して以前のリビジョンの 1 つを選択し、割合を目的の分割に設定します。
    3. 他のリビジョン間でトラフィックを分割するには、[リビジョンを追加] をクリックして目的のリビジョンを選択し、割合を目的の分割に設定します。
    4. [保存] をクリックします。

コマンドライン

各リビジョンのリビジョンとトラフィックの割合をカンマ区切りリストで指定します。

gcloud run services update-traffic SERVICE --to-revisions LIST

  • SERVICE は、サービスの名前に置き換えます。
  • LIST は、リビジョンと割合のカンマ区切りのリストに置き換えます。
    REVISION1=PERCENTAGE1REVISION2=PERCENTAGE2REVISIONn=PERCENTAGEx
    (例: hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 属性の下にある traffic 属性を見つけて、新しいリビジョンが少量のトラフィックのみを処理するように更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-A
        percent: PERCENT-A
      - revisionName: REVISION-B
        percent: PERCENT-B
      - revisionName: REVISION-C
        percent: PERCENT-C
    

    割合を合計すると 100 になる必要があります。次のように置き換えます。

    • REVISION-AREVISION-BREVISION-C は、トラフィックを割り当てるリビジョンに置き換えます。
    • PERCENT-APERCENT-BPERCENT-C は、対応するリビジョンに送信するトラフィックの割合に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml
  4. 更新が完了するまで待ちます。完了すると、段階的ロールアウト対象の新しいリビジョンがすでにデプロイされ、トラフィックの 5% (または設定した値)を処理しているというメッセージが表示されます。

すべてのトラフィックを最新のリビジョンに送信する

新しいリビジョンをデプロイすると、このリビジョンを作成でき、将来のすべてのリビジョンがトラフィックの 100% をできるだけ早く処理し、確立されたトラフィック分割を上書きします。

Console

  1. Cloud Run に移動します

  2. サービスリストでサービスを見つけてクリックします。

  3. [Deploy New Revision] をクリックします。

  4. 必要に応じてデプロイ フォームに記入します。[このリビジョンをすぐに利用する] のチェックボックスは必ずオンにしてください。これにより、既存のトラフィック分割が上書きされ、新しいリビジョンがトラフィックの 100% を処理します。

  5. [デプロイ] をクリックします。

コマンドライン

すべてのトラフィックを最近デプロイされたリビジョンに送信するには:

gcloud run services update-traffic SERVICE --to-latest

SERVICE は、サービスの名前に置き換えます。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 属性の下にある traffic 属性を見つけて、次のように更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml
  4. 更新が完了するまで待機します。完了すると、(最新の)リビジョンがすでにデプロイされ、トラフィックの 100% を処理しているというメッセージが表示されます。

テスト、トラフィックの移行、ロールバックにタグを使用する

サービスをデプロイすると、新しいリビジョンを作成して、トラフィックを処理せずに特定の URL のリビジョンにアクセスできるタグを割り当てることができます。このタグを使用して、タグ付けされたリビジョンにトラフィックを段階的に移行し、タグ付けされたリビジョンをロールバックできます。

この機能の一般的な使用例は、新しいサービス リビジョンのトラフィックを、トラフィックの処理前にテストして確認することです。通常はこのシーケンスで次のようなものです。

  1. 開発中にコンテナで統合テストを行います。
  2. ステージングにのみ使用する Google Cloud プロジェクトにコンテナをデプロイし、トラフィックを処理せずに、タグ付きリビジョンをテストします。
  3. トラフィックを処理せずに本番環境にデプロイし、本番環境でタグ付けされたリビジョンに対してテストします。
  4. タグの付いたリビジョンにトラフィックを移行します。

新しいタグ付きリビジョンをデプロイする

既存のサービスの新しいリビジョンを本番環境にデプロイするには:

gcloud beta run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

置換

  • IMAGE_URL を画像の URL に置き換えます。
  • TAG_NAME は小文字のタグ名で置き換えます。

このタグを使用すると、トラフィックを処理することなく、特定の URL で新しいリビジョンを直接テストできます。URL は指定したタグ名で始まります。たとえば、サービス myservice でタグ名 green を使用した場合、タグ https://green---myservice-abcdef.a.run.app を使用して、タグ付きのリビジョンをテストします。

タグ付きリビジョンへのトラフィックの移行

新しいリビジョンが適切に機能していることを確認したら、Cloud Console、gcloud コマンドライン、または YAML ファイルを使用してトラフィックを移行できます。

Console

  1. Cloud Run に移動します

  2. サービスリストでサービスを見つけてクリックします。

  3. トラフィックの送信先となるタグ付きリビジョンを選択します。

    manage-traffic

  4. [トラフィックを管理] をクリックします。

  5. タグ付けされているリビジョン名を見つけます。割合は 0 に設定され、現在はトラフィックが処理されていないことを示します。トラフィックの管理* フォームの場合:

    1. 希望する割合(たとえば 5 )に設定します。現在配信中のバージョンの割合は、自動的に同じ値が減少します。
    2. [保存] をクリックします。
    3. 必要に応じて、これらの [トラフィックの管理] の手順を数時間または数日繰り返します。ただし、割合を変更した場合は、必要に応じてタグ付けされたリビジョンに割合を増やします。トラフィックの割合を変更するために再デプロイする必要はありません。

コマンドライン

トラフィックを特定のリビジョン タグに移行するには:

gcloud beta run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT

置換

  • TAG_NAME は、トラフィックの移動先のタグの名前で置き換えます。
  • TRAFFIC_PERCENT は、タグ付きリビジョンで処理するトラフィックの割合で置き換えます(たとえば、1)。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. さまざまな構成に関するページで説明されている手順に沿って、サービスに必要な構成の変更を行います。

  3. spec 属性の下で、タグ付きリビジョンの traffic 属性を見つけて更新します。これにより、タグ付きリビジョンが少数のトラフィックのみを処理するようになります。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    割合を合計すると 100 になる必要があります。置換

    • REVISION は、タグ付きリビジョンの名前に置き換えます。
    • TAG_NAME は、段階的にロールアウトするタグの名前に置き換えます。
    • PERCENT-NEW は、タグ付きリビジョンに送信するトラフィック率に置き換えます。たとえば、10 を使用して、そのリビジョンにトラフィックの 10% を送信します。
    • REVISION-FORMER は、現在トラフィックを処理しているリビジョンの名前に置き換えます。
    • PERCENT-FORMER は、古いリビジョンに送信するトラフィックの割合に置き換えます。
  4. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml
  5. 更新が完了するまで待ちます。完了すると、段階的ロールアウト対象の新しいリビジョンがすでにデプロイされ、設定した割合のトラフィックを処理しているというメッセージが表示されます。