Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Amazon SNS からのメールをFirehoseとLambdaでまとめる / Deal many Amazon SNS mails with Firehose and Lambda
shimo
April 10, 2022
1
500
Amazon SNS からのメールをFirehoseとLambdaでまとめる / Deal many Amazon SNS mails with Firehose and Lambda
shimo
April 10, 2022
Tweet
Share
Featured
See All Featured
Fireside Chat
paigeccino
16
1.9k
Debugging Ruby Performance
tmm1
67
11k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
4 Signs Your Business is Dying
shpigford
171
20k
Scaling GitHub
holman
453
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
Principles of Awesome APIs and How to Build Them.
keavy
117
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
7
590
Bootstrapping a Software Product
garrettdimon
299
110k
Adopting Sorbet at Scale
ufuk
65
7.8k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
32
6.7k
Transcript
Amazon SNS からのメールを FirehoseとLambdaでまとめる 2022/4/11 JAWS-UG朝会 #32 LT @shimo_s3 1
もくじ 自己紹介 動機 やってみた① やってみた② まとめ 2
自己紹介 名前 : shimo : @shimo_s3 職業 : フリーランスのITエンジニア AWS:
認定12冠、Community Builder 好き : 自動化、データ分析、サーバレス 3
動機 「人の困り」 「自分が知らなかったので使ってみたい」 4 Amazon SNSでエラー通知受けてるけど、大量に来すぎ。まとめたい。。。 イベント@2022/1/26 2021 Amazon SNS
主要Update 「Amazon SNS が、Kinesis Data Firehose サブスクリプションを介してメッセージの アーカイブと分析のサポートを追加 (2021/01/12)」 @Twitter
やってみた① SNS→Firehose→S3 trigger→Lambda SNSを集約できる。ただし、間隔は最大15分(Firehoseの制限) ・大量のSNSをFirehoseで溜めて、 S3に置く(設定は簡単) ・置いた時点で、S3 triggerで Lambdaを呼ぶ ・Lambdaは、S3に置かれたオブジェクトを取り
出して、中のSNSのデータを整理する(Python) ・Lambdaがまとめたデータを別のSNSで送る 5
やってみた② EventBridgeでLambdaをCRONトリガする ①を拡張。時間単位で自由にスケジュールできる 1. EventBridgeがLambdaをトリガする 2. LambdaがEventBridgeのCRON設定を取得し、 直前の実行時間を逆算、どれが未処理かを把握 3. Lambdaが未処理のフォルダ内のデータを取得し、
まとめる※defaultフォルダ構成 yyyy/mm/dd/hh を活用 2 1 例: cron(0, 9-17/2, *, *, *, *) 【9-17時で2時間おき】の場合 now=13:00なら直前は11:00, now=9:00なら直前は17:00 3 6
SNSのデータをLambdaでまとめる jsonデータからPythonで抽出 7 data = { "Type": "Notification", "MessageId": "xxxx-xxxx",
"TopicArn": "arn:aws:sns:region:account-id:Topic", "Subject": "sub1", "Message": "This is the message 1!", "Timestamp": "2022-02-03T08:31:11.031Z", "UnsubscribeURL": "(略)" } json_obj = json.loads(data) json_obj["Timestamp"] json_obj["Message"] S3に保存されるデータの例 (SNS Publish 1回分) 任意の項目を抽出
集約して別SNSで送信した例 自由に文を入れている 2回分のTimestamp,Messageを抽出 unsubscribe文は1回 (別SNSの分) 8
まとめ 大量のSNSメールをまとめて取得することができた • FirehoseでバッファしてS3に置いて、Lambdaをトリガして整形し、別SNSでユーザに送信 • 時間単位で自由にCRON設定して、EventBridgeでLambdaを呼び出す ◦ 呼ばれたLambdaがEventBridegeからCRON scheduleを取得して、直前の呼び出し時 間、未処理分を逆算
◦ Firehose→S3のデフォルト フォルダ構成をそのまま活用 (※本スライドの内容は、コードも含めて Mediumに投稿済みです) • How to deal many Amazon SNS messages with Firehose and Lambda • Hourly Query Firehose S3 bucket with EventBridge and Lambda 9