PubSub
Cloud Pub/Sub  |  Google Cloud
message の decode snippet
TypeScript & Cloud Functions で
message は @google-cloud/ 以下で公開して欲しい型 の PubSubMessage で受けるといい
pubsub trigger なら引数に
http trigger なら req.message
unknow で受けて
code:decode-message.js
const data: unknown = JSON.parse(
Buffer.from((message.data || '').toString(), 'base64').toString()
);
if (!validate(data)) return;
...
Push の audience
https://gyazo.com/77ab21042fe5c0e68c679ea8f5bcd630
対象 なんやねん、という感じがするが英語なら Audience (optional) である
CLI なら gcloud pubsub subscriptions create ... --push-auth-token-audience="{audience}" で指定できる
指定しないなら空文字かと思いきや、Push 先の URL が入る
これ知らない & ライブラリに verify を任せているとハマりそうだなー
https://gyazo.com/e68a5fe44b191cc21aa2397b0aa2a37f
Authorization ヘッダの検証
Authentication and authorization - Using push subscriptions  |  Cloud Pub/Sub Documentation  |  Google Cloud
JWT 検証ライブラリ
OpenIDコネクト  |  Google Identity Platform  |  Google Developers
Google 側の公開鍵
https://www.googleapis.com/oauth2/v1/certs
https://www.googleapis.com/oauth2/v2/certs
https://www.googleapis.com/oauth2/v3/certs
これらの TTL は?
1日だった気がするけど expires レスポンスヘッダを尊重するのがよい?
audience なんもいれないと URL になる
Push を一時的に止める
コンソールから pull に設定する
Pub/Sub で push エンドポイントに対するリクエストの送信を一時的に停止するには、サブスクリプションを pull に変更します。この変更が適用されるまで、数分かかることがあります。
push サブスクリプションの使用  |  Cloud Pub/Sub ドキュメント  |  Google Cloud
Cloud Functions の PubSub subscription
gcloud functions deploy --trigger-topic で設定すると subscription が自動で作られる
内部的には push 型
プロジェクトを横断しては設定できない
デフォルトは再送しない!!
バックグラウンド関数の再試行  |  Cloud Functions のドキュメント  |  Google Cloud
gcloud functions deploy --retry をつける
Pub/Sub の HTTP Push 先を Cloud Functions にする
もういらなくなった
JWT による検証
push サブスクリプションの使用  |  Cloud Pub/Sub ドキュメント  |  Google Cloud
https://www.googleapis.com/oauth2/v3/certs
Terraform で Logging → PubSub
? dead letter topic の subscription も有効期限設定していたら消えちゃう?
普通に動いたら消えそうだけど、エラーないまま subscription が消えていることがありそう
指標
Unacked messages
subscription/num_undelivered_messages
未処理のメッセージ数
Outstanding messages
subscription/num_outstanding_messages
Push したけど ack が返ってこないメッセージ数
#GoogleCloud #dev