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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hyuga-Tsukui
August 03, 2022
Programming
380
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
非同期処理を使った応答性能改善 AWS Lambda
AWS Lambda,SQS,Dynamodb を利用し、応答性能をお手軽に改善する一つの案の提示ができればと思っています。
Hyuga-Tsukui
August 03, 2022
More Decks by Hyuga-Tsukui
See All by Hyuga-Tsukui
Form実装基本を学び直してみた
hyugatsukui
1
490
エンジニアリングの本質を見極めて、何気ない行動の質を上げよう
hyugatsukui
0
190
Other Decks in Programming
See All in Programming
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
120
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
880
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
190
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
580
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
600
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Mobile First: as difficult as doing things right
swwweet
225
10k
Code Review Best Practice
trishagee
74
20k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
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ͳͲΛར༻͢Δ͜ͱͰଧ։Ͱ͖Δ͔͠Ε·ͤΜʢͬͨ͜ͱͳ͍Ͱ͢ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ