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
非同期処理を使った応答性能改善 AWS Lambda
Search
Hyuga-Tsukui
August 03, 2022
Programming
1
360
非同期処理を使った応答性能改善 AWS Lambda
AWS Lambda,SQS,Dynamodb を利用し、応答性能をお手軽に改善する一つの案の提示ができればと思っています。
Hyuga-Tsukui
August 03, 2022
Tweet
Share
More Decks by Hyuga-Tsukui
See All by Hyuga-Tsukui
Form実装基本を学び直してみた
hyugatsukui
1
480
エンジニアリングの本質を見極めて、何気ない行動の質を上げよう
hyugatsukui
0
190
Other Decks in Programming
See All in Programming
JetBrainsのAI機能の紹介 #jjug
yusuke
0
190
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
180
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
720
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
230
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
1.7k
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
260
新しいモバイルアプリ勉強会(仮)について
uetyo
1
250
Claude Code と OpenAI o3 で メタデータ情報を作る
laket
0
110
[DevinMeetupTokyo2025] コード書かせないDevinの使い方
takumiyoshikawa
2
270
Understanding Kotlin Multiplatform
l2hyunwoo
0
250
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
180
AIのメモリー
watany
13
1.3k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
73
5k
The Cost Of JavaScript in 2023
addyosmani
51
8.8k
Balancing Empowerment & Direction
lara
1
530
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How to Ace a Technical Interview
jacobian
278
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Rails Girls Zürich Keynote
gr2m
95
14k
YesSQL, Process and Tooling at Scale
rocio
173
14k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Transcript
ඇಉظॲཧΛͬͨԠੑೳ վળ ServerlessLTॳ৺ऀ͚ LTେձ #24
ࣗݾհ • Hyuga Tsukuiʢ@hy_twenʣ • γΣϧϑΟʔʢגʣͰݐઃۀք͚SaaSΛ։ൃ͍ͯ͠·͢ • ࣾ֎LTॳઓͰ͢👋
ࠓ͍͑ͨ͜ͱ • ৗ͔Βݟ͑Δඇಉظॲཧͱʁ • ඇಉظॲཧͷ͍ॴ • ߴίετͳॲཧͷऔΓѻ͍ͱγϯϓϧͳղܾࡦͷհ
ඇಉظॲཧͱ • ޙͰ݁ՌΛฦ͢͜ͱΛଋ͠ɺҰॲཧΛྃͤ͞Δɻ݁Ռ͕༻ҙͰ ͖ͨΒݺͼग़͠ݩʹ͋ΒͨΊͯ݁ՌΛ௨͢ΔΈͷ͜ͱʢࢀߟ https://www.htmlhi fi ve.com ඇಉظॲཧͱPromiseΛഎܠ͔Βཧղ͠Α͏ʣ
͋Δͷ͓ങ͍Λߟ͑ͯΈ·͢ • εʔύʔซઃͷༀہͰɺॲํᝦ͔ΒༀΛ࡞ͬͯΒ͏ʢλεΫAʣ • ͖ΐ͏ͷ൩͝Μͷ৯ࡐΛങ͏ʢλεΫBʣ
ಉظॲཧVer. ॲํᝦड ௐࡎʢNJOʣ ػʢNJOʣ ௐࡎྃ ങ͍ NJO
ඇಉظॲཧVer. ॲํᝦड ௐࡎʢNJOʣ ങ͍ NJO ௐࡎྃ ड൪߸ൃߦ
྆ऀͷҧ͍ • ಉظVer.ௐࡎ͕ऴΘͬͨΒങ͍Λ։࢝͢Δ • ඇಉظVer.ௐࡎதʹങ͍Λ։࢝͢Δ
ಉظॲཧVer. ॲํᝦड ௐࡎʢNJOʣ ػʢNJOʣ ௐࡎྃ ങ͍ NJO Ұ࿈ͷॲཧ͕ྃ͢Δ·ͰNJO͔͔Δ
ඇಉظॲཧVer. ॲํᝦड ௐࡎʢNJOʣ ങ͍ NJO ௐࡎྃ ड൪߸ൃߦ Ұ࿈ͷॲཧ͕ྃ͢Δ·ͰNJO͔͔Δ
ௐࡎΛຊʹͭඞཁ͕͋Δ͔ʁ
ड൪߸(PromiseʣͳͲͰඇಉظతʹ ॲཧͰ͖Δ
ඇಉظॲཧΛݕ౼͢ΔMotivation • λεΫͷྃΛͭඞཁ͕ແ͍ͱ͖ • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δͷ͓ങ͍ʣͷதͰɺϘτϧωοΫͱͳ ΔΑ͏ͳλεΫ͕͋Δ࣌
γεςϜͷ
ϦΞϧͳͷߟ͑·ͨ͠ʂ
͋ΔIOTػثͷར༻։࢝αʔϏεΛߟ͑Δ • ػثࡏݿཧDBͰͲͷސ٬͕ར༻͢Δ͔ཧ͍ͯ͠Δ • ػث͕ωοτϫʔΫΛར༻͢ΔʹɺػثఏڙϕϯμͷAPIϓϩϏ δϣχϯάਃΛ͢Δඞཁ͕͋Δ • ϓϩϏδϣχϯάਃྃʹΛཁ͢Δ • ࣦഊ͢ΔՄೳੑ͋Δ
ུਤ
λεΫΛ͚ͯΈΔͱ • ػثࡏݿʹؔ͢ΔॲཧͱɺϓϩϏδϣχϯάΛ͢Δॲཧ͚Εͦ͏ • ϓϩϏδϣχϯάॲཧ͕͔͔࣌ؒΔͷͰɺλεΫΛ͚ͳ͍ͱɺԠ ੑ͕͜͜ʹӨڹΛड͚ͯѱ͘ͳΔ • ࣦഊͨ͠ͱ͖ʹϓϩϏδϣχϯά͔Β͚ͩΓͤͦ͏
ඇಉظॲཧΛݕ౼͢ΔMotivation • λεΫͷྃΛͭඞཁ͕ແ͍ͱ͖ • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δͷ͓ങ͍ʣͷதͰɺϘτϧωοΫͱͳ ΔΑ͏ͳλεΫ͕͋Δ࣌
ࠓճखܰʹඇಉظԽ͢Δͷ͜͜ʂ
͍͟ɺServerlessʂ
࠷ऴߏਤ
࠷ऴߏਤ ͜͜
AWS SimpleQueueService(SQS) • AWS͕ఏڙ͢ΔServerlessͳϝοηʔδΩϡʔΠϯάαʔϏεͰ༷ʑ ͳServerlessͰߏ͞ΕͨΞϓϦΛ౷߹Ͱ͖Δ • Lambdaͱͷ࿈ܞ͕༰қ • ϦτϥΠɺࣦഊͨ͠ϝοηʔδͷอଘ͕Մೳ •
ඇৗʹߴʢඪ४ΩϡʔͳΒࣄ্࣮ແ੍ݶ
AWS SimpleQueueService(SQS) ͜Μͳײ͡ʹɺൺֱతॊೈͳϝοηʔδΛऔΓѻ͑·͢ɻ(256kb·ͰͷςΩετ) ྫͱͯ͠ɺࠓճͷϓϩϏδϣχϯάAPIʹඞཁͦ͏ͳΛઃఆͯ͠Έ·͠ΐ͏ɻ { “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”, “macAddress”: “00-00-5E-10-00-00-00-00“ //
document༻ʹ͋Δར༻ՄೳͳͰ͢ }
AWS SimpleQueueService(SQS) ·ͨࠓճཁ݅ͱͯ͠ɺ֎෦APIͷࣦഊՄೳੑ͕͋ΔͷͰɺDeadLetterQueueͷઃఆΦεεϝͰ͢ɻ Πϝʔδͱͯ͠ɺࣦഊͨ͠ϝοηʔδΛࣗಈͰҰ࣌తʹผͷQueue֨ೲ͠ɺܾΊΒΕͨϧʔϧͰ࠶PushʢReDriveʣ͠·͢ɻ ·ͨࢦఆͷճ࣮ߦͯ͠ফԽͰ͖ͳ͔ͬͨ߹ɺDeadLetterQueueอଘ͞Εɺࢦఆظؒܦաޙআ͞Ε·͢ɻ
࠷ऴߏਤ ͜͜
AWS Lambda • AWS͕ఏڙ͢ΔServerlessͷίϯϐϡʔςΟϯάϦιʔε • ๛ͳରԠݴޠɺϥϯλΠϜΛ࣋ͭͷͰϏδωεϩδοΫͷ࣮ίε τ͕ • ࣮ߦ࣌ؒͰͷ՝ۚͷͨΊɺॲཧʹΑͬͯίετ •
ߴεέʔϥϏϦςΟ • ࠓճͰ͍͏ͱSQSͱͷ૬ੑ͕ൈ܈ͰɺࣗલͰϙʔϦϯάج൫Λ࣋ͭ
AWS Lambda Lambdaଟ͘ͷىಈτϦΨʔΠϕϯτΛ͍࣋ͬͯΔͷͰɺSQSʹϝοηʔδ͕PUT͞ΕͨͷΛܖػʹɺىಈ͢ΔͳͲ͕ઃఆҰͭͰߦ͑ ·͢ɻ
ࠓճߏͷҙ ɾSQSʹඪ४ΩϡʔΛࢦఆͨ͠߹ɺat least once ͷ༷ʹΑΓɺಉ͡ϝοηʔδ͕ෳPULL͞ΕΔՄೳੑ͕͋Γ·͢ɻ { “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”, “macAddress”: “00-00-5E-10-00-00-00-00“
// document༻ʹ͋Δར༻ՄೳͳͰ͢ } 👆͜ͷϝοηʔδ͕ೋճPULL͞ΕΔͷͰɺಉ͡macAddressΛॲཧ͢ΔLambda͕ෳճ࣮ߦ͞ΕΔՄೳੑ͕͋Δɻ
ࠓճߏͷҙ ɾͦͷͨΊɺႈੑ֬อ·ͨɺϩοΫػߏΛඞ࣮ͣ͢Δඞཁ͕͋Γ·͢ɻ EX. DynamoDBΛར༻ָͨ͠؍Lockʢٙࣅίʔυʣ status = dynamoDB.GetItem(eventId=1) if (status ===
0) { api.call(macAddress); }else { return }
͋Δ͔͠Εͳ͍ٙ
͋Δ͔͠Εͳ͍ٙ Q1. LambdaࣗಈϦτϥΠ͋Δ͡ΌΜɺͳΜͰSQS? A1. ͦͷͱ͓ΓͰ͕͢ɺ࠷ऴతʹ࣮ߦͰ͖ͳ͔ͬͨevent͕SQSͷ΄͏͕͍͍ͨ͢ΊͰ͢ɻLambdaͰࣦഊͨ͠eventΛ DeadLetterQueueʹஷΊ͓ͯ͘ߏ͋ΔΑ͏Ͱ͢ɻ Q2. ͳΜͰDynamoDBʁRDSͰବͳͷ͔ A1. LambdaͱRDSͷ૬ੑྑ͘ͳ͍ͱ͢Δͷ͕ҰൠతͰ͢ɻཧ༝ɺRDSࣄ্࣮εέʔϧΞοϓͰͷରԠ͔͠Ͱ͖ͳ͍ͨΊݶք͕ۙ
͍Ͱ͕͢ɺLambdaແ੍ݶͷεέʔϧΞτͳͷͰɺ͜͜ͰRDS͕ϘτϧωοΫʹͳΔͨΊͰ͢ɻ ίωΫγϣϯϓʔϧͷAmazon RDS ProxyͳͲΛར༻͢Δ͜ͱͰଧ։Ͱ͖Δ͔͠Ε·ͤΜʢͬͨ͜ͱͳ͍Ͱ͢ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ