AWS 実践 06

SQSで重い仕事を後ろへ回す

APIは依頼を受け付けて素早く返し、Workerがキューから仕事を受け取ってSlack取得・DB登録を完了させる。

TL;DR
  1. APIはメッセージ投入後に202を返す。
  2. 成功した仕事だけを削除する。
  3. DLQで失敗を隔離して調査する。

01 全体像 — 受付と作業箱を分ける

ワークスペース同期は重いため、APIはSQSに依頼を入れ、WorkerがSlack APIとDBを扱う。

APIがSQSに依頼を入れWorkerがSlack APIとDBを処理する図
APIは依頼を受け、Workerが後で実処理を担う。
分離の価値: 利用者の待ち時間と、外部API・DBを伴う重い処理を切り離せる。

02 成功までの約束 — 受信、不可視、削除

SQSメッセージの可視性タイムアウトと成功後削除を示す図
処理中は一時的に隠し、成功した時だけ削除する。
状態Workerの動作
受信ロングポーリングで取得
処理成功DB登録後に削除
処理失敗削除せず、可視性タイムアウト後に再試行

03 失敗を隔離する — DLQ

失敗を繰り返したSQSメッセージがDLQへ隔離される図
DLQは失敗メッセージを調査・監視するための専用受信箱。

結論

  1. APIは受理、Workerは実行という役割分担にする。
  2. 成功後削除と可視性タイムアウトで失敗を再試行できる。
  3. DLQを監視し、失敗を見えないまま放置しない。