Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
非同期処理を使った応答性能改善 AWS Lambda
Search
Hyuga-Tsukui
August 03, 2022
Programming
390
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
510
エンジニアリングの本質を見極めて、何気ない行動の質を上げよう
hyugatsukui
0
200
Other Decks in Programming
See All in Programming
Webの地図
yosuke_furukawa
PRO
6
5k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
160
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
520
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
410
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
320
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
5.8k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
600
Agents on Rails - Rails at Scale 2026
irinanazarova
0
310
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
300
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Limits of Empathy - UXLibs8
cassininazir
1
690
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
Navigating Weather and Climate Data
rabernat
0
540
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
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ͳͲΛར༻͢Δ͜ͱͰଧ։Ͱ͖Δ͔͠Ε·ͤΜʢͬͨ͜ͱͳ͍Ͱ͢ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ