Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Google Cloud Pub/Sub のデッドレター設定でハマったところ
Search
suna-big
September 12, 2024
Programming
0
150
Google Cloud Pub/Sub のデッドレター設定でハマったところ
Google Cloud Pub/Sub のデッドレター設定でハマったところがあったので紹介します。
suna-big
September 12, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
110
Flatt Security XSS Challenge 解答・解説
flatt_security
0
590
Zoneless Testing
rainerhahnekamp
0
150
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
230
情報漏洩させないための設計
kubotak
5
1.2k
php-conference-japan-2024
tasuku43
0
410
快速入門可觀測性
blueswen
0
480
良いユニットテストを書こう
mototakatsu
11
3.5k
Оптимизируем производительность блока Казначейство
lamodatech
0
870
Androidアプリの One Experience リリース
nein37
0
690
MCP with Cloudflare Workers
yusukebe
2
270
テストケースの名前はどうつけるべきか?
orgachem
PRO
1
180
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Documentation Writing (for coders)
carmenintech
67
4.5k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Speed Design
sergeychernyshev
25
720
RailsConf 2023
tenderlove
29
960
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
How to train your dragon (web standard)
notwaldorf
88
5.8k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Transcript
@suna_big Google Cloud Pub/Sub の デッドレター設定で ハマったところ 異なるタイプのサービスアカウントと権限、MaxExtensionについて
自己紹介 株式会社AI Shiftのバックエンドエンジニア 主にChatbot,Voicebotの開発をしています パブリッククラウドとソフトウェアデザイン設計に 強くなりたいです
Pub/Subとは? Pub/Subは、非同期でスケーラブルなメッセージングサービス メッセージの送信者 (パブリッシャー) と受信者 (サブスクライバ ー) を切り離す通信モデル パブリッシャーとサブスクライバーを分離し、独立して開発・運用 できるなどのメリットがある
Pub/Subとは? https://cloud.google.com/pubsub/docs/pubsub-basics?hl=ja#lifecycle_of_a_message_in
デッドレタートピックとは? Pub/Sub のデッドレター トピックとは、Pub/Sub サービスがメッセー ジの配信を試みたものの、サブスクライバーが確認応答できない場合 に、配信不能メッセージを転送するトピック Pub/Sub のデッドレター トピックに対してサブスクリプションを用意
し、GCSに保存することで後から問題のあるメッセージのトラブルシ ューティングと分析が容易になります
デッドレター トピック デッドレター サブスクリプシ ョン デッドレタートピックとは?
デッドレターに 入らない 起きたトラブル デッドレターに 流れたはずの メッセージが サブスクリプションから 流れ続ける 確認応答期限が 1分のはずが
60分かかる
デッドレターに 入らない 起きたトラブル デッドレターに 流れたはずの メッセージが サブスクリプションから 流れ続ける 確認応答期限が 1分のはずが
60分かかる
デッドレターに入らない デッドレタートピックを設定したのに、 なぜか流れない。。。 サブスクリプション デッドレター トピック デッドレター サブスクリプション
デッドレターに入らない Pub/Sub サブスクリプションの デッドレタリングの項目で 注意マークがついている部分の対応が必要だった しかし、Terraform上で どうやって表現したらよいかわからなかった 具体的には『このプロジェクトの Cloud Pub/Subサービスアカウント』とはなんだ?
複数のサービスアカウント 実はサービスアカウントには複数種類ある Google Cloud には、いくつかの異なるタイプのサービス アカウントがあります。 ユーザー管理のサービス アカウント: ユーザーが作成して管理するサービス アカウント。
多くの場合、これらのサービス アカウントはワークロードの ID として使用されます。 デフォルトのサービス アカウント: 特定の Google Cloud サービスを有効にするときに自動 的に作成される、ユーザー管理のサービス アカウント。これらのサービス アカウントは、 ユーザーの責任で管理する必要があります。 Google 管理のサービス アカウント: サービスがリソースにアクセスできるようにするため に、ユーザーに代わって Google が作成し、管理するサービス アカウント。 https://cloud.google.com/iam/docs/service-account-overview?hl=ja#types
複数のサービスアカウント 再度管理画面のチェックボックスをクリックして確認したら 確かにいた!(画像の赤枠) service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com これをTerraformに設定
デッドレターに 入らない 起きたトラブル デッドレターに 流れたはずの メッセージが サブスクリプションから 流れ続ける 確認応答期限が 1分のはずが
60分かかる
デッドレターに流れたメッセージが サブスクリプションから流れ続ける Pub/Sub のデッドレター トピックにメッセージは入るが、サブスクリ プションにメッセージが残り続けて、無限にサブスクライバーが動き 続けていた
デッドレターに流れたメッセージが サブスクリプションから流れ続ける デッドレター トピック メッセージが 流れ続ける
権限不足 実はパブリッシャーロールしか設定していなかった。(画像) デッドレタートピックにパブリッシュするのだから サブスクライバーロールなんて何に使うんだと 考えていた しかし、サブスクライバーのロールが サブスクリプションからメッセージを削除する 役割があった
Terraformで権限を設定 メッセージがデッドレターに流れ、 サブスクリプションからは 削除されるようになった! Terraformに設定
デッドレターに 入らない 起きたトラブル デッドレターに 流れたはずの メッセージが サブスクリプションから 流れ続ける 確認応答期限が 1分のはずが
60分かかる
わざと失敗するリクエストを送り確認応答期限(1分)※* 配信の最大試行回数(5回)後にデッ ドレターに送られるはずがいっこうに送られない。。 それどころからログを見ると、そもそも再試行が行われておらず、60分後にようやく1回目の 再試行が行われていた。。 確認応答期限が1分のはずが60分かかる
MaxExtension MaxExtensionという Subscriptionが各メッセージの確認応答期限を 自動的に延長する最大期間の設定が Pub/Subのサブスクライバー用の ライブラリに存在していた これのデフォルトが60分であり、自動的に 各メッセージの応答期限が延長されていた
MaxExtension MaxExtensionは0未満に設定すると確認応答期限の延長がされなくなるので、-1に することで確認応答期限が1分になったことを確認できた
まとめ ・サービスアカウントは複数種類ある、デッドレターの設定にはGoogle 管理のサ ービスアカウントを利用する必要がある ・デッドレターの設定で利用するサービスアカウントにはパブリッシャーだけでな く、サブスクライバーの権限も付与しよう ・MaxExtensionによって確認応答期限が自動で延長されてしまうから気をつけよ う
ご清聴ありがとうございました