Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DynamoDB Streams を Lambda のトリガーで使う話
Search
hmatsu47
PRO
March 29, 2023
Technology
0
1.3k
DynamoDB Streams を Lambda のトリガーで使う話
JAWS-UG 名古屋 推しの AWS サービスを語る LT 会 2023/03/29
hmatsu47
PRO
March 29, 2023
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
6
RDS/Aurora アップデート 2025
hmatsu47
PRO
0
8
YAPC::Fukuoka 2025 現地ハイブリッド参加の旅
hmatsu47
PRO
0
5
今年の FESTA で初当日スタッフ+登壇してきました
hmatsu47
PRO
0
10
攻略!Aurora DSQL の OCC(楽観的同時実行制御)
hmatsu47
PRO
0
7
PostgreSQL でもできる!GraphRAG
hmatsu47
PRO
0
8
Aurora DSQL のトランザクション(スナップショット分離と OCC)
hmatsu47
PRO
0
14
いろんなところに居る Amazon Q(Developer)を使い分けてみた
hmatsu47
PRO
0
33
「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する
hmatsu47
PRO
0
10
Other Decks in Technology
See All in Technology
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1.3k
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
460
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
430
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
280
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
260
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
330
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
1
200
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
1.6k
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
210
チーリンについて
hirotomotaguchi
6
2k
ガバメントクラウド利用システムのライフサイクルについて
techniczna
0
190
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
720
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
100
How GitHub (no longer) Works
holman
316
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Rails Girls Zürich Keynote
gr2m
95
14k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
It's Worth the Effort
3n
187
29k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Git: the NoSQL Database
bkeepers
PRO
432
66k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Transcript
DynamoDB Streams を Lambda のトリガーで使う話 JAWS-UG 名古屋 推しの AWS サービスを語る
LT 会 2023/3/29 まつひさ(hmatsu47)
自己紹介…は時間省略のためスキップ 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 2
本日のネタは • RDS / Aurora 3
本日のネタは 4 • RDS / Aurora
本日のネタは • RDS / Aurora ではなく DynamoDB + Lambda •
データ登録用の DynamoDB テーブルでストリームを設定 • それをトリガーに Lambda を実行させる話 ◦ 元テーブルのデータを加工して別テーブルにコピーする ◦ Lambda で何らかの非同期 API を呼び出す ▪ 「中身が見えるキュー」としての使い方 5
どういうときに使う? • 違う設計の参照用テーブルを(複数)用意したいケース ◦ インデックスの数が多すぎる ▪ GSI は 20 個まで、LSI
は 5 個まで ◦ 後から LSI を追加したくなった ◦ 参照用テーブルに必要なパーティションキーまたはソートキーが 非正規形で、テーブルごとに値の組み合わせを変えたい ▪ 例)テーブル A では登録日+ユーザー ID、テーブル B では ユーザー ID + 商品 ID をパーティションキーにしたい 6
どういうときに使う? • 「中身が見えるキュー」として使いたいケース ◦ アプリケーションの実装者がキューの扱いに慣れていない ▪ キューの中身が見えないと不安 ◦ 中身を確認後「キューの一部だけ選んで Lambda
再発火」したい ▪ レコードを変更して保存すれば再びストリームに流れる ◦ ベストプラクティスは別にあるとしても、使う人に合わせた技術 (処理方法)選定があっても良いのでは? 7
使用例(1/2) • blastengine API でメール送信 ◦ 送信用テーブルに挿入・変更すると、 ◦ Streams をトリガーに
Lambda を起動 ▪ blastengine API にリクエストし、 ▪ 成功したら送信履歴テーブルに記録 • 送信用テーブルのレコードは削除 ▪ 失敗したら時間をあけてリトライ • レートリミット対策 ◦ バウンス処理部分の図示・説明は省略 8 ↑ ここ (ストリーム)
使用例(2/2) • Qiita 記事はこちら ◦ https://qiita.com/hmatsu47/items/e6e8fc9290eede7c8a55 ◦ API コールを失敗したレコードだけが送信用テーブルに残る ▪
必要があれば対象レコードの変更で Lambda 再発火 ◦ 送信履歴テーブルはバウンス(Webhook で取得)と突合する ▪ ここでは説明を省略 9
実行例(送信用テーブルに挿入) 10
実行例(送信用テーブル : API コール失敗レコードが残る) 11
実行例(送信履歴テーブル : API コール成功レコードのみ) 12
実行例(実際に届いたメール) 13
トリガーの設定例(1/3) 14 挿入・更新・削除レコードを 最大 100 件ずつまとめて Lambda に渡す 挿入・更新・削除レコードを まとめるために待機する秒数
トリガーの設定例(2/3) 15 Lambda 関数の実行がエラー になったときの再試行回数 (デフォルトは -1: 無制限) チェックするとエラー再試行時 にレコード行数を半分に分割
トリガーの設定例(3/3) 16 同一シャードから 同時に呼び出される Lambda は 1 つ 挿入・更新時のみ Lambdaを呼び出す
注意点(1/2) • 1 テーブルで複数ストリームが流れる ◦ シャード単位でストリームが分かれるので、挿入・更新・削除の 順序が完全に保証されるわけではない ▪ 1 シャード
複数パーティション・1 パーティション複数シャードの両方あり ◦ 一方で、ストリームごとの Lambda の処理時間が長すぎると処理 が詰まってしまう ▪ Step Functions を呼び出す形を検討 17
注意点(2/2) • デフォルトでは Lambda のトリガー再試行は無制限 ◦ 処理途中に捕捉し損ねたエラー・例外があると課金死の危険が ▪ エラー・例外の捕捉漏れが無いようにする ▪
再試行の回数を限定しておいたほうが良い 18
まとめ • DynamoDB の制約に引っ掛かる場合に使える ◦ インデックスが多すぎる or LSI を追加したいけどできない •
「中身が見えるキュー」として使える ◦ 中身を見た上で選択的に Lambda を再発火させることも • ストリームの順序と無限再試行に注意 ◦ 順序の保証が必要な場合は使わない ◦ 再試行の回数を限定して課金死を防ぐ 19