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
290
Google Cloud Pub/Sub のデッドレター設定でハマったところ
Google Cloud Pub/Sub のデッドレター設定でハマったところがあったので紹介します。
suna-big
September 12, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Agentic Coding: The Future of Software Development with Agents
mitsuhiko
0
130
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
15k
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
0
150
Model Pollution
hschwentner
1
160
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
760
AIともっと楽するE2Eテスト
myohei
8
3k
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
12
7.1k
Goで作る、開発・CI環境
sin392
0
260
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.7k
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
260
テスト駆動Kaggle
isax1015
1
630
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
RailsConf 2023
tenderlove
30
1.1k
A designer walks into a library…
pauljervisheath
207
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
108
19k
For a Future-Friendly Web
brad_frost
179
9.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Six Lessons from altMBA
skipperchong
28
3.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Being A Developer After 40
akosma
90
590k
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によって確認応答期限が自動で延長されてしまうから気をつけよ う
ご清聴ありがとうございました