Pub/Sub 通知の構成

Docker リポジトリの変更について、Pub/Sub から通知を受け取ることができます。

Pub/Sub は、リポジトリに関するメッセージをトピックという名前付きリソースに公開します。Pub/Sub トピックに登録しているアプリケーションは、これらのメッセージを受け取り、リポジトリの状態が変更されたときに通知を受け取ります。

Artifact Registry では次の変更に関するメッセージを公開します。

  • 画像アップロード
  • 新しいタグが画像に追加された
  • イメージの削除

また、通知を公開またはサブスクライブするためのロールと権限を構成することもできます。

新しい脆弱性スキャンの結果など、アクティビティの Container Analysis 通知の構成については、Container Analysis のドキュメントをご覧ください。

概要

Artifact Registry は、gcr という名前のトピック内のリポジトリに対する変更に関するメッセージをパブリッシュします。

通知を受け取るには、次の操作を行う必要があります。

  1. Artifact Registry を使用して、プロジェクトで gcr という名前のトピックを作成します。
  2. トピックのサブスクリプションを作成します。
  3. リポジトリの変更に関するメッセージを受信するようにサブスクライバー アプリケーションを設定します。
  4. 必要に応じて、権限を構成して、トピックとサブスクリプションへのアクセスを制御します。

Artifact Registry トピックを作成する

Artifact Registry は gcr という名前のトピックにメッセージを公開します。これは、Container Registry がメッセージの公開に使用するのと同じトピックです。

Artifact Registry が実行されている各プロジェクトで、gcr トピックがまだ存在しない場合は、作成する必要があります。既存のトピックのリストを表示するには、Google Cloud Console の Pub/Sub トピックページを確認するか、次のコマンドを実行します。

gcloud pubsub topics list

gcr トピックを作成するには:

Console

  1. Cloud Console の Pub/Sub トピックページに移動します。

    Pub/Sub トピックページに移動

  2. [トピックを作成] をクリックします。

  3. トピック ID gcr を入力します。

  4. [作成] をクリックします。

gcloud

次のコマンドを実行します。

gcloud pubsub topics create projects/PROJECT/topics/gcr

ここで PROJECT は、Google Cloud プロジェクト ID です。

gcloud pubsub topics コマンドについて詳しくは、topics ドキュメントをご覧ください。

gcr トピックの作成が完了したため、トピックへのサブスクリプションを作成できます。

サブスクリプションの作成

リポジトリの変更に関するトピックを作成したら、push 配信または pull 配信を使用するトピックに対するサブスクリプションを構成できます。CI/CD システムでは保存されたアーティファクトに対して多数の変更が生じる可能性があり、大量のメッセージに対して pull 配信の方が効率的であるため、pull 配信を使用することをおすすめします。

pull 配信でサブスクリプションを作成するには:

Console

  1. Cloud Console の Pub/Sub トピックページに移動します。

    Pub/Sub トピックページに移動

  2. プロジェクトのトピックをクリックします。

  3. [サブスクリプションを作成] をクリックします。

  4. サブスクリプション名を入力します。

    projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
    

    [配信タイプ] は [Pull] に設定されたままにします。

  5. [作成] をクリックします。

gcloud

次のコマンドを実行します。

gcloud pubsub subscriptions create SUBSCRIPTION-NAME --topic=gcr

SUBSCRIPTION-NAME はサブスクリプションの名前に置き換えます。

gcloud pubsub subscriptions コマンドについて詳しくは、subscriptions ドキュメントをご覧ください。

gcr トピックへのサブスクリプションが作成されました。次のステップでは、リポジトリ内の変更をトリガーする ID の権限を構成します。

サブスクライバー アプリケーションの構成

トピックを作成してトピックへのサブスクリプションを作成したら、サブスクライバー アプリケーション(リポジトリの変更に関するメッセージを受信するアプリケーション)を設定できます。サブスクライバー アプリケーションは、イベント通知、システム ロギング、アプリケーション間の通信などのタスクを補完します。

イメージを push または削除すると、次の手順が実行されます。

  1. Artifact Registry サービス アカウントは、gcr トピックに変更を公開します。サービス アカウントは service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com であり、PROJECT-NUMBER は Google Cloud のプロジェクト番号です。Artifact Registry サービス アカウントには、トピックの変更を公開できるように pubsub.topics.publish 権限がデフォルトで付与されています。
  2. Pub/Sub が、トピックからサブスクリプションにメッセージを転送します。
  3. サブスクライバー アプリケーションがメッセージをリクエストすると、サブスクリプションから新しいメッセージを pull します。

    サブスクライバーに代わってメッセージを pull する ID には、サブスクリプションにアクセスするための権限が付与されている必要があります。Pub/Sub サブスクライバーのロールを使用して、この権限を付与できます。

pull 配信でサブスクリプションからメッセージを受信するようにサブスクライバーを設定することについて詳しくは、pull を使用してメッセージを受信するをご覧ください。

権限の構成

Pub/Sub 権限を使用して、トピックとサブスクリプションへのアクセスを制御できます。

Pub/Sub 権限、トピックとサブスクリプションへのアクセス権の付与について詳しくは、Pub/Sub のアクセス制御ドキュメントをご覧ください。

通知の例

Pub/Sub は JSON 形式の文字列として通知を送信します。以下の例を確認し、Pub/Sub から Artifact Registry 通知を受信した場合に想定される内容を確認します。

イメージが Container Registry に push された際の通知ペイロードの例を次に示します。

{
  "action":"INSERT",
  "digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}

新しいイメージタグが Artifact Registry に push された際の通知ペイロードの例を次に示します。

{
  "action":"INSERT",
  "digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
  "tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

メッセージは、digest または tag キーを使用して関連イメージを識別します。

Artifact Registry からイメージタグが削除された際の通知ペイロードの例を次に示します。

{
  "action":"DELETE",
  "tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

メッセージには、action キーの値として DELETE または INSERT が含まれている場合があります。

次のステップ