タイトルそのまま
以下のように Cloud Functions をデプロイすることで、トピックへメッセージが来るたびに function を起動してくれる。
$ gcloud functions deploy --trigger-topic=TOPIC_NAME
裏では gcf-{function}-{topic}
という設定のサブスクプションが作られる。挙動的にも PubSub のコンソール上でも Push 型のサブスクプションで、Push は成功するまで retry してくれるイメージでいたけど、デフォルトはしてくれないのだった。
function には2種類あり、HTTP リクエストを受け付ける HTTP 関数と、それ以外の PubSub メッセージや Cloud Storage イベントなどを受け取るバックグラウンド関数がある。
push サブスクリプションの使用 | Cloud Pub/Sub ドキュメント | Google Cloud
このページを読んで、Push 型は成功の応答をしないと再送してくれると思い込んでいたけど、HTTP 関数に対する言及でしかない。PubSub メッセージを受けるのはバックグラウンド関数で、こちらのデフォルトは再送なし! 上記の画像のように、Function のコンソールでチェックを入れるか、デプロイ時に --retry
フラグを渡しておく必要がある。
ちゃんと読めばここに書いてある。
バックグラウンド関数の再試行 | Cloud Functions のドキュメント | Google Cloud
メッセージのタイムスタンプを見てメッセージを捨てたり、Error を throw するのではなく return するサンプルが載っててためになる(でも return したからといって Error Reporting へ通知されたりはしない)。