カスタム カナリア デプロイ

このドキュメントでは、カスタム カナリア デプロイを構成して使用し、Cloud Deploy を使用してすべてのターゲット タイプにアプリケーションをデプロイする方法について説明します。

カスタム カナリア デプロイの仕組み

カスタム カナリア デプロイ戦略を使用してデプロイする場合、Cloud Deploy は選択したトラフィック バランシング構成を容易にするためにマニフェストを変更しません。代わりに、各カナリア フェーズのターゲット ランタイムに適用されるマニフェストを指定する必要があります。

必要な権限があることを確認してください

Cloud Deploy の使用に必要な他の Identity and Access Management 権限に加えて、カナリア デプロイに必要な追加のアクションを実行するには、次の権限が必要です。

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

使用可能なロールにこれらの権限が含まれているかどうかについては、IAM のロールと権限をご覧ください。

skaffold.yaml を準備する

skaffold.yaml ファイルは、マニフェストのレンダリングとデプロイの方法を定義します。カスタム カナリア デプロイでは、選択したトラフィック バランシング構成を容易にするために、各カナリア フェーズに関連付けるプロファイルを定義する必要があります。これらのプロファイルは、デリバリー パイプライン戦略構成のフェーズにマッピングされます。

カスタム カナリアで使用される skaffold.yaml 構成の例を次に示します。

apiVersion: skaffold/v4beta7
kind: Config
profiles:
- name: canary-25
  manifests:
    rawYaml:
    - canary-25-resources.yaml
- name: canary-50
  manifests:
    rawYaml:
    - canary-50-resources.yaml
- name: stable
  manifests:
    rawYaml:
    - stable-resources.yaml

カスタム カナリアを構成する

カスタム カナリア構成では、デリバリー パイプライン定義で次のものを指定します。

  • ロールアウト フェーズ名

    完全に自動化されたカナリアでは、Cloud Deploy がフェーズに名前を付けます(canary-25canary-75stable など)。ただし、カスタム カナリアでは、このカナリア ステージのすべてのフェーズで一意であり、リソース ID の制限を満たす限り、各フェーズに任意の名前を付けることができます。ただし、最終(100%)フェーズの名前は stable にする必要があります。

  • 各フェーズの割合の目標

    フェーズごとに割合を個別に指定します。

  • フェーズで使用する Skaffold プロファイル

    フェーズごとに個別の Skaffold プロファイルを使用することも、同じプロファイルを使用することも、任意の組み合わせを使用することもできます。プロファイルは、それぞれ異なる Cloud Run サービス定義を使用できます。特定のフェーズに複数のプロファイルを使用することもできます。Cloud Deploy はこれらを組み合わせます。

  • そのフェーズの確認ジョブがあるかどうか

    確認を有効にする場合は、確認用に skaffold.yaml構成する必要があるので注意してください。

  • そのフェーズにデプロイ前ジョブまたはデプロイ後ジョブがあるかどうか

    デプロイ前ジョブまたはデプロイ後ジョブを有効にする場合は、これらのジョブの skaffold.yaml構成する必要があります。

カスタム カナリアの構成要素

次の YAML は、完全にカスタムのカナリア デプロイのフェーズの構成を示しています。

strategy:
  canary:
    # Custom configuration for each canary phase
    customCanaryDeployment:
      phaseConfigs:
      - phaseId: "PHASE1_NAME"
        percentage: PERCENTAGE1
        profiles: [ "PROFILE_NAME" ]
        verify: true | false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"
      - 
      - phaseId: "stable"
        percentage: 100
        profiles: [ "LAST_PROFILE_NAME" ]
        verify: true|false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"

この YAML の内容は以下のとおりです。

  • PHASE1_NAME

    フェーズの名前です。各フェーズ名は一意である必要があります。

  • [ "PROFILE_NAME" ]

    フェーズで使用するプロファイルの名前です。フェーズごとに同じプロファイル、フェーズごとに異なるプロファイル、または任意の組み合わせで使用することもできます。複数のプロファイルを指定することもできます。Cloud Deploy では、指定したすべてのプロファイル、ステージ全体で使用されるプロファイルまたはマニフェストを使用します。

  • stable

    最終フェーズには stable という名前を付ける必要があります。

  • PERCENTAGE1

    最初のフェーズでデプロイする割合です。各フェーズは一意の割合値を持つ必要があり、その値は全体の割合である必要があります(たとえば、10.5 ではありません)。フェーズは昇順である必要があります。

  • verify: true|false

    このフェーズの確認ジョブを含めるかどうかを Cloud Deploy に指示します。確認を使用する各フェーズで、Skaffold は、そのフェーズのレンダリングとデプロイに指定された確認と同じプロファイルを使用します。

  • PREDEPLOY_ACTION

    skaffold.yaml で使用した ACTION_NAME と同じです。これは、デプロイ前に実行するカスタム アクションを定義するために使用されます。

  • POSTDEPLOY_ACTION

    skaffold.yaml で使用した ACTION_NAME と同じです。これは、デプロイ後に実行するカスタム アクションを定義するために使用されます。

最終フェーズの割合は 100 にする必要があります。フェーズは、この customCanaryDeployment スタンザで構成した順序に従って実行されますが、割合の値が昇順でない場合は、デリバリー パイプラインを登録するコマンドはエラーで失敗します。

カスタム カナリアの構成には runtimeConfig スタンザは含まれません。runtimeConfig を含めると、カスタム自動カナリアと見なされます。

次のステップ