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

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

デプロイ ポリシーは、選択したデリバリー パイプラインまたはターゲット(またはすべてのパイプラインまたはターゲット)に対する手動または自動のアクションを制限するために使用できる 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. ポリシー rules を 1 つ以上追加します。

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

  4. そのファイルを適用し、gcloud deploy apply --filename= を使用してリソースを作成します。

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

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

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

セレクタは、デプロイ ポリシーの構成の 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 --filename= を使用してそのファイルを適用します。

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

制限付きアクションの試行時にデプロイ ポリシーが評価されるため、すべての 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 通知が失敗します。

次のステップ