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
93
Google Cloud Pub/Sub のデッドレター設定でハマったところ
Google Cloud Pub/Sub のデッドレター設定でハマったところがあったので紹介します。
suna-big
September 12, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
570
大規模サイトリビルドの現場から:成功と失敗のリアルな教訓 / Site Rebuild,Real Lessons Learned from Successes and Failures_JJUG Fall 2024
techtekt
0
160
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
490
as(型アサーション)を書く前にできること
marokanatani
10
2.9k
Leveling Up Developer Tooling for the Modern Rails & Hotwire Era @ Ruby Türkiye, November 2024
marcoroth
0
130
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
1k
[KR] Open-Source Ecosystems
skydoves
0
100
@nifty天気予報のフロントエンドを 実装するまで - NIFTY Tech Talk #22
niftycorp
PRO
0
110
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
5
4.4k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
110
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
160
Missing parts when designing and implementing Android UI
ericksli
0
330
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Git: the NoSQL Database
bkeepers
PRO
427
64k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Building a Scalable Design System with Sketch
lauravandoore
459
33k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
How GitHub (no longer) Works
holman
310
140k
Designing Experiences People Love
moore
138
23k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
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によって確認応答期限が自動で延長されてしまうから気をつけよ う
ご清聴ありがとうございました