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
今こそはじめよう! 実践!サーバレスアーキテクチャ/serverless-sendai
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
堀家隆宏
July 29, 2016
Programming
1.5k
4
Share
今こそはじめよう! 実践!サーバレスアーキテクチャ/serverless-sendai
堀家隆宏
July 29, 2016
More Decks by 堀家隆宏
See All by 堀家隆宏
オープンソースコミュニティで加速するサーバーレスの未来/serverless will be
horike37
4
770
auth0-meetup.pdf
horike37
1
290
What’s happening with Serverless Framework, and it lives with AWS SAM.
horike37
0
130
What is Serverless. Why is Serverless.
horike37
1
120
aws-with-functional-saas
horike37
2
220
serverless-with-oss
horike37
0
160
slsconftokyo
horike37
0
5.8k
slsconfworkshop
horike37
3
3k
Test Driven Development For Lambda
horike37
2
400
Other Decks in Programming
See All in Programming
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
120
AIと共に生きる技術選定 2026
sgash708
0
120
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
110
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
100
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
370
個人的に嬉しかったpnpmの新機能・3選
matsuo_atsushi
0
120
의존성 주입과 모듈화
fornewid
0
160
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
1.4k
実践CRDT
tamadeveloper
0
610
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
290
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
170
Don't Prompt Harder, Structure Better
kitasuke
0
800
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
Skip the Path - Find Your Career Trail
mkilby
1
110
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
A Soul's Torment
seathinner
6
2.7k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
4 Signs Your Business is Dying
shpigford
187
22k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
360
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
New Earth Scene 8
popppiees
3
2.2k
Transcript
ࠓͦ͜͡ΊΑ͏ʂ ࣮ફʂαʔόϨεΞʔΩςΫνϟ @Amimoto_Ami amimoto-ami.com
ࣗݾհ • ໊લɿງՈོ • ॴଐɿAMIMOTO TEAM • Githubɿhttps://github.com/horike37 • Qiitaɿhttp://qiita.com/horike37
• ಘҙͳ͜ͱɿAWS, JavaScript, WordPress
࠷ۙ։ൃͨ͠ αʔόϨεͳ OSSϓϩμΫτ
https://github.com/horike37/simple-api-gateway Simple API Gateway • API GatewayͷઃఆΛ؆୯ʹ͢Δͱ͍ ͏ίϯηϓτ • ରίϚϯυʹΑΔઃఆͷखҾ
• ϚοϐϯάςϯϓϨʔτCORSͷઃ ఆΛҙࣝ͠ͳͯ͘ྑ͍
https://github.com/horike37/serverless-command-line-event-args • Serverless FrameworkͷϓϥάΠϯ • Serverless FrameworkʹΑΔ։ൃͷޮ Խ͕Մೳʹ • Lambdaʹ͢ҾΛίϚϯυϥΠϯ
Ͱ͢͜ͱ͕͖ͰΔ Serverless CommandLine Event Args
ຊ
αʔόϨε ΞʔΩςΫνϟ ͱ
• ΫϥυͰఏڙ͞ΕΔαʔϏεར༻Λલఏʹߏங͢ΔαʔϏεٴͼΞϓϦέʔγϣϯ • ԾϚγϯΛΘͣʹΞʔΩςΫνϟΛߏ EC2
Կ͕خ͍͠ͷ͔
ຊདྷΓ͔ͨͬͨίʔυΛॻ͘͜ͱʹ ूதग़དྷΔڥΛ࡞Δ
• webαʔϏεΛ։ൃӡ༻ͯ͠ϏδωεΛޭͤ͞Δ͜ͱ • ͦͷͨΊʹΞϓϦέʔγϣϯͷίʔυΛॻ͘͜ͱ ຊདྷΓ͔ͨͬͨ͜ͱ ͔͠͠ݱ࣮ʹίʔυΛॻ͚ͩ͘Ͱແ͍
• OSωοτϫʔΫͷઃఆɾཧ • αʔόͷߏஙɾϥϯλΠϜڥͷηοτΞοϓ • ϛυϧΣΞΞϓϦέʔγϣϯͷηΩϡϦςΟΞοϓσʔτ • Πϯϑϥͷϝϯςφϯε • ΞΫηεϢʔβͷ৳ͼʹର͢ΔαʔόߏͷมߋɾΩϟύγςΟ
ཧ • ݸਓใͷཧ αʔό͕ଘࡏ͢Δ߹ʹൃੜ͢ΔλεΫ
αʔό͕ଘࡏ͢ΔwebαʔϏεͷ্ཱͪ͛ॳ ίʔυͷ࣮ αʔόϝϯςφϯε αʔόͷߏங ΩϟύγςΟϓϥϯχϯά අͤΔ࣌ؒͷׂ߹ • ଟ͘ͷ࣌ؒΛίʔυͷ࣮ʹඅͤΔ
αʔό͕ଘࡏ͢ΔwebαʔϏε͕͢Δͱ αʔόͷࢹ αʔόϝϯςφϯε ίʔυͷ࣮ ΩϟύγςΟ ϓϥϯχϯά අͤΔ࣌ؒͷׂ߹ • ૿͑ߦ͘ΞΫηεϢʔβʹର͢Δ αʔόͷߏมߋɾΩϟύγςΟϓϥ
ϯχϯά • ϞϊϦγοΫͳγεςϜʹର͢Δϝϯ ςφϯείετ • γϏΞͳݸਓใͷཧ • αʔόͷࢹͦΕʹର͢Δ24/365ͷ ରԠͷඞཁੑ ηΩϡϦςΟΞλοΫ ͷରԠ
͍ͭͷؒʹ͔ଟ͘ͷ࣌ؒΛՃՁͷੜ·ͳ͍ ॏ࿑ಇʹඅ͍ͯ͠Δ
Ͳ͏ղܾ͢Δͷ͔
αʔό͕ଘࡏ͢ΔwebαʔϏεͷظ αʔόͷࢹ αʔόϝϯςφϯε ίʔυͷ࣮ ΩϟύγςΟ ϓϥϯχϯά අͤΔ࣌ؒͷׂ߹ • ૿͑ߦ͘ΞΫηεϢʔβʹର͢Δ αʔόͷߏมߋɾΩϟύγςΟϓϥ
ϯχϯά • ϞϊϦγοΫͳγεςϜʹର͢Δϝϯ ςφϯείετ • γϏΞͳݸਓใͷཧ • αʔόͷࢹͦΕʹର͢Δ24/365ͷ ରԠඞཁੑ %%PT߈ܸͷରԠ ͯ͢ΛΫϥυαʔϏε Ξτιʔε
݁ՌͨΒ͞ΕΔϝϦοτ ϏδωεͷՃՁΛ͚ͭΔίʔυͷ࣮ʹ ଟ͘ͷ࣌ؒΛඅͤΔΑ͏ʹͳΔ
࣮ફฤ
ҰൠతͳϒϥβΞϓϦέʔγϣϯΛαʔόϨεΞʔΩςΫνϟͰ ࣮ͨ͠߹ͷߏΛݟ͍͖ͯ·͠ΐ͏
ϒϥβΞϓϦέʔγϣϯͷߏਤ
ϒϥβΞϓϦέʔγϣϯͷߏਤ CognitoʹΑΔ ೝূɾೝՄ
ϒϥβΞϓϦέʔγϣϯͷߏਤ ಈతॲཧAPI Gateway Λ௨ͯ͠LambdaͰॲཧ
ϒϥβΞϓϦέʔγϣϯͷߏਤ HTML,CSSͳͲ ੩తϦιʔεS3ʹઃஔ
Cognito User Pools ೝূɾೝՄ
Cognito User Pools • ಠࣗͷϢʔβσΟϨΫτϦΛ࡞Ͱ͖ΔϑϧϚωʔδυαʔ Ϗε • ԯϢʔβ·Ͱεέʔϧ • ೝূɾೝՄγεςϜΛεέʔϧͤ͞ɺηΩϡΞʹ͢Δͱ͍͏
ॏ࿑ಇΛͯͬͯ͘͢ΕΔαʔϏε
Cognito User Pools • جຊతʹ1ͭͷΞϓϦέʔγϣϯʹ͖ͭ1ͭͷUser Pool Λ࡞Δ • αΠϯΞοϓͷࡍͷύεϫʔυͷϙϦγʔೋஈ֊ೝূͳ ͲηΩϡϦςΟʹؔ͢ΔઃఆΛ֤User
Poolຖʹઃఆ͢Δ • αΠϯΞοϓࡁΈͷϢʔβͷҰཡϚωδϝϯτίϯιʔ ϧ͔Β֬ೝͰ͖Δ
Amazon Cognito Identity SDK for JavaScript https://github.com/aws/amazon-cognito-identity-js • User PoolͱwebαΠτͱͷ࿈ܞΛߦ͏ϥΠϒϥϦ
• αΠϯΠϯɺαΠϯΞοϓɺύεϫʔυϦϚΠϯμʔ ͳͲɺϢʔβཧΛߦ͏্Ͱඞཁͳϝιου͕શ ͯ༻ҙ͞Ε͍ͯΔ • JavaScriptͰϝιουΛهड़͢Δ͚ͩͰྑ͍ɻෳ ࡶͳϏδωεϩδοΫΛ࣮͢Δඞཁͳ͍
Customer Authorizer API Gateway Cognito User Pools • API
GatewayʹೝূೝՄͷΈΛUser PoolsΛ࣮ͬͯݱͰ͖Δ • ϩάΠϯࡁΈͰ͋ΕAPIͷॲཧΛಈ࡞͞ ͤͯɺະϩάΠϯঢ়ଶͰ͋ΕɺAPIͷॲ ཧΛ࣮ࢪͤ͞ͳ͍ͱ͍ͬͨ͜ͱ͕Մೳ
ຊϕʔλ͕औΕͯਖ਼ࣜϦϦʔε
DynamoDB ಈతॲཧ Lambda API Gateway
API Gateway • ΞϓϦέʔγϣϯͷݰؔͱͯ͠ৼΔ͏ APIΛ࡞͢Δ͜ͱ ͕Ͱ͖ΔϚωʔδυαʔϏε • APIόοΫΤϯυγεςϜʹLambdaΛઃఆͯ͠֎෦͔Βͷೖ ྗσʔλΛॲཧͤ͞Δ •
ͲͷΑ͏ͳεέʔϧͰ͋ͬͯɺ؆୯ʹ API ͷ࡞ɺɺ อकɺࢹɺอޢ͕ߦ͑Δ
Lambda • ΞϓϦέʔγϣϯίʔυΛ࣮ߦͰ͖ΔίϯϐϡʔταʔϏε • ϢʔβΞϓϦέʔγϣϯίʔυͷΈΛAWSʹΞοϓϩʔ υ͢Εྑ͍ɻϢʔβ͕Λෛ͏ͷίʔυͷΈ • αʔόɺOSɺΩϟύγςΟʔͷϓϩϏδϣχϯά͓Αͼࣗ ಈεέʔϦϯάɺίʔυͷϞχλϦϯά͓Αͼϩάه AWS͕ཧٴͼ࣮ࢪ͢Δ
DynamoDB • ϑϧϚωʔδυͳNo SQLσʔλϕʔεαʔϏε • SPOF͕ଘࡏ͠ͳ͍ɻߴՄ༻ੑ 3 x ϨϓϦέʔγϣϯ •
ετϨʔδ༰ྔ੍ݶͳ͠ • ਫฏεέʔϦϯάʹΑΔෛՙࢄ
• ͜ͷ3ͭͷαʔϏεΛΈ߹ΘͤΔ͜ͱͰɺΞϓϦέʔγϣ ϯʹඞཁͳσʔλͷೖग़ྗɺॲཧɺӬଓԽ͕ՄೳʹͳΔ αʔόϨεΞʔΩςΫνϟࡾछͷਆث
αʔόϨεΞʔΩςΫνϟͰͷ։ൃΛΑΓޮతʹ
։ൃπʔϧϑϨʔϜϫʔΫ Serverless Framework API GatewayٴͼLambdaɺͦͷଞAWSϦιʔεΛͬͨ ΞϓϦέʔγϣϯΛߏங͢ΔͨΊͷϑϨʔϜϫʔΫ APEX LambdaϑΝϯΫγϣϯΛϏϧυɺσϓϩΠɺཧ͢ΔͨΊ ͷπʔϧ chalice
Serverless FrameworkʹࣅͨϑϨʔϜϫʔΫ Lamvery LambdaͷσϓϩΠFunctionͦͷͷΛؚΊͨपลػೳͷ ઃఆɾཧΛࢧԉ͢Δπʔϧ Simple API Gateway API GatewayͷઃఆٴͼσϓϩΠΛ؆୯ʹ͢Δπʔϧ
੩తϦιʔε S3 Bucket
Simple Strage Service • Πϯλʔωοτ༻ͷετϨʔδαʔϏε • εέʔϥϒϧͰ৴པੑ͕ߴ͘ɺ͔ͭߴͰ҆Ձͳσʔλετ ϨʔδΠϯϑϥετϥΫνϟΛར༻Ͱ͖Δ • ϑϩϯτ༻ͷHTMLS3όέοτʹஔ͢Δ͜ͱͰແݶͷε
έʔϥϏϦςΟΛ࣮ݱ͢Δ
ϑϩϯτͷϒϥβͱAPIΛޮΑ͘ଓͯ͘͠ΕΔͷ͕ඞཁ
ϑϩϯτͷϒϥβͱAPIΛޮΑ͘ଓͯ͘͠ΕΔͷ͕ඞཁ Single Page ApplicationʹΑΔ ϒϥβΞϓϦέʔγϣϯͷ։ൃ
• ୯ҰϖʔδʹΑΔWebΞϓϦέʔγϣϯ • ϖʔδϋογϡͷมߋ DOM ͷૢ࡞ʹΑͬͯ ΓସΘΔ • αʔόͱͷ௨৴ Ajax
WebSocket ͳͲͰߦ͏ Single Page Applicationͱ
• APIͱϖʔδ͕શʹ͍ͯ͠ΔͨΊɺAPI ϑΝʔετͷߟ͑ํͰࣗવʹΞϓϦέʔγϣϯ͕ ΊΔ • ΫϥΠΞϯτͱAPIͦΕͧΕʹ։ൃϦιʔεΛ ׂͯ͠ΓͯΔ͜ͱ͕༰қ Single Page ApplicationͷϝϦοτ
ϓϦίϯύΠϧʹΑΔΫϥΠΞϯταΠυϨϯμϦϯά API Gateway͔Βͷσʔλऔಘ ίϯύΠϧͯ͠HTMLͷੜ ϒϥβͰͷඳը
·ͱΊ • ͜͜·Ͱʹհͨ͠αʔϏεπʔϧΛ͏͜ͱͰैདྷͷϒ ϥβΞϓϦέʔγϣϯΛαʔόϨεΞʔΩςΫνϟͰ։ൃɺ ӡ༻͢Δ͜ͱ͕ՄೳʹͳΔ
·ͱΊ http://qiita.com/horike37 ࠓհͨ͠ΞʔΩςΫνϟͷৄࡉQiitaͷํʹιʔείʔυؚΊͯॻ͍͍ͯ·͢ ڵຯ͋Δํੋඇͷ͍ͧͯΈ͍ͯͩ͘͞
αʔόϨεΞʔΩςΫνϟͰ࠷େࣄͳ͜ͱ ࠷ޙʹ
αʔόϨεΞʔΩςΫνϟͰ͍ͬͯ͘ؾ࣋ͪʂ
ࣗͨͪͰ։͠ɺࣄྫΛ࡞͍ͬͯ͘ؾ࣋ͪʂ
ͦΜͳ͍ؾ࣋ͪΛ͞ΒʹΓ্͛ͯ͘ΕΔΠϕϯτ͕͋Γ·͢ʂ
Serverless Conf Tokyo͕։࠵͞Ε·͢ʂ http://tokyo.serverlessconf.io/
@Amimoto_Ami amimoto-ami.com THANK YOU! ࠓͦ͜͡ΊΑ͏ʂ ࣮ફʂαʔόϨεΞʔΩςΫνϟ