ポリシーを使用してデプロイ動作を制限する

このドキュメントでは、デプロイ ポリシーを使用して手動または自動デリバリー パイプライン アクションを制限する方法について説明します。

デプロイ ポリシーは、選択したデリバリー パイプラインまたはターゲット(またはすべてのパイプラインまたはターゲット)に対する手動または自動のアクションを制限するために使用できる Cloud Deploy リソースです。

制限できる動作

デプロイ ポリシーを作成して、Cloud Deploy がロールアウトに対して特定のアクションを実行することを制限または禁止できます。たとえば、ポリシーにより、指定された期間中に特定のデリバリー パイプラインのロールアウトの作成を禁止できます。たとえば、季節的な制限に使用できます。

ポリシーの評価と適用方法

手動または自動のアクションの場合、Cloud Deploy は次の処理を行います。

  1. Identity and Access Management の権限を確認します。

    ユーザー アカウントまたはサービス アカウントに十分な IAM 権限がない場合、アクションは実行されず、デプロイ ポリシーを評価する必要はありません。

  2. ターゲットまたはデリバリー パイプラインに適用可能なポリシーがあるかどうかを確認し、ある場合はポリシーを評価します。

    • Cloud Deploy は、実行されるアクションを評価して、このルールが適用可能かどうかを確認します。

      つまり、アクション タイプと呼び出し元がポリシーと一致しているかどうかを確認します。

    • Cloud Deploy は、ポリシーに定義された日付と時間の範囲を確認して、リクエスト時にそのポリシーが有効かどうかを確認します。

    • ポリシーが有効で、ルールがデリバリー パイプラインまたはターゲットとアクションに適用される場合、そのルールが適用され、アクションがブロックされます。

要件と制限事項

  • 各ポリシーには少なくとも 1 つのセレクタが必要です。

  • 各ポリシーには少なくとも 1 つのルールが必要です。

    すべてのルール ID は、デプロイ ポリシー内でユニークである必要があります。

  • 各ルールには少なくとも 1 つの timeWindows が必要です。その timeWindows 内には oneTimeWindows または weeklyWindows のいずれかが必要です。

    時間ブロックの使用方法について詳しくは、日付と時刻をご覧ください。

  • プロジェクト/ロケーションごとに設定できるデプロイ ポリシーは 1,000 個までです。

必要な Identity and Access Management のロールと権限

Cloud Deploy デリバリー パイプラインを実行するために必要な権限、ポリシーによって制限されるタスクを行うために必要な権限に加えて、ポリシー リソースに対する特定のオペレーションを実行するためには次のようないくつかの権限が必要です。

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

これらの権限は、roles/clouddeploy.policyAdmin ロールに含まれています。また、roles/clouddeploy.policyOverrider ロールには .override 権限が含まれています。

デプロイ ポリシーの作成

デプロイ ポリシー リソースの作成手順は次のとおりです。

  1. デプロイ ポリシーの構成を含む YAML ファイルを作成します。

    構成には、リソースをデプロイ ポリシーとして識別するヘッダーが含まれています。必ず name を付ける必要があります。

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. ポリシーが適用される配信パイプラインとターゲット(selectors)への参照を追加します。

    ポリシー セレクタとその構成方法の詳細については、ポリシー セレクタをデプロイする構成スキーマ リファレンスをご覧ください。

  3. 1 つ以上のポリシー rules を追加します。

    各ルールは、制限と、その制限が適用される状況を表します。ポリシー ルールとその構成方法の詳細については、ポリシー ルールをデプロイする構成スキーマ リファレンスをご覧ください。

  4. このファイルを適用してポリシーを作成します。

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    ここで、FILENAMEDeployPolicy 定義を含む YAML ファイルの名前、REGION はデプロイ ポリシー リソースを作成するリージョン、PROJECT_ID はリソースを作成するプロジェクトです。

参照されているデリバリー パイプラインまたはターゲットは、デプロイ ポリシー リソースのルールに従って制限されます。

ポリシー セレクタをデプロイする

デプロイ ポリシーの構成で定義されるセレクタは、特定のルールの影響を受けるデリバリー パイプラインとターゲットを決定します。

セレクタは、デプロイ ポリシーの構成の selectors スタンザで、トップレベル プロパティとして定義されます。

selectors:
- deliveryPipeline:
    id:
    labels:
  target:
    id:
    labels:

この YAML 構成では、deliveryPipeline.id はデリバリー パイプラインの名前を、target.id はターゲットの名前を取得します(どちらの場合も metadata.name)。

id: * を使用すると、すべてのデリバリー パイプラインまたはすべてのターゲットを選択できます。* はすべてを選択するための特別なフィールド値であり、任意のワイルドカードはサポートされていません。ラベルを使用して、デリバリー パイプラインまたはターゲット、あるいはその両方を照合することもできます。

指定されたセレクタ内では、アイテムは AND 条件として扱われます。複数のセレクタは OR 条件として扱われます。つまり、特定のリクエストがポリシーによって制限されるには、少なくとも 1 つのセレクタに適用される必要があります。ただし、そのセレクタ内では、リクエストはすべての項目に一致する必要があります。

ポリシー ルールをデプロイする

各デプロイ ポリシーには、1 つ以上のポリシールールが含まれます。これらのルールは、選択したデリバリー パイプラインまたはターゲットで制限されるアクションを定義します。ルールは、ルールが適用される状況も定義します。

次のルールを使用できます。

  • rolloutRestriction

rolloutRestriction ルールは、選択したデリバリー パイプラインで使用される選択したターゲットで、指定されたロールアウト アクションが実行されないようにします。このルールでは、選択したデリバリー パイプラインとターゲットに対してロールアウトを作成できない時間枠を定義する時間枠を使用します。デプロイ ポリシー ルールで日付と時刻を指定する方法については、日付と時刻をご覧ください。

ルールが有効な間、次の操作は制限されます。

  • ADVANCE

    ロールアウト フェーズを進めることはできません。

  • APPROVE

    ロールアウトのプロモーションを承認できません。

  • CANCEL

    ロールアウトをキャンセルすることはできません。

  • CREATE

    ロールアウトを作成できません。ポリシーによってこのアクションが禁止されている場合でも、リリースを作成できますが、そのリリースからロールアウトが生成されることはありません。

  • IGNORE_JOB

    ジョブを無視することはできません。

  • RETRY_JOB

    ジョブを再試行できません。

  • ROLLBACK

    ロールアウトをロールバックすることはできません。

  • TERMINATE_JOBRUN

    ジョブ実行を終了できません

    このルールの YAML 構造については、構成スキーマ リファレンスをご覧ください。

rolloutRestriction ルールの日付と時刻

日付と時間ブロックを構成して、デプロイ ポリシーが有効になる繰り返しと非繰り返しの時間枠を指定します。

日付と時刻の表現に関する要件は次のとおりです。

  • 日付は yyyy-mm-dd として表されます。

  • 時刻を表す場合、一日の始まりは 00:00、一日の終わりは 24:00 です。

  • oneTimeWindows の場合、日付には時刻を含める必要があります。weeklyWindows の場合、時刻は省略できます。ただし、startTime を指定する場合は endTime を指定する必要があります。その逆も同様です。

    たとえば、日曜日のみフリーズする場合は次のようになります。

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
      endTime: "24:00"
    

    次の方法でも可能です。

    - daysOfWeek: [SUNDAY]
    

    ただし、次の場合は除きます。

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • timeWindows スタンザにタイムゾーンを含める必要があります。

    例: timeZone: America/New_York

繰り返しのない時間枠

繰り返しのない時間枠は、特定の日時に開始して終了します。これは、ロールアウトを制限する期間に使用します。

繰り返しなしの時間枠は、oneTimeWindows スタンザを使用して構成されます。

繰り返しの時間枠

繰り返しの時間枠は、ロールアウトを制限する繰り返しの時間ブロックを表します。たとえば、週末のロールアウトを制限するために使用できます。

繰り返しの時間枠は、weeklyWindows スタンザを使用して構成されます。

このセクションでは、日付と時刻を使用してデプロイ ポリシーが適用されるタイミングを構成する例をいくつか示します。

年次固定

ロールアウトを一時停止したい期間がある場合は、oneTimeWindows ブロックを構成して一時停止できます。日付が毎年予測可能な場合でも、複数の oneTimeWindow ブロックを使用する必要があります。

次の YAML は、年次フリーズのデプロイ ポリシーを適用する 1 回限りの(繰り返しなし)時間枠を示しています。

timeWindows:
  timeZone: "America/New_York"
  oneTimeWindows:
  - start: "2024-12-22 17:00"
    end: "2025-01-02 09:00"

この YAML は、2024 年 12 月 22 日午後 5 時から 2025 年 1 月 2 日午前 9 時までの時間枠を表しています。

週末フリーズの繰り返し

次の YAML は、週末(金曜日の午後 5 時から月曜日の午前 9 時まで)のロールアウトを制限するデプロイ ポリシーを適用する繰り返し時間枠を示しています。

timeWindows:
  timeZone: "America/New_York"
  weeklyWindows:
  - daysOfWeek: [FRIDAY]
    startTime: "17:00"
    endTime: "24:00"
  - daysOfWeek: [SATURDAY, SUNDAY]
    startTime: "00:00"
    endTime: "24:00"
  - daysOfWeek: [MONDAY]
    startTime: "00:00"
    endTime: "09:00"

デプロイ ポリシーを更新する

デプロイ ポリシーの更新は、次の手順で行います。

  1. ポリシー構成の YAML を編集します。

    Google Cloud コンソールを使用してポリシーを作成した場合は、[デプロイ ポリシーの詳細] ページで [YAML] タブを選択して YAML 構成を取得できます。その後、そのテキストをローカル ファイルにコピーして編集できます。

  2. このファイルを適用してポリシーを更新します。

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    これにより、新しい構成でデプロイ ポリシー リソースが更新されます。

デプロイ ポリシーは、制限付きアクションが試行されたときに評価されるため、すべての Cloud Deploy リソースに対するそのようなアクションはすべて、更新されたポリシーの対象となります。つまり、以前の制限の残りは存在しません。たとえば、12 月全体に restrictRollouts ブロックがあり、12 月 14 日に制限が 12 月 15 日に終了するようにポリシーを更新した場合、12 月 15 日以降はロールアウトがブロックされなくなります。

デプロイ ポリシーをオーバーライドする

必要に応じて、デプロイ ポリシーをオーバーライドできます。たとえば、本番環境のデプロイに問題があり、ロールバックする必要があるが、ロールアウトを禁止するデプロイ ポリシーがある場合は、そのポリシーをオーバーライドして、問題のあるロールアウトをロールバックできます。

デプロイ ポリシーをオーバーライドするには、clouddeploy.deployPolicies.override IAM 権限が必要です。

ポリシーをオーバーライドするには、gcloud CLI またはGoogle Cloud コンソールを使用します。

Console

  1. Google Cloud コンソールで、ポリシーによってブロックされているアクションを実行してみます。

    デプロイ ポリシーによってアクションがブロックされていることを示すダイアログが表示されます。このダイアログには、このアクションをブロックしている特定のポリシーへのリンクが含まれています。

  2. テキスト フィールドにポリシーの名前を入力し、[ポリシーのオーバーライドを試みる] をクリックします。

    ポリシーをオーバーライドする権限がある場合、Cloud Deploy はアクションを実行します。

gcloud CLI

gcloud CLI を使用してデプロイ ポリシーをオーバーライドするには、そのポリシーによって阻止されるアクションのコマンドに --override-deploy-policies を追加します。たとえば、次のコマンドはリリースをプロモートさせ、プロモーションを妨げる特定のデプロイ ポリシーをオーバーライドします。

 gcloud deploy releases promote --release=my-release-001 \
   --project=my-policy-testing-project \
   --region=us-central1 \
   --delivery-pipeline=my-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=my-deploy-policy

デプロイ ポリシーを削除する

デプロイ ポリシーを削除するには:

Console

  1. Google Cloud コンソールで、Cloud Deploy の [デプロイ ポリシー] ページに移動します。

    [デプロイ ポリシー] ページを開く

    このページには、現在のプロジェクトで使用可能なデプロイ ポリシーのリストが表示されます(存在する場合)。

  2. 削除するポリシーの アクション)ボタンを選択し、[デプロイ ポリシーを削除] をクリックします。

  3. デプロイ ポリシー名を入力して削除を確定し、[確認] をクリックします。

    ポリシーが削除され、ポリシーで制限されていたアクションを実行できるようになりました。

gcloud CLI

gcloud CLI を使用してデプロイ ポリシーを削除するには、次のコマンドを実行します。

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

以下を置き換えます。

  • [POLICY_NAME]

    ポリシー構成ファイルで定義されているポリシーの名前。

  • [PROJECT]

    デプロイ ポリシーを作成した Google Cloud プロジェクトのプロジェクト ID。

  • [REGION]

    デプロイ ポリシーを作成したリージョン。

デプロイ ポリシー リソースを削除すると、影響を受けるデリバリー パイプラインとターゲットはポリシーの対象外になり、別のデプロイ ポリシーの影響を受けない限り制限されなくなります。

デプロイ ポリシーのロギング

デプロイ ポリシーが評価されると、次のアクションに対してプラットフォーム ログ エントリが作成されます。

  • ポリシー評価

    リクエストが評価され、ポリシーに違反した場合、プラットフォーム ログが書き込まれます。リクエストによってポリシーに違反しているものの、ポリシーが停止されているかオーバーライドされているためにリクエストが許可された場合も、ログが書き込まれます。ポリシーに違反していないため、リクエストが許可された場合はログが書き込まれません。

  • デプロイ ポリシー リソースの変更時に Pub/Sub 通知が失敗します。

次のステップ