Cloud Deploy 通知の使用

このページでは、Cloud Deploy サービス通知を使用する方法(サブスクライブする方法など)について説明します。

Cloud Deploy は、次の 2 つの目的で Pub/Sub を使用して通知を公開します。

  • Cloud Deploy をサードパーティ ツールや、ワークフロー チケットングやテスト インフラストラクチャのツールなどの他の Google ツールと統合できるようにするため。

  • 追加のビジネス ロジックを使用して Cloud Deploy を拡張します。

使用可能なトピック

Cloud Deploy では、次の一連の Google Pub/Sub トピックにメッセージを公開します。

  • clouddeploy-resources

    Cloud Deploy のコアリソース(自動化、カスタム ターゲット タイプ、デリバリー パイプライン、ジョブ実行、リリース、ロールアウト、ターゲット)に対するオペレーション(作成、更新、削除)がある場合。

  • clouddeploy-operations

    • Cloud Deploy で Skaffold 構成がレンダリングされる場合。
    • Cloud Deploy がターゲット(StartSucceedFailureTerminated(ジョブ実行)、Cancelled(ロールアウト))にデプロイする場合。
  • clouddeploy-approvals

    • Cloud Deploy でロールアウトの承認(または拒否)が必要な場合。
    • ロールアウトが承認されたか拒否された場合。
  • clouddeploy-advances

    • Cloud Deploy ロールアウトが 1 つのフェーズから次のフェーズに進んだとき。
    • ロールアウトを進めることができる場合。

Pub/Sub サブスクリプションに push または pull モデルを使用できます。

Cloud Deploy サービスに関する通知を受け取る

Cloud Deploy サービス通知を受け取るには:

  1. Cloud Deploy API を有効にします。

    Cloud Deploy API を有効にする

    Cloud Deploy サービス エージェント サービス アカウントは、Cloud Deploy API を初めて呼び出すときにプロジェクトに自動的に追加されます。このサービス アカウントを使用すると、Pub/Sub を使用して Cloud Deploy サービス通知を受け取ることができます。

    サービス アカウント名の形式は次のとおりです。ここで project-number はプロジェクト番号です。

     service-project-number@gcp-sa-clouddeploy.iam.gserviceaccount.com
    

    それでも [IAM] ページで Cloud Deploy サービス エージェントのサービス アカウントが表示されない場合や、Pub/Sub 通知を受信できない場合は、このサービス アカウントをプロジェクトに追加します。

    1. Google Cloud コンソールで IAM ページを開きます。

      [IAM] ページを開く

    2. [追加] をクリックします。

    3. 次のプリンシパルを追加します。ここで、project-number はプロジェクト番号です。

      service-project-number@gcp-sa-clouddeploy.iam.gserviceaccount.com
      
    4. ロールとして [サービス管理] > [Cloud Deploy サービス エージェント] の順に選択します。

    5. [保存] をクリックします。

  2. Pub/Sub API を有効にします。

    Pub/Sub API を有効にする

  3. 受信する通知の種類に応じて、Pub/Sub トピックを作成します。

    gcloud pubsub topics create clouddeploy-resources
    gcloud pubsub topics create clouddeploy-operations
    gcloud pubsub topics create clouddeploy-approvals
    gcloud pubsub topics create clouddeploy-advances
    

    Pub/Sub トピックの管理の詳細については、トピックとサブスクリプションの管理をご覧ください。

Cloud Deploy サービス通知をサブスクライブする

通知に登録する方法はいくつかあります。たとえば、メッセージをエンドポイントに push できます。また、サブスクリプションをポーリングする Python アプリを作成することもできます。

Cloud Deploy サービス通知用の Pub/Sub サブスクリプションを設定する方法については、Pub/Sub サブスクライバー ガイドをご覧ください。また、Pub/Sub クライアント ライブラリを使用すると、サブスクライバー アプリケーションをより簡単に開発できます。

フィールド値

このセクションでは、Cloud Deploy Pub/Sub メッセージのフィールドに使用できる値について説明します。

Action の場合

これらの通知で、Action の値は次のとおりです。

  • リソースの場合

    • Create
    • Update
    • Delete
  • オペレーションの場合:

    • Start
    • Succeed
    • Failure
    • Terminated
    • Cancelled
  • 承認の場合:

    • Required
    • Approved
    • Rejected
  • 前払いの場合:

    • Required
    • Advanced

ResourceType の場合

ResourceType に指定できる値は次のとおりです。

  • DeliveryPipeline
  • Target
  • Release
  • Rollout
  • JobRun

サンプル メッセージ

次の例は、Cloud Deploy トピックからの Pub/Sub メッセージのいくつかのタイプを示しています。

デリバリー パイプラインの作成

新しい deliveryPipeline の作成に対応して clouddeploy-resources に公開された Pub/Sub メッセージの例を次に示します。

{
  "ackId":   "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQBQgUBXx9cEFMdVhddmhRDRlyfWByY11AAgVMVnldURsHaE5tdR_Wg6LHS0NVaF4TBgpGVX5fXx0IYVtedi_m7r_2wPXOXkAvOYXL6Mtpe735h9xvZiM9XxJLLD5-IzRFQV5AEkwoAURJUytDCypYEU4EISE-MD5FUw",
  "message": {
    "attributes": {
      "Action": "Create",
      "Resource": "projects/120123456789/locations/us-central1/deliveryPipelines/etest",
      "ResourceType": "DeliveryPipeline",
      "Location": "us-central1",
      "DeliveryPipelineId": "etest",
      "ProjectNumber": "120123456789",

    },
    "messageId": "2407836004659723",
    "publishTime": "2021-05-17T21:24:48.204Z"
  }
}

レンダリング開始

次の例は、リリースがレンダリングされたことを通知するために、clouddeploy-operations に公開された Pub/Sub メッセージを示しています。

{
  "ackId": "U0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwYIFAV8fXBBTHVeXHRoUQ0Zcn1gcmNfR1MLFlN5WFEaB2hObXUfioKix0tDVWheEwYKRVZ3W1kdBGFVXH0v_qD5rMP1zl5AKDnZyujLaXudkqxfZiM9XxJLLD5-PTNFQV5AEkw2BkRJUytDCypYEU4EISE-MD5F",
  "message": {
    "attributes": {
      "Action": "Start",
      "Resource": "projects/120123456789/locations/us-central1/deliveryPipelines/etest/releases/f2",
      "ResourceType": "Release"
      "Location": "us-central1",
      "DeliveryPipelineId": "etest",
      "ProjectNumber": "120123456789",
      "ReleaseId": "f2",
    },
    "messageId": "2407805942699908",
    "publishTime": "2021-05-17T21:28:04.201Z"
  }
}

承認が必要です

次の例は、ロールアウトに承認が必要であることを通知するために clouddeploy-approvals に公開された Pub/Sub メッセージを示しています。

{
   "ackId": "RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRILUxNRXHQBWhBpWF8aB1ENGXJ8ZnxtCRBVU0FWf1VbEQ16bVxti6C2rERfQXduWhQJBkBXd11aHQhoXF9dotnkpeTv2kFwYSuN8_7mSH_Mo6AYZiA9XBJLLD5-IzZFQV5AEkwoA0RJUytDCypYEU4EISE-MD4",
   "message": {
     "attributes": {
       "Action": "Required",
       "Rollout": "projects/120123456789/locations/us-central1/deliveryPipelines/etest/releases/f2/rollouts/rollout-123"
       "ReleaseId": "f2",
       "RolloutId": "rollout-123",
       "TargetId": "prod",
       "Location": "us-central1",
       "ProjectNumber": "120123456789",
     },
     "messageId": "2407845492165003",
     "publishTime": "2021-05-17T21:31:25.143Z"
   }
 }

ロールアウトの進捗状況

次の例は、ロールアウトがフェーズから次のフェーズに進んだことを通知するために clouddeploy-advances に公開された Pub/Sub メッセージを示しています。

{
  "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUSAwVPAihdeTFXKkFZdWhRDRlyfWB9bV4UUFZMV38OURoHaE5tdR_z4ILjS0NVbVkQBApEUHldXhkEa1RcfC-a0fmv1OzMV0AvOaCoyO9pe77r3NluZiM9XhJLLD5-Jz1FQV5AEkwsCERJUytDCypYEU4EISE-MD5FUw",
  "message": {
    "attributes": {
      "Action": "Advanced",
      "Location": "us-central1",
      "PhaseId": "stable",
      "ProjectNumber": "120123456789",
      "ReleaseId": "rollout-123",
      "Rollout": "projects/120123456789/locations/us-central1/deliveryPipelines/etest/releases/f2/rollouts/rollout-123",
      "RolloutId": "rollout-123",
      "TargetId": "prod"
    },
    "messageId": "7335813725293809",
    "publishTime": "2023-04-03T15:16:30.425Z"
  }
}

このメッセージで、PhaseId は、ロールアウトが進行したフェーズを識別します。

次のステップ