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
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWSで始めるServerlessの勘所と始め方
Serverless化を初めて最初の一歩でこれ知っておけば良かった。
ってのをまとめてみました。
ryurock
December 20, 2019
More Decks by ryurock
See All by ryurock
仕事の「速さ」とは?
ryurock
2
450
SaaS 組織概要
ryurock
1
1.2k
ソフトウェアピープルマネジメント
ryurock
1
310
プロダクトマネジメントプロセス概要
ryurock
33
14k
SaaS アーキテクチャ概要
ryurock
77
26k
SRE を立ち上げた4ヶ月後の世界
ryurock
1
2.1k
SRE を立ち上げた時の組織の変化と現実の SLO と向き合う
ryurock
1
230
サービスの成長と技術負債について
ryurock
1
470
【DevOpsDays Tokyo 2022】レガシーなシステムをリプレースした後に起きた開発組織の変化について
ryurock
7
1.1k
Other Decks in Technology
See All in Technology
AI時代の強いチームの作り方
yuukiyo
14
8.2k
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
1
150
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
3
1.8k
人依存からAIネイティブの体制へ:バックエンド開発の裏側【SORACOM Discovery 2026】
soracom
PRO
0
140
基調講演:人とAIをつなぐIoTの今と未来 ー 「フィジカル」と「デジタル」が出会うその先へ【SORACOM Discovery 2026】
soracom
PRO
0
360
現場をAIで動かす「フィジカル AI」の組み込み設計の考え方【SORACOM Discovery 2026】
soracom
PRO
0
150
現場で使える AWS DevOps Agent 活用ノウハウ - Release Management 機能の検証結果を添えて / AWS DevOps Agent Release Management and Know-How
kinunori
5
800
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
470
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
560
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
140
書籍セキュアAPIについて
riiimparm
0
390
Featured
See All Featured
Building an army of robots
kneath
306
46k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
Utilizing Notion as your number one productivity tool
mfonobong
4
490
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Making Projects Easy
brettharned
120
6.7k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
Documentation Writing (for coders)
carmenintech
77
5.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
230
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ࢮ͵΄Ͳ࡞ͬ ͨͷͰ࣮Ζ͏ͱࢥ͑Ͱ͖Δ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠