Slide 1

Slide 1 text

AWSͰ࢝ΊΔServerlessͷצ ॴͱ࢝Ίํ 2019.12.19 Eversense co.ltd @ryurock

Slide 2

Slide 2 text

ΞδΣϯμ 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͸ࢮͳͳ͔ͬͨ ·ͱΊ

Slide 3

Slide 3 text

Serverlessͱ͸ʁ

Slide 4

Slide 4 text

Serverlessͱ͸ʁ ཚ๫ʹݴ͏ͱϏδωεʹؔ܎ ͳ͍γεςϜతͳ੍ޚΛ୭͔ (AWS,Azure,GCP)౳ʹ͓೚ͤ ͢Δ͜ͱ

Slide 5

Slide 5 text

Serverlessͷྫ • େن໛ͳॲཧͷΩϡʔΠϯάॲཧͷ εέʔϧΠϯɾΞ΢τ • EC2ͷηΩϡϦςΟ؅ཧΛ೚ͤΔ(Ξ ϓϦέʔγϣϯϨΠϠʔ͸Ҿ͖ଓ͖ ࣗݾ؅ཧͰ͢) • ౳ͳͲ

Slide 6

Slide 6 text

ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳͯ͘͸͍͚ͳ͍ϨΠϠʔ • Lambda(FaaS) • ͜ͷαʔϏε͔ΒServerless͕࢝·ͬͨͱݴͬͯ΋աݴͰ͸ͳ͍ • ECS • ECS on EC2 • EKS • ECS on Fargate • ౳ͳͲ Service Layer

Slide 7

Slide 7 text

ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳͯ͘͸͍͚ͳ͍ϨΠϠʔ ίϯςφɾLambda͸ͱ΋ʹشൃੑͷ͋ΔαʔϏεͳͷͰ(్தͰλεΫ ͕ఀࢭͨ͠৔߹͸్தܦաͷStorageσʔλ͸جຊഁغ͞ΕΔ)Storage ͷαʔϏεΛ࢖༻͢Δ Storage Layer • CloudWatchLogs • LambdaɾFargateͱ΋ʹσϑΥϧτͷϩά͸CWLogsʹ ग़ྗ͞ΕΔ • S3 • EC2ͰFileग़ྗ͍ͨ͠৔߹͸ͦΕΛS3ʹอଘ͢Δ • ͨͩ͠ϦΞϧλΠϜ͸IO͕஗͍ͷͰۤख

Slide 8

Slide 8 text

ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳͯ͘͸͍͚ͳ͍ϨΠϠʔ લड़ͨ͠Storage୯ମͰద༻ͷ৔߹ڞʹεϧʔϓοτڐ༰͕௿͍ͷ ͰWEBαʔϏε΍େ༰ྔόονͷ৔߹͸୯ମͰ͸࢖༻ͮ͠Β͍ͷ ͰσʔλΛసૹ͢ΔαʔϏεΛதؒʹஔ͘ඞཁ͕͋Δ Transform Layer • Kinesis FireHose • ϦΞϧλΠϜ޲͚ϚωʔδυFluentdͱ͓΅͓͍͑ͯͯେମେৎ෉ • Firelens • ίϯςφͷσʔλΛసૹ͢ΔͨΊͷSideCar Container • Re:event2019ͰFargateͷσϑΥϧτϩάʹ௥Ճ͞Εͨ • AWS͕ఏڙ͢ΔAWS޲͚ʹ࠷దԽͨ͠Fluentd

Slide 9

Slide 9 text

ServerlessΛ͢Δʹ͋ͨͬͯߟ͑ͳͯ͘͸͍͚ͳ͍ϨΠϠʔ େ͖͘෼͚ͯ * Batch౳Ͱ࣮ߦ͢Δpullܗࣜ * σʔλ͕อଘ͞ΕͨλΠϛϯάͰىಈͤ͞ΔEventυϦϒϯܗࣜ * Ұൠతͳઆ໌Ͱ͸ͳ͍ͱࢥ͏͚Ͳ΋ELBͷHTTP Request͔ΒͷEvent͕౉͍ͬͯΔͱߟ͑ͯྑ͍ Event Layer • CloudWatch Events • ϦΞϧλΠϜ޲͚ϚωʔδυFluentdͱ͓΅͓͍͑ͯͯେମେৎ෉ • ELB • HTTP Request͔ΒLambda΍ίϯςφʹΠϕϯτΛ౉͢ • SNS • TopicsΛൃߦ͢Δ͜ͱʹΑͬͯLambda΍SQSΛൃߦͰ͖Δ

Slide 10

Slide 10 text

͜Μͳײ͡

Slide 11

Slide 11 text

Serverlessͷཧ૝ͱݱ࣮ ୯Ұ੹೚͕໌֬ͳͷͰෳࡶͳࣄΛ͠Α͏ͱ͢Δ ͱͦΕͳΓʹ৭ʑͳαʔϏεͱ࿈ܞ͠ͳͯ͘͸ ͳΒͳ͍ ʲॏཁʳ ϨΠϠʔΛ௒͑Δ࣌ʹ͸ CloudServiceͱ෇͖߹͏֮ޛ͕ ඞཁ

Slide 12

Slide 12 text

ॳΊͯͷServerlessͷϙΠϯτ ϨΠϠʔΛ௒͑ͳ͍খ͞ͳ΋ͷ ͔ΒॳΊͯ࿅౓Λ্͍͛ͯ͘ • ϨΠϠʔ͕௒͑ͳ͍΋ͷͰখ͞ͳόονͱ͔͔Β࢝Ί Δͱྑ͍ • Lambda͔Β͕͓͢͢Ί • ྫ͕ଟ͘ൺֱతރΕ͍ͯΔ

Slide 13

Slide 13 text

Serverlessͷ࠷ॳͷҰา Lambda Functions

Slide 14

Slide 14 text

Lambda Functions ίϯςφ࢖͏લʹLambdaͰ Ͱ͖ͳ͍͔ߟ͑Α͏ (ίϯςφ͸ઃఆ͕৭ʑ೉͍͠)

Slide 15

Slide 15 text

Why Lambda Functions? • Ұ൪ϑϧϚωʔδυServerless • ࿈ܞॲཧ(S3,CloudWatch Logs,SQS౳)͕ ஈʑͱ૿͍͑ͯͯ࢖͍উख͕Α͍ • খ࢝͘͞ΊΔࣄ͕Ͱ͖Δ • eg. S3ʹImage͕Ξοϓϩʔυ͞ΕͨΒ τϦϛϯάͱ͔ • Lambda Layerͷग़ݱʹΑͬͯNative module΋࢖͍΍͘͢ͳͬͨ

Slide 16

Slide 16 text

Lambda FunctionsΛ࢖͏લʹ஌͓ͬͯ͘΂͖ࣄ VPC on Lambdaͱ Lambdaͷҧ͍

Slide 17

Slide 17 text

VPC on Lambda Functions? ؆୯ʹݴ͏ͱ௨ৗLambda͸ VPC಺ͷϦιʔεʹΞΫηεͰ͖ͳ͍ ͳͷͰ࿈ܞ͢ΔαʔϏε͕VPC಺ͳͷ͔ͦ͏Ͱͳ͍ͷ͔Λߟྀ͢Δඞཁ͕͋Δ ྫ͑͹ VPC on LambdaͰGoogle APIΛୟ͖ʹߦ͜͏ͱ͢ΔͱVPCͷ֎ʹग़Εͳ͍ͷͰ஫ҙ!! (݁ߏϋϚΔ᠘)

Slide 18

Slide 18 text

Lambda FunctionsΛ࢖͏લʹ஌͓ͬͯ͘΂͖ࣄ CloudServiceͱ࿈ܞͨ͠Β ૄ௨Ͱ͖ͳ͍ͱ͔͋ΔͷͰ ͝஫ҙ (ಛʹRDS,EC2)

Slide 19

Slide 19 text

Lambda Functionsߏ੒ύλʔϯ(ྫ) • APIGateway + Lambda • ͜ͷ৔߹͸VPC on Lambdaʹ͓ͯ͘͠ͱRDSͱૄ ௨Ͱ͖Δ(HTTP͸API Gateway͕ݞ୅ΘΓͯ͘͠ ΕΔͷͰ) • ELB + Lambda • ࠷ۙͰ͖ΔΑ͏ʹͳͬͨ(API Gatewayͱಉ͡ߟ͑ ํͰOK) • API ServerҎ֎Ͱͳʹ͔͍ͨ͠৔߹ʹߟ͑Δ • CloudWatch logs or S3 + Lambda • ΠϕϯτυϦϒϯͰ࢖͑Δ୅දྫ

Slide 20

Slide 20 text

Lambda FunctionsΛ࢖͏ʹ͋ͨͬͯͷਆπʔϧ Serverless Framework Boiler Template͔Βͷ࡞੒΍Deploy౳ ͷશͯΛ͜ΕҰͭͰऩ·Δ CloudFormation΋ॻ͚ΔͷͰશ෦Ͱ͖Δ

Slide 21

Slide 21 text

Serverlessͷ࠷ॳͷೋาΊ ECS Fargate

Slide 22

Slide 22 text

ECS Fargate • ϑϧϚωʔδυContainer • جຊԿͰ΋Ͱ͖Δ • ͕Dockerͷֶशίετ͕͍ Βͳ͍Θ͚Ͱ͸ͳ͍!!(ॏཁ)

Slide 23

Slide 23 text

FargateͰ͓֮͑ͯ͘ࣄ • ECR (Elastic Container Registory) • DockerImageͷอଘઌ • DockerImageͷgithubͱ͓΅͑ͯ΋Βͬͯ΄ͱΜͲ໰୊ͳ͍ • ECS Cluster • ContainerΛ·ͱΊΔശ • Clusterࣗମ͸ContainerΛάϧʔϓԽͯ͠؅ཧ͍ͯ͠Δ͚ͩ • ECS TaskDifinitions • DockerImageΛͲ͏ಈ͔͔͢ʁ(serverΛىಈ͢Δͱ͔ɻಛఆͷόο νίϚϯυ࣮ߦ͢Δͱ͔) • Ͳͷ͘Β͍ͷMemory,CPUΛ࢖ͬͯTaskΛಈ͔͔͢ʁ • ౳ఆٛ͢Δ΋ͷ • ͜Ε΋rivisionͷ֓೦Λ΋͍ͬͯΔͷͰTaskఆٛͷgitͱ֮͑Ε͹ྑ͍

Slide 24

Slide 24 text

FargateͰ͓֮͑ͯ͘ࣄ(ͦͷ2) • ECS (Task) • TaskΛಈ͔͢(୯ମͷόονͳΒ͜ΕͰ໰୊ ͳ͍) • ECS (Service) • TaskΛىಈͬ͠ͺͳ͠ʹ͢ΔͳΒͪ͜Β (HTTP Server౳) • CloudWatch Event • cronͷΑ͏ʹఆظ࣮ߦͰTaskΛىಈͤͨ͞ ͍৔߹͸࿈ܞͤ͞Δ

Slide 25

Slide 25 text

Fargateͷ஫ҙࣄ߲ • SSH Ͱ͖ͳ͍ • ͕ཪٕϞʔυͰssm-agentΛΠϯετʔϧ͢Ε͹ System ManagerͷSession Manager͔ΒೖΕΔ • ίϯςφ͕ࢮΜͩ࣌͸ίϯςφ಺ͷStorage͸શͯͳ͘ ͳΔ • logσʔλ΍Fileอଘͷ΋ͷ͸Storage Serviceʹసૹ ͠ͳ͍ͱࣦΘΕΔ(S3,RDS,Cloudwatch log౳) • ϩά͸શͯstdoutͰcloudwatch logʹอଘ͞ΕΔ • firelensͱ͍͏fluentίϯςφʹసૹ͢Δ͜ͱ΋Ͱ͖ Δ

Slide 26

Slide 26 text

ͳΜ͔೉͍͠…….

Slide 27

Slide 27 text

Fargateͷ࠷ॳͷҰา • খ͞ͳόον͔Β࢝ΊΔ • LambdaͱҰॹ·ͣ͸׳ΕΔ • ҙ֎ͱ։ൃͷDockerfileͰͪΐͬͱઃఆ ม͑Δ͚ͩͰຊ൪͸ಈ͘Α(ຊ౰ʹ) • TaskDifnitionsͷCFͷαϯϓϧ͸ͨ͘͞ Μஔ͍ͯΔͷͰ࢖ͬͯΈͯͶ • ೉໰͸TaskDifnitions͚ͩͦ͜ΛטΈࡅ͚ ͹ͱΓ͋͑ͣ͸ΠέΔ

Slide 28

Slide 28 text

ͳͥ΍Δඞཁ͕͋Δͷ͔ʁ

Slide 29

Slide 29 text

Serverlessͷར఺ • ؅ཧ͢Δ΋ͷ͕ݮΔ • Ansible,PackerશࣺͯͯΕΔ • CloudFormationͱDockerImageҎ্!ʹͰ͖Δ • όονͳΒ͹CPUͱ͔΋ؾʹ͢Δඞཁ͸ͳ͍ • όον͕ճΓ੾Δ͚ͩͷϝϞϦͱCPUΛઃఆ͢Ε͹Α ͍ • εύΠΫͷΞϥʔϜ͸͖ʹ͠ͳͯ͘ྑ͍ • (RDSͱ͔ͷߟྀ͸ඞཁ͚ͩͲ΋ • Aurora RDSʹ͢Ε͹Φʔτεέʔϧ͢Δ͔Β͔ ͳΓ࠷ڧ(͚ͩͲ΋͓ۚ͸͔͔Δ)

Slide 30

Slide 30 text

Docker͸ࢮͳͳ͔ͬͨ • ࠷ॳ͸֓೦ͱֶशίετ͕ߴͯ͘ ྲྀߦΔͷ͔͜Εʁͱࢥ͚ͬͨͲ΋ ؾ͍ͮͨΒσϑΝΫτʹ͍ۙ • GCPͱͷڝ૪ͰAWS͸͔ͳΓͷ ੎͍ͰFargate,Lambda͸Ξοϓ σʔτͯ͘͠Δ(ઈରʹ)

Slide 31

Slide 31 text

·ͱΊ

Slide 32

Slide 32 text

Serverlessͷ࠷ॳͷҰา • Lambda,FargateͰখ͞ͳόον͔Β࢝ΊΔ • EventυϦϒϯΛҙࣝ͢Δ(S3࿈ܞ,SNS࿈ܞ ౳) • LambdaͰͰ͖Δ͜ͱΛߟ͑ͯͦΕ͕Ͱ͖ͳ ͍৔߹͸FargateͰContainer • DockerImage͸ҙ֎ͱຊ൪Ͱಈ͘ • CloudFormationͷSample͸ࢮ͵΄Ͳ࡞ͬ ͨͷͰ࣮͸΍Ζ͏ͱࢥ͑͹Ͱ͖Δ

Slide 33

Slide 33 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠