このドキュメントでは、push サブスクリプションを作成する方法について説明します。push サブスクリプションを作成するには、Google Cloud コンソール、Google Cloud CLI、クライアント ライブラリ、または Pub/Sub API を使用できます。
準備
- サブスクリプションについて確認する。
- push サブスクリプションの仕組みを理解する。
必要なロールと権限
サブスクリプションを作成するには、プロジェクト レベルでアクセス制御を構成する必要があります。このセクションで後述するように、サブスクリプションとトピックが異なるプロジェクトにある場合は、リソースレベルの権限も必要です。
push サブスクリプションの作成に必要な権限を取得するには、管理者にプロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor
)IAM ロールを付与するよう依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。
この事前定義ロールには、push サブスクリプションの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
push サブスクリプションを作成するには、次の権限が必要です。
-
サブスクリプションを作成する:
pubsub.subscriptions.create
-
サブスクリプションを削除する:
pubsub.subscriptions.delete
-
サブスクリプションを取得する:
pubsub.subscriptions.get
-
サブスクリプションを一覧表示する:
pubsub.subscriptions.list
-
サブスクリプションを更新する:
pubsub.subscriptions.update
-
サブスクリプションをトピックに接続する:
pubsub.topics.attachSubscription
-
サブスクリプションの IAM ポリシーを取得する:
pubsub.subscriptions.getIamPolicy
-
サブスクリプションの IAM ポリシーを構成する:
pubsub.subscriptions.setIamPolicy
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
別のプロジェクトのトピックに関連付けられているプロジェクトで push サブスクリプションを作成する必要がある場合は、トピック管理者にトピックに対する Pub/Sub 編集者の (roles/pubsub.editor)
IAM ロールも付与するよう依頼してください。
push サブスクリプション プロパティ
push サブスクリプションを構成するときに、次のプロパティを指定できます。
共通の特徴
すべてのサブスクリプションで設定できる共通のサブスクリプション プロパティについて学習します。
エンドポイント
エンドポイント URL(必須)。 一般公開されている HTTPS アドレス。push エンドポイントのサーバーには、認証局が署名した有効な SSL 証明書が必要です。Pub/Sub サービスでは、Pub/Sub サービスがメッセージを格納するのと同じ Google Cloud リージョンから push エンドポイントにメッセージを配信します。Pub/Sub サービスでは、同じ Google Cloud リージョンからベストエフォート方式でメッセージを配信します。
Pub/Sub では、push サブスクリプションの URL ドメインの所有権の証明が不要になりました。ドメインが Pub/Sub からの予期しない POST リクエストを受信した場合は、不正行為を報告できます。
認証
認証を有効にする。有効にすると、Pub/Sub から push エンドポイントに配信されるメッセージに認証ヘッダーが含まれ、エンドポイントでリクエストを認証できます。サブスクリプションと同じプロジェクトでホストされる App Engine Standard エンドポイントと Cloud Functions エンドポイントでは、自動認証と自動承認のメカニズムを使用できます。
認証済み push サブスクリプションの認証構成は、ユーザーが管理するサービス アカウントと、create、patch または ModifyPushConfig 呼び出しで指定されるオーディエンス パラメータで構成されます。また、次のセクションで説明するように、サービス エージェントに特定のロールを付与する必要があります。
ユーザーが管理するサービス アカウント(必須)。push サブスクリプションに関連付けられているサービス アカウント。このアカウントは、生成された JSON Web Token(JWT)の
email
クレームとして使用されます。サービス アカウントの要件は次のとおりです。このサービス アカウントは、プッシュ サブスクリプションと同じプロジェクトに存在する必要があります。
push サブスクリプションを作成または変更するプリンシパルには、サービス アカウントに対する
iam.serviceAccounts.actAs
権限が必要です。プロジェクト、フォルダ、または組織に対してこの権限を付与することで、呼び出し元が複数のサービス アカウントの権限を借用することを許可するか、サービス アカウントでこの権限を持つロールを付与して、呼び出し元がこのサービス アカウントのみの権限を借用するできるようにすることができます。
オーディエンス。Webhook が特定のトークンの対象オーディエンスの検証に使用する、大文字と小文字が区別されない単一の文字列。
サービス エージェント(必須)。
Pub/Sub は、
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
形式のサービス アカウントを自動的に作成します。このサービス エージェントに、Pub/Sub が認証された push リクエスト用の JWT トークンを作成できるように、
iam.serviceAccounts.getOpenIdToken
権限(roles/iam.serviceAccountTokenCreator
ロールに含まれる)が付与されている必要があります。
ペイロードのラップ解除
[ペイロードのラップ解除を有効にする] オプションを使用すると、メッセージ データを除くすべてのメッセージ メタデータが Pub/Sub メッセージから削除されます。ペイロードのアンラッピングでは、メッセージ データは HTTP 本文として直接配信されます。
- メタデータを書き込む。以前に削除したメッセージ メタデータをリクエスト ヘッダーに追加します。
VPC Service Controls
VPC Service Controls で保護されているプロジェクトの場合、push サブスクリプションには次の制限があります。
新しい push サブスクリプションを作成できるのは、push エンドポイントがデフォルトの
run.app
URL または Workflows 実行で Cloud Run サービスに設定されている場合のみです。カスタム ドメインが機能しない。push エンドポイントが Workflows 実行に設定されている Workflows の宛先に Eventarc を介してイベントをルーティングする場合、新しい push サブスクリプションは Eventarc を介してのみ作成できます。
既存の push サブスクリプションを更新することはできません。これらの push サブスクリプションは引き続き機能しますが、VPC Service Controls による保護は受けられません。
push サブスクリプションを作成する
次のサンプルは、指定されたデフォルト設定を使用して、push 配信でサブスクリプションを作成する方法を示しています。
次の例に示すように、デフォルトでは、push 構成を明示的に設定しない限りサブスクリプションでは pull 配信を使用します。
Console
push サブスクリプションを作成する際の手順は、次のとおりです。
- Google Cloud コンソールで、[サブスクリプション] ページに移動します。
- [サブスクリプションを作成] をクリックします。
- [サブスクリプション ID] フィールドに名前を入力します。
サブスクリプションの指定方法については、トピックまたはサブスクリプションの指定方法のガイドラインをご覧ください。
- プルダウン メニューからトピックを選択するか、作成します。サブスクリプションがトピックからメッセージを受信します。
- [配信タイプ] で [push] を選択します。
- エンドポイントの URL を指定します。
- 他のすべてのデフォルト値は保持されます。
- [作成] をクリックします。
[トピック] セクションからサブスクリプションを作成することもできます。このショートカットは、トピックとサブスクリプションの関連付けに使用できます。
- Google Cloud コンソール の トピック ページに移動します。
- サブスクリプションを作成するトピックの横の more_vert をクリックします。
- コンテキスト メニューから [サブスクリプションを作成] を選択します。
- [サブスクリプション ID] を入力します。
サブスクリプションの指定方法については、トピックまたはサブスクリプションの指定方法のガイドラインをご覧ください。
- [配信タイプ] で [push] を選択します。
- エンドポイントの URL を指定します。
- 他のすべてのデフォルト値は保持されます。
- [作成] をクリックします。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
push サブスクリプションを作成するには、
gcloud pubsub subscriptions create
コマンドを実行します。gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --push-endpoint=PUSH_ENDPOINT
以下を置き換えます。
SUBSCRIPTION_ID
: 新しい push サブスクリプションの名前または ID。TOPIC_ID
: トピックの名前または ID。- PUSH_ENDPOINT: このサブスクリプションのエンドポイントとして使用する URL。例:
https://myproject.appspot.com/myhandler
REST
push サブスクリプションを作成するには、projects.subscriptions.create
メソッドを使用します。
リクエスト:
リクエストは、Authorization
ヘッダー内のアクセス トークンにより認証を受ける必要があります。現在のアプリケーションのデフォルト認証情報のアクセス トークンを取得するには、gcloud auth application-default print-access-token を使用します。
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer ACCESS_TOKEN
リクエスト本文:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", // Only needed if you are using push delivery "pushConfig": { "pushEndpoint": "PUSH_ENDPOINT" } }
ここで
https://myproject.appspot.com/myhandler
対応:
{ "name": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "pushConfig": { "pushEndpoint": "https://PROJECT_ID.appspot.com/myhandler", "attributes": { "x-goog-version": "v1" } }, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" } }
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API のリファレンス ドキュメントをご覧ください。
C#
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある C# 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Go
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Go 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Java 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Node.js
PHP
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある PHP 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Python 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Ruby
このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Ruby 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次のステップ
gcloud
コマンドを使用して、サブスクリプションを作成または変更する。- REST API を使用してサブスクリプションを作成または変更する。