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で始めるServerlessの勘所と始め方
Search
ryurock
December 20, 2019
Technology
0
260
AWSで始めるServerlessの勘所と始め方
Serverless化を初めて最初の一歩でこれ知っておけば良かった。
ってのをまとめてみました。
ryurock
December 20, 2019
Tweet
Share
More Decks by ryurock
See All by ryurock
仕事の「速さ」とは?
ryurock
2
330
SaaS 組織概要
ryurock
1
840
ソフトウェアピープルマネジメント
ryurock
1
240
プロダクトマネジメントプロセス概要
ryurock
33
14k
SaaS アーキテクチャ概要
ryurock
75
25k
SRE を立ち上げた4ヶ月後の世界
ryurock
1
2k
SRE を立ち上げた時の組織の変化と現実の SLO と向き合う
ryurock
1
190
サービスの成長と技術負債について
ryurock
1
400
【DevOpsDays Tokyo 2022】レガシーなシステムをリプレースした後に起きた開発組織の変化について
ryurock
7
1k
Other Decks in Technology
See All in Technology
英語は話せません!それでも海外チームと信頼関係を作るため、対話を重ねた2ヶ月間のまなび
niioka_97
0
130
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
7
3.9k
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
0
390
AI ReadyなData PlatformとしてのAutonomous Databaseアップデート
oracle4engineer
PRO
0
220
Access-what? why and how, A11Y for All - Nordic.js 2025
gdomiciano
1
120
リーダーになったら未来を語れるようになろう/Speak the Future
sanogemaru
0
340
データエンジニアがこの先生きのこるには...?
10xinc
0
460
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
1.1k
AWS 잘하는 개발자 되기 - AWS 시작하기: 클라우드 개념부터 IAM까지
kimjaewook
0
120
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
390
実装で解き明かす並行処理の歴史
zozotech
PRO
1
600
成長自己責任時代のあるきかた/How to navigate the era of personal responsibility for growth
kwappa
4
290
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
329
39k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
It's Worth the Effort
3n
187
28k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Designing Experiences People Love
moore
142
24k
Site-Speed That Sticks
csswizardry
11
890
RailsConf 2023
tenderlove
30
1.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
Transcript
AWSͰ࢝ΊΔServerlessͷצ ॴͱ࢝Ίํ 2019.12.19 Eversense co.ltd @ryurock
ΞδΣϯμ 4FSWFSMFTTͱʁ 4FSWFSMFTTͷྫ 4FSWFSMFTTΛ͢Δʹ͋ͨͬͯߟ͑ͳ͍͚ͯ͘ͳ͍ϨΠϠʔ 4FSWFSMFTTͷཧͱݱ࣮
ॳΊͯͷ4FSWFSMFTTͷϙΠϯτ 4FSWFSMFTTͷ࠷ॳͷҰา-BNCEB'VODUJPOT -BNCEB'VODUJPOT 8IZ-BNCEB'VODUJPOT -BNCEB'VODUJPOTΛ͏લʹ͓͖ͬͯ͘ࣄ -BNCEB'VODUJPOTߏύλʔϯ -BNCEB'VODUJPOTΛ͏ʹ͋ͨͬͯͷਆπʔϧ 4FSWFSMFTTͷ࠷ॳͷೋาΊ&$4'BSHBUF &$4'BSHBUF 'BSHBUFͰ͓֮͑ͯ͘ࣄ 'BSHBUFͷҙࣄ߲ 'BSHBUFͷ࠷ॳͷҰา 4FSWFSMFTTͷར %PDLFSࢮͳͳ͔ͬͨ ·ͱΊ
Serverlessͱʁ
Serverlessͱʁ ཚʹݴ͏ͱϏδωεʹؔ ͳ͍γεςϜతͳ੍ޚΛ୭͔ (AWS,Azure,GCP)ʹ͓ͤ ͢Δ͜ͱ
Serverlessͷྫ • େنͳॲཧͷΩϡʔΠϯάॲཧͷ εέʔϧΠϯɾΞτ • EC2ͷηΩϡϦςΟཧΛͤΔ(Ξ ϓϦέʔγϣϯϨΠϠʔҾ͖ଓ͖ ࣗݾཧͰ͢) • ͳͲ
ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳ͍͚ͯ͘ͳ͍ϨΠϠʔ • Lambda(FaaS) • ͜ͷαʔϏε͔ΒServerless͕࢝·ͬͨͱݴͬͯաݴͰͳ͍ • ECS • ECS on
EC2 • EKS • ECS on Fargate • ͳͲ Service Layer
ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳ͍͚ͯ͘ͳ͍ϨΠϠʔ ίϯςφɾLambdaͱʹشൃੑͷ͋ΔαʔϏεͳͷͰ(్தͰλεΫ ͕ఀࢭͨ͠߹్தܦաͷStorageσʔλجຊഁغ͞ΕΔ)Storage ͷαʔϏεΛ༻͢Δ Storage Layer • CloudWatchLogs • LambdaɾFargateͱʹσϑΥϧτͷϩάCWLogsʹ
ग़ྗ͞ΕΔ • S3 • EC2ͰFileग़ྗ͍ͨ͠߹ͦΕΛS3ʹอଘ͢Δ • ͨͩ͠ϦΞϧλΠϜIO͕͍ͷͰۤख
ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳ͍͚ͯ͘ͳ͍ϨΠϠʔ લड़ͨ͠Storage୯ମͰద༻ͷ߹ڞʹεϧʔϓοτڐ༰͕͍ͷ ͰWEBαʔϏεେ༰ྔόονͷ߹୯ମͰ༻ͮ͠Β͍ͷ ͰσʔλΛసૹ͢ΔαʔϏεΛதؒʹஔ͘ඞཁ͕͋Δ Transform Layer • Kinesis FireHose •
ϦΞϧλΠϜ͚ϚωʔδυFluentdͱ͓΅͓͍͑ͯͯେମେৎ • Firelens • ίϯςφͷσʔλΛసૹ͢ΔͨΊͷSideCar Container • Re:event2019ͰFargateͷσϑΥϧτϩάʹՃ͞Εͨ • AWS͕ఏڙ͢ΔAWS͚ʹ࠷దԽͨ͠Fluentd
ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳ͍͚ͯ͘ͳ͍ϨΠϠʔ େ͖͚ͯ͘ * BatchͰ࣮ߦ͢Δpullܗࣜ * σʔλ͕อଘ͞ΕͨλΠϛϯάͰىಈͤ͞ΔEventυϦϒϯܗࣜ * Ұൠతͳઆ໌Ͱͳ͍ͱࢥ͏͚ͲELBͷHTTP Request͔ΒͷEvent͕͍ͬͯΔͱߟ͑ͯྑ͍ Event
Layer • CloudWatch Events • ϦΞϧλΠϜ͚ϚωʔδυFluentdͱ͓΅͓͍͑ͯͯେମେৎ • ELB • HTTP Request͔ΒLambdaίϯςφʹΠϕϯτΛ͢ • SNS • TopicsΛൃߦ͢Δ͜ͱʹΑͬͯLambdaSQSΛൃߦͰ͖Δ
͜Μͳײ͡
Serverlessͷཧͱݱ࣮ ୯Ұ͕໌֬ͳͷͰෳࡶͳࣄΛ͠Α͏ͱ͢Δ ͱͦΕͳΓʹ৭ʑͳαʔϏεͱ࿈ܞ͠ͳͯ͘ ͳΒͳ͍ ʲॏཁʳ ϨΠϠʔΛ͑Δ࣌ʹ CloudServiceͱ͖߹͏֮ޛ͕ ඞཁ
ॳΊͯͷServerlessͷϙΠϯτ ϨΠϠʔΛ͑ͳ͍খ͞ͳͷ ͔ΒॳΊͯ࿅Λ্͍͛ͯ͘ • ϨΠϠʔ͕͑ͳ͍ͷͰখ͞ͳόονͱ͔͔Β࢝Ί Δͱྑ͍ • Lambda͔Β͕͓͢͢Ί • ྫ͕ଟ͘ൺֱతރΕ͍ͯΔ
Serverlessͷ࠷ॳͷҰา Lambda Functions
Lambda Functions ίϯςφ͏લʹLambdaͰ Ͱ͖ͳ͍͔ߟ͑Α͏ (ίϯςφઃఆ͕৭ʑ͍͠)
Why Lambda Functions? • Ұ൪ϑϧϚωʔδυServerless • ࿈ܞॲཧ(S3,CloudWatch Logs,SQS)͕ ஈʑͱ૿͍͍͑ͯͯউख͕Α͍ •
খ࢝͘͞ΊΔࣄ͕Ͱ͖Δ • eg. S3ʹImage͕Ξοϓϩʔυ͞ΕͨΒ τϦϛϯάͱ͔ • Lambda Layerͷग़ݱʹΑͬͯNative module͍͘͢ͳͬͨ
Lambda FunctionsΛ͏લʹ͓͖ͬͯ͘ࣄ VPC on Lambdaͱ Lambdaͷҧ͍
VPC on Lambda Functions? ؆୯ʹݴ͏ͱ௨ৗLambda VPCͷϦιʔεʹΞΫηεͰ͖ͳ͍ ͳͷͰ࿈ܞ͢ΔαʔϏε͕VPCͳͷ͔ͦ͏Ͱͳ͍ͷ͔Λߟྀ͢Δඞཁ͕͋Δ ྫ͑ VPC on
LambdaͰGoogle APIΛୟ͖ʹߦ͜͏ͱ͢ΔͱVPCͷ֎ʹग़Εͳ͍ͷͰҙ!! (݁ߏϋϚΔ᠘)
Lambda FunctionsΛ͏લʹ͓͖ͬͯ͘ࣄ CloudServiceͱ࿈ܞͨ͠Β ૄ௨Ͱ͖ͳ͍ͱ͔͋ΔͷͰ ͝ҙ (ಛʹRDS,EC2)
Lambda Functionsߏύλʔϯ(ྫ) • APIGateway + Lambda • ͜ͷ߹VPC on Lambdaʹ͓ͯ͘͠ͱRDSͱૄ
௨Ͱ͖Δ(HTTPAPI Gateway͕ݞΘΓͯ͘͠ ΕΔͷͰ) • ELB + Lambda • ࠷ۙͰ͖ΔΑ͏ʹͳͬͨ(API Gatewayͱಉ͡ߟ͑ ํͰOK) • API ServerҎ֎Ͱͳʹ͔͍ͨ͠߹ʹߟ͑Δ • CloudWatch logs or S3 + Lambda • ΠϕϯτυϦϒϯͰ͑Δදྫ
Lambda FunctionsΛ͏ʹ͋ͨͬͯͷਆπʔϧ Serverless Framework Boiler Template͔Βͷ࡞Deploy ͷશͯΛ͜ΕҰͭͰऩ·Δ CloudFormationॻ͚ΔͷͰશ෦Ͱ͖Δ
Serverlessͷ࠷ॳͷೋาΊ ECS Fargate
ECS Fargate • ϑϧϚωʔδυContainer • جຊԿͰͰ͖Δ • ͕Dockerͷֶशίετ͕͍ Βͳ͍Θ͚Ͱͳ͍!!(ॏཁ)
FargateͰ͓֮͑ͯ͘ࣄ • ECR (Elastic Container Registory) • DockerImageͷอଘઌ • DockerImageͷgithubͱ͓΅͑ͯΒͬͯ΄ͱΜͲͳ͍
• ECS Cluster • ContainerΛ·ͱΊΔശ • ClusterࣗମContainerΛάϧʔϓԽͯ͠ཧ͍ͯ͠Δ͚ͩ • ECS TaskDifinitions • DockerImageΛͲ͏ಈ͔͔͢ʁ(serverΛىಈ͢Δͱ͔ɻಛఆͷόο νίϚϯυ࣮ߦ͢Δͱ͔) • Ͳͷ͘Β͍ͷMemory,CPUΛͬͯTaskΛಈ͔͔͢ʁ • ఆٛ͢Δͷ • ͜Εrivisionͷ֓೦Λ͍ͬͯΔͷͰTaskఆٛͷgitͱ֮͑Εྑ͍
FargateͰ͓֮͑ͯ͘ࣄ(ͦͷ2) • ECS (Task) • TaskΛಈ͔͢(୯ମͷόονͳΒ͜ΕͰ ͳ͍) • ECS (Service)
• TaskΛىಈͬ͠ͺͳ͠ʹ͢ΔͳΒͪ͜Β (HTTP Server) • CloudWatch Event • cronͷΑ͏ʹఆظ࣮ߦͰTaskΛىಈͤͨ͞ ͍߹࿈ܞͤ͞Δ
Fargateͷҙࣄ߲ • SSH Ͱ͖ͳ͍ • ͕ཪٕϞʔυͰssm-agentΛΠϯετʔϧ͢Ε System ManagerͷSession Manager͔ΒೖΕΔ •
ίϯςφ͕ࢮΜͩ࣌ίϯςφͷStorageશͯͳ͘ ͳΔ • logσʔλFileอଘͷͷStorage Serviceʹసૹ ͠ͳ͍ͱࣦΘΕΔ(S3,RDS,Cloudwatch log) • ϩάશͯstdoutͰcloudwatch logʹอଘ͞ΕΔ • firelensͱ͍͏fluentίϯςφʹసૹ͢Δ͜ͱͰ͖ Δ
ͳΜ͔͍͠…….
Fargateͷ࠷ॳͷҰา • খ͞ͳόον͔Β࢝ΊΔ • LambdaͱҰॹ·ͣ׳ΕΔ • ҙ֎ͱ։ൃͷDockerfileͰͪΐͬͱઃఆ ม͑Δ͚ͩͰຊ൪ಈ͘Α(ຊʹ) • TaskDifnitionsͷCFͷαϯϓϧͨ͘͞
Μஔ͍ͯΔͷͰͬͯΈͯͶ • TaskDifnitions͚ͩͦ͜ΛטΈࡅ͚ ͱΓ͋͑ͣΠέΔ
ͳͥΔඞཁ͕͋Δͷ͔ʁ
Serverlessͷར • ཧ͢Δͷ͕ݮΔ • Ansible,PackerશࣺͯͯΕΔ • CloudFormationͱDockerImageҎ্!ʹͰ͖Δ • όονͳΒCPUͱ͔ؾʹ͢Δඞཁͳ͍ •
όον͕ճΓΔ͚ͩͷϝϞϦͱCPUΛઃఆ͢ΕΑ ͍ • εύΠΫͷΞϥʔϜ͖ʹ͠ͳͯ͘ྑ͍ • (RDSͱ͔ͷߟྀඞཁ͚ͩͲ • Aurora RDSʹ͢ΕΦʔτεέʔϧ͢Δ͔Β͔ ͳΓ࠷ڧ(͚ͩͲ͓͔͔ۚΔ)
Dockerࢮͳͳ͔ͬͨ • ࠷ॳ֓೦ͱֶशίετ͕ߴͯ͘ ྲྀߦΔͷ͔͜Εʁͱࢥ͚ͬͨͲ ؾ͍ͮͨΒσϑΝΫτʹ͍ۙ • GCPͱͷڝ૪ͰAWS͔ͳΓͷ ͍ͰFargate,LambdaΞοϓ σʔτͯ͘͠Δ(ઈରʹ)
·ͱΊ
Serverlessͷ࠷ॳͷҰา • Lambda,FargateͰখ͞ͳόον͔Β࢝ΊΔ • EventυϦϒϯΛҙࣝ͢Δ(S3࿈ܞ,SNS࿈ܞ ) • LambdaͰͰ͖Δ͜ͱΛߟ͑ͯͦΕ͕Ͱ͖ͳ ͍߹FargateͰContainer •
DockerImageҙ֎ͱຊ൪Ͱಈ͘ • CloudFormationͷSampleࢮ͵΄Ͳ࡞ͬ ͨͷͰ࣮Ζ͏ͱࢥ͑Ͱ͖Δ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠