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
サーバレスアーキテクチャのアンチパターンと活用方法_20170126
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shogomuranushi
January 26, 2017
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サーバレスアーキテクチャのアンチパターンと活用方法_20170126
shogomuranushi
January 26, 2017
More Decks by shogomuranushi
See All by shogomuranushi
ノーコード x ChatBotで遊んでたら ReActを実装しそうだった話
shogomuranushi
0
1.4k
ChatGPT関連情報の追い方、個人・業務での使い方、サービスへの組み込み方、 ABEJAでの取り組み4例、ここ2週間のトピックなど行けるところまで
shogomuranushi
5
2.1k
FPが教える iDeCo のすごさ
shogomuranushi
0
190
AWS Control Tower導入してハッピーになりました
shogomuranushi
0
360
EKS を使ってる人から見た App Runner
shogomuranushi
7
2.6k
Suggested Topicの質問に可能な限り答えてみた
shogomuranushi
0
1.2k
顧客のアプリケーションコードが動くマルチテナント環境における課題とEKSにたどり着くまで
shogomuranushi
0
1.8k
ちょいテク100本ノック。できるまで帰しません 。今から使えるちょいテク集
shogomuranushi
1
3.3k
after of Infrastructure-as-Code-is-very-tired
shogomuranushi
16
3.5k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Six Lessons from altMBA
skipperchong
29
4.3k
How GitHub (no longer) Works
holman
316
150k
Skip the Path - Find Your Career Trail
mkilby
1
140
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
How to Ace a Technical Interview
jacobian
281
24k
A better future with KSS
kneath
240
18k
The Curse of the Amulet
leimatthew05
1
13k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
450
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
570
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Transcript
αʔόϨεΞʔΩςΫνϟͷ Ξϯνύλʔϯͱ׆༻ํ๏
None
͜ΜͳΜॻ͍ͯ·͢
ࠓ͢͜ͱ • αʔόϨεΞʔΩςΫνϟͷΞϯνύλʔϯͱ ղܾํ๏ • ৬ۀฑAWSͷαʔϏεத৺Ͱ͕͢ɺ ॴʑAWSʹґଘͯ͠ͳ͍Tips͋Γ·͢
ࠓ͞ͳ͍͜ͱ • αʔόϨεΞʔΩςΫνϟͬͯͳʹʁ
ର • αʔόϨεͬͯݴ༿ͬͯΔ͚Ͳɾɾ • ͱΓ࣮͋͑ͣͯ͠Έ͚ͨͲɾɾ • Έ͍ͨͳਓΛରʹ͍ͯ͠·͢ • ώϯτΛ࣋ͪؼͬͯΒ͑Εͱࢥ͍·͢
ຊ
1. ʮSDKΛΘͣσʔλΛ͛Δʯ • SDKΛΘͣʹΫϥΠΞϯτ͔ΒAWSαʔϏεʹϦΫΤετ Λ͛Δ AWS Lambda Amazon API Gateway
mobile client Amazon DynamoDB
• Ϋϥυͱ͍ͬͯཧͰಈ͍͍ͯΔ • ࢭ·Βͳ͍γεςϜଘࡏ͠ͳ͍ • SDKΫϥυ͕ࢭ·ΔલఏͰϦτϥΠॲཧͱ͔͕Έࠐ·Ε͍ͯΔɻՄೳͳݶΓSDKΛ͏ • SDKΛΘͳ͍߹ɺ૬ख͕ड͚औΕͳ͔ͬͨ߹Λఆͯ͠ϦτϥΠ͢Δ ॲཧΛೖΕΑ͏ɻϦτϥΠʹΑΓޙʹޭ͢ΔՄೳੑ͕ߴ͍ •
ϦτϥΠॲཧͷਪɺΫϥΠΞϯτଆʮExponential Backoffʯ͕ਪɻ Lambdaʹؔͯ͠ʮDead Letter QueueʯΛར༻͢Δ • Exponential Backoff • σʔλૹ৴ॲཧ͕ࣦഊͯ͠࠶ૹ৴͢Δͱ͖ʹɺࣦഊճ͕૿͑Δʹ࿈Εͯ ࠶ૹ৴͢Δ·Ͱͷͪ࣌ؒΛࢦؔతʹ૿͢Έ ʢྫɿ̍ඵޙɺ̎ඵޙɺ̐ඵޙɺ̔ඵޙɺɺɺʣ • ظোൃੜ࣌ʹγεςϜͷෆඞཁͳෛ୲Λܰݮ • Dead Letter Queue • ࣮ߦࣦഊ࣌ (3ճϦτϥΠࣦഊ࣌) ʹSQS͔SNSʹ͛ΕΔػೳ • SQSʹಥͬࠐΜͩޙʹΰχϣΰχϣ͢Δ SDK͔͍͜͠ɻՄೳͳݶΓSDKΛ
2. ʮͱΓ͋͑ͣLambda FirstͰʯ multimedia Amazon SQS Amazon SNS AWS IoT
AWS Lambda Amazon API Gateway mobile client AWS Lambda AWS Lambda AWS Lambda AWS Lambda AWS Lambda
Lambdaͷํ͕͓ߴ͍߹͋Δ • 256MBͷϝϞϦͰ1,500ສճ࣮ߦ͠ຖճͷ࣮ߦ͕࣌ؒ200ϛϦඵͩͬͨ߹ͷར ༻ྉɺ$11 • ্͕Ծʹຖ࣮ߦ͢ΔΑ͏ͳॲཧͷ߹ɺ$11*30Ͱ$330 • ༻్ʹΑͬͯLambdaͷํ͕ߴ͘ͳΔ߹͋Δ • ͰEC2ͷӡ༻͕ແ͘ͳΔͷͰอकͷରԠ͕ݮΔ͠ɺϝϦοτେ͍ʹ͋Δ
ʢ͠ɺͬͯΈ͍ͨ͡ΌΜʣ • ॲཧྔ͕ଟ͍߹ܰ͘ݟੵΖ͏ • ͋ͱɺଟͷLambdaΛ͍͍͕ͬͯLambdaͷಉ࣮࣌ߦ੍ݶʢ100/secʣ ΞΧϯτ୯ҐͳͷͰɺ্ݶʹҙ
3. ʮॏ͍ͨόονLambdaͰʯ AWS Lambda Amazon CloudWatch
Lambdaॲཧ࣌ؒʹݶΓ͕͋Δ • Lambda = ࠷5͔ؒ͠ॲཧͰ͖ͳ͍ • 5Ҏ্͔͔Δ߹ผͷLambdaʹॲཧΛྲྀ͢ • SQSDynamoDBɺs3ͳͲΛؒʹڬΈLambda ͷॲཧΛ͚Δ
• StepFunction׆༻͠Α͏
4. ʮAPI GatewayͰॏ͍ͨॲཧʯ AWS Lambda Amazon API Gateway mobile client
API GatewayTimeout͢Δ • API GatewayͷλΠϜΞτ30ඵ • 30ඵҎʹAPI GatewayʹॲཧΛฦ͢ඞཁ͋Γ • ·ͣɺϑϩϯτͷLambdaͰϨεϙϯεฦ͠ɺ
ඇಉظʹޙଓͷLambdaͰॲཧΛܧଓͤ͞Δ • ॲཧྃޙʹSNSͳͲͰ௨͢Δ
5. ʮ1LambdaͰଟͷॲཧʯ AWS Lambda
ՄࢹԽੑ͕͘ɺಉ࣮࣌ߦ ϦτϥΠॲཧͰग़Δ͔ • ಉ࣮࣌ߦ͕100ͳͷͰɺ1Lambdaͷॲཧ͕͍࣌ؒͱಉ࣮࣌ߦͰ಄ଧͪ͢Δ͔ɻ 1ϑΝϯΫγϣϯͷ࣮ߦ࣌ؒՄೳͳݶΓ͘͢Δ͜ͱ ʢಉ࣮࣌ߦͷ্ݶ؇Մೳ͕ͩɺ࣮͕গͳ͍߹௨Βͳ͍͜ͱ͋Δͦ͏ʣ • Lambda͕ࣦഊͨ͠ࡍʹ߹ܭ3ճϦτϥΠॲཧ͞Εͯ͠·͏ͨΊɺ్த·Ͱͷॲཧ͕ෳճ࣮ ߦ͞Εͯ͠·͏͜ͱ͋Δɻ࣮֬ʹ1ճ͚࣮ͩߦ͍ͨ͠߹ʮcontext.done()ʯ͢Δɻ •
όονॲཧͰ͍͏ͱ͜ΖͷϦϥϯͱ͔ɺτϥϯβΫγϣϯɾϩʔϧόοΫͱ͔ແ͍ͷͰႈ ੑ͕อͨΕͨɺෳճ࣮ߦ͍͍ͯ͠ॲཧͰ࡞Βͳ͍ͱγϯυΠ͔ʢ͖͗͢Δ͚Ͳʣ • StepFunctionΛ͑ॲཧϑϩʔՄࢹԽग़དྷͯɺཧ͕ḿΔͷͰ1Lambdaʹ߆Δඞཁͳ͍ • ͨͩɺ࠶ૹׂΓࠐΈͳͲΛߟྀ͓͔ͯ͠ͳ͍ͱޙͰϝϯς͠ʹ͍͘͜ͱɻ ͜ͷลͷϕετϓϥΫςΟε·ͩ·ͩ͜Ε͔Βɻ
6. ʮࢹΛ͠ͳ͍ʯ Amazon CloudWatch
ࢹઈର͠·͠ΐ͏ • ඞͣޭ͍ͯ͠Δอূͳ͍ • ඞͣॲཧ͠ͳ͍ͱ͍͚ͳ͍ͷΩονϦࢹ͠·͠ΐ ͏ʢLambdaΑ͘ࢹͷߟྀ͔Β࿙ΕΔʣ • Lambdaͷ߹ʮErrorsʢྫ֎ൃੜʣʯΛࢹͯ͠Ξ ϥʔτΛ্͛Δ •
ϩάCloudWatch Logsʹ͋ΔͷͰɺCWLogsͷϝτ ϦοΫϑΟϧλͰΞϥʔτ্͛Δ
7. όοΫΤϯυʹDynamoDB AWS Lambda Amazon API Gateway mobile client Amazon
DynamoDB
ΩϟύγςΟཧ͕ඞཁ • DynamoDB1ඵ͋ͨΓͷಡΈॻ͖ྔʢΩϟύγ ςΟʣΛࣄલʹઃఆ͢Δ • ΩϟύγςΟΛ͑ͨ߹ॲཧ͖͠ΕͣΤϥʔ ͱͳΔʢεύΠΫͳͲʹҙʣ • ϩετ͍͚ͯ͠ͳ͍σʔλͷ߹ॻ͖ࠐΈࣦ ഊ࣌ʹSQSʹ֨ೲ͠ɺ࣌ؒΛஔ͍ͯϦτϥΠ͢Δ
ͳͲΛݕ౼͢Δඞཁ͕͋Δ
8. Kinesis Amazon Kinesis mobile client
γϟʔυͷཧ͕ඞཁ • 1γϟʔυʹ1ඵ͋ͨΓ࠷େ1,000݅ͷPUT • ΩϟύγςΟΛ͑ͨ߹ॲཧ͖͠ΕͣΤϥʔͱͳΔʢε ύΠΫͳͲʹҙʣ • ϩετ͍͚ͯ͠ͳ͍σʔλͷ߹ΫϥΠΞϯτଆͰϦ τϥΠػߏΛઃ͚Δ •
γϟʔυΛׂ͢Δ͜ͱͰॲཧྔ૿ͤΔ • ͕ɺpartition-keyͰదʹࢄ͠ͳ͍ͱยํʹدΔ
9. LambdaͷόοΫΤϯυʹRDS AWS Lambda Amazon API Gateway mobile client Amazon
RDS
RDSͷଓͷಓࠔ • Lambda͔ΒVPCʢPrivate SubnetʣͷRDSʹଓ͢ΔʹVPC in LambdaΛ͏ඞཁ͕͋ΓɺLambdaͷى ಈ͕͘ͳΔʢENIͷੜ͕͍ʣ • VPC in
LambdaLambdaΛ࣮ߦ͢Δ͝ͱʹENIΛ༻͢ΔͨΊɺSubnetେ͖֬͘อ͠ͳ͍ͱSubnetͷIPΛ ͍ͬͯENI͕ੜग़དྷͣʹΤϥʔ͕ൃੜ͢Δ • Lambda in PublicRDSʹରͯ͠ɺSecurityGroupͷϑϧ։์ʢ͘͠Ұ࣌తʹࣗIPΛ։์ʣ͕ඞཁʹͳΔ ͕ɺDBͷಛੑΛ౿·͑ΔͱηΩϡϦςΟ্ɺϑϧ։์Public SubnetʹRDSΛஔ͢Δͷݱ࣮తͰͳ͍ • Lambda͔ΒRDSͷDBίωΫγϣϯϦΫΤετ୯ҐʹͳΔͨΊɺಉ࣌ଓ͕͑ΒΕͳ͍Մೳੑ • σʔλετΞͷమଇDynamoDBɻ DBͷͰͲ͏ͯ͠VPCΛར༻͍ͨ͠ʢPrivateʹஔ͍ͨ͠ʣ߹ɺDynamoDB StreamsʢDynamoDB Streams=>Lambda=>SQS=>RDSʣΛར༻ͨ͠ඇಉظөΛݕ౼͢Δ
10. ੜͷAWSαʔϏεͰड͚Δ Amazon Kinesis mobile client mobile client Amazon DynamoDB
API GatewayΛڬΉͱͤʹͳΔ ʢ͔ʁʣ • ੜͷAWSαʔϏεʢKinesisDynamoDBͳͲʣͰड͚ΔͱɺҎԼͷΑ͏ͳ͕ • ଞʹྑ͍αʔϏε͕ग़ͨΒΞϓϦଆʢσόΠεଆʣͳͲͷมߋ͕ඞཁ • Πϯϑϥଆ͔Βͨ͠ΒΞϓϦଆʢσόΠεଆʣʹɺԿͬͯΔ͔ͱ͔αʔϏε Λҙࣝͯ͠΄͘͠ͳ͍
• API GatewayΛؒʹڬΈRESTͰड͚ΔΑ͏ʹ͢ΔͱɺΠϯϑϥʢAWSαʔϏε ଆʣநԽ͞ΕΔ • நԽ͓ͯ͘͠ͱɺΑΓྑ͍αʔϏε͕ग़ͨ࣌ʹΞϓϦଆʢσόΠεଆʣʹґ ଘͤͣʹॊೈʹมߋ͕Մೳ • Ұ൪࢝ΊʹSDKΛ͑ɻͬͯݴ͚ͬͨͲɺԿΛॏࢹ͢Δ͔ʁͰબΛ
࠷ޙʹ • ϋϚΓͲ͜Ζ৭ʑ͋Δ • ͍ํʹΑͬͯੌ͘ྑ͍݁ՌʹͳΔ͚Ͳɺ ͍ํ͕ѱ͚ΕΠϚΠνʹͳΔʢσʔλϩετ͢Δͱ͔ʣ • શ෦αʔόϨεʹ͢Δඞཁͳ͍ • RDBʹྑ͍ػೳ͕͋ΔͷʹKVSͰؤுΓ·ͬͯ͘Δײͱ
ಉ͡Ͱɺཁ͍ॴͰ͢ɻ • ΈΜͳͰϋϚͬͯϕετϓϥΫςΟεΛ࡞͍͖ͬͯ·͠ΐ͏
Ҏ্