Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
拡張して使うServerless&Amplify/use-with-extending-serverless-and-amplify
MURAKAMI Masahiko
November 20, 2019
Programming
0
910
拡張して使うServerless&Amplify/use-with-extending-serverless-and-amplify
MURAKAMI Masahiko
November 20, 2019
Tweet
Share
More Decks by MURAKAMI Masahiko
See All by MURAKAMI Masahiko
Using custom function template with AWS Amplify
fossamagna
1
190
Amplifyで始めるサーバレス開発/serverless-development-starting-with-amplify
fossamagna
0
1.4k
JavaScript AST
fossamagna
0
1.7k
Mithrilの紹介/Introduce of Mithril
fossamagna
0
170
Electronで製造ラインアプリ開発/Business application by Electron
fossamagna
4
6.3k
Apps Scriptによるより高度な開発プロセス/More Advanced Development Process with Apps Script
fossamagna
3
2k
Other Decks in Programming
See All in Programming
Explore Java 17 and beyond
josepaumard
3
660
You CANt teach an old dog new tricks
michaelbukachi
0
120
Jakarta EE 10 is Coming Your Way
ivargrimstad
0
3.1k
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
1.2k
【Qiita Night】新卒エンジニアによるSwift6与太予想
eiji127
0
180
About Type Syntax Proposal
quramy
1
1.2k
Jetpack Compose 頑張らないPreviewParameterProvider
horie23
0
110
Get Ready for Jakarta EE 10
ivargrimstad
0
2.9k
Micro Frontends with Module Federation: Beyond the Basics @jax2022
manfredsteyer
PRO
1
290
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
3
880
The future of trust stores in Python
sethmlarson
0
180
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
840
Featured
See All Featured
Debugging Ruby Performance
tmm1
65
10k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1k
Web development in the modern age
philhawksworth
197
9.3k
The Cult of Friendly URLs
andyhume
68
4.7k
Unsuck your backbone
ammeep
659
55k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
655
120k
Statistics for Hackers
jakevdp
781
210k
The MySQL Ecosystem @ GitHub 2015
samlambert
238
11k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
920
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Infographics Made Easy
chrislema
233
17k
Transcript
KANAZAWA ֦ுͯ͠͏ Serverless & Amplify גࣜձࣾӬγεςϜϚωδϝϯτɹञҪٛਔɾଜ্խ | 2019/11/20
˕ • • ຊࣾʗҪࢢ ౦ژࢧࣾʗਆా ԭೄࣄॴʗಹࢢ ׆ಈڌ
None
Copyright©2016 Poppendieck.LLC 2017
2018
εΫϥϜϚελʔ ʢେن͚ʣ ΤϯδχΞʗ εΫϥϜϚελʔ ΫϥυΞʔΩςΫτ ΫϥυΞʔΩςΫτ ʗεΫϥϜϚελʔ ΤϯδχΞ εΫϥϜϚελʔ •
ܦݧ๛ͳΞδϟΠϧʗΫϥυٕज़ऀʹΑΔ։ൃࢧԉαʔϏεɻίʔνϯάՄೳͰ͢ɻ • POC͔Β༻αʔϏεͷ։ൃ·Ͱɺ෯͍ٕज़ྖҬʹରԠ͠·͢ɻ • ϦϞʔτ։ൃͳΒͰͷޮੑͱಁ໌ੑΛٻɻ͓٬༷ͱϫϯνʔϜͰϏδωεΛͤ͞·͢ɻ Point Agile Studio Fukuiɿ DX࣌ʹରԠͨ͠ڞ։ൃͱڞҭڌɻ ΞδϟΠϧ/ΫϥυΛ ಘҙͱ͢ΔΤϯδχΞνʔϜ
None
ServerlessͰ࡞ΔॳΊͯͷαʔόϨε
KANAZAWA Name: ञҪ ٛਔ Age: 0x20 Home: ژӉ࣏ࢢ • େࡕͷখ͍͞ձࣾͰϝʔΧʔ͔Βͷडୗ։ൃ
• ओʹܞଳͷΈࠐΈιϑτ • ಛʹܞଳిʢFOMAॳ߸ػʙAndroid4.4ʣ • 201410݄ΑΓݱ৬ • C/C++/Java/Objective-C/C#/JavaScript/TypeScript/etc
KANAZAWA εϚϗΞϓϦʴόοΫΤϯυͷ։ൃґཔ • 20͙Β͍ͬͯΔαʔϏε • ͍Ζ͍Ζ͋ͬͯϦχϡʔΞϧ͍ͨ͠ • ։ൃձࣾʹෆຬʢεϐʔυײͦͷଞʣ
KANAZAWA ελʔτ࣌ͷঢ়گ • ϦχϡʔΞϧ༰ݻ·͍ͬͯͳ͍ • ݱߦΞϓϦͷجຊػೳඞਢ • εϚϗΞϓϦiOS/Android྆ํ ɹ αʔόΞϓϦɺಈ͘ͷΛૣ͘࡞Δඞཁ͕
KANAZAWA ௨ৗͷαʔόߏ AWS DC
KANAZAWA ௨ৗͷαʔόߏ • ϓϩϏδϣχϯά • εέʔϦϯά • ӡ༻ɾอक ɹ ΞϓϦຊདྷͷػೳҎ֎ʹɺͦΕͳΓͷ࣌ؒͱ࿑ྗ
KANAZAWA αʔόϨεͰʂ • ϓϩϏδϣχϯά • εέʔϦϯά • ӡ༻ɾอक ɹ ΞϓϦຊདྷͷػೳʹྗ
KANAZAWA εϚϗΞϓϦଆ • ݱߦΞϓϦiOS=Objective-CˍAndroid=Java • ܦݧऀෆ ɹ ࡞Γ͍͕ͨ͠ωΠςΟϒΞϓϦͦΕͧΕΛ࡞Δ࣌ؒͳ͍
KANAZAWA ϋΠϒϦουͰʂ • Cordova • Xamarin • React Native •
Native Script • Flutter
KANAZAWA ϋΠϒϦουͰʂ • Cordova • Xamarin • React Native •
Native Script • Flutter αʔόϨεͷͰͳ͍ͷͰׂѪ
KANAZAWA REST APIɿNode.js + TypeScript + Jest εϚϗΞϓϦɿReact Native +
TypeScript + Jest ɹ ར༻͢Δٕज़Λڞ௨Խ͢Δ͜ͱ͕Ͱ͖ͨ
KANAZAWA αʔόϨεͳAPIߏ AWS DC
KANAZAWA αʔόϨεͳAPIߏ AWS DC Amazon API Gateway APIͷఆٛɾσϓϩΠɾอकΛߦ͏ͨΊͷϑϧϚωʔδυαʔϏε
KANAZAWA αʔόϨεͳAPIߏ AWS DC AWS Lambda ҙͷίʔυΛ࣮ߦ͢ΔͨΊͷϑϧϚωʔδυαʔϏε
KANAZAWA αʔόϨεͳAPIߏ AWS DC Amazon DynamoDB ແݶʹεέʔϧ͢ΔNoSQLσʔλϕʔε
KANAZAWA αʔόϨεͳAPIߏ AWS DC Amazon Cognito γϯϓϧʹϢʔβʔΛཧ͢ΔϑϧϚωʔδυαʔϏε
KANAZAWA αʔόϨεͳAPIߏ AWS DC AWS Amplify
KANAZAWA αʔόϨεར༻ͷݒ೦ • Ϋϥυʹ͔͠ͳ͍ ϩʔΧϧͰ࣮ߦͰ͖ͳ͍ʹςετͰ͖ͳ͍ʹ։ൃ͠ʹ͍͘ • ߏங͕໘ͦ͏ Ϛωδϝϯτίϯιʔϧʢखಈʣ࠶ݱੑͷ CLIΛεΫϦϓτͰୟ͘ͷอक͕͘͠ͳΔ
KANAZAWA https://serverless.com
KANAZAWA Serverless FrameworkͳΒ • Ϋϥυʹ͔͠ͳ͍ ϩʔΧϧͰ࣮ߦͰ͖Δ • ߏங͕໘ͦ͏ YAMLϑΝΠϧʴίϚϯυͰҰൃσϓϩΠ
KANAZAWA $ yarn global add serverless $ sls create -t
aws-nodejs-typescript -p example-project Serverless: Generating boilerplate... Serverless: Generating boilerplate in "/Users/sakai-y/work/example-project" _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.55.1 -------' Serverless: Successfully generated boilerplate for template: “aws-nodejs-typescript" $ cd example-project
KANAZAWA
KANAZAWA $ yarn install $ sls config credentials -p aws
-k [AWS AccessKey] -s [AWS SecretKey] $ sls deploy
KANAZAWA ex) API GatewayͷΞΫηεϩάΛ༗ޮʹ͍ͨ͠
KANAZAWA
KANAZAWA ϩʔΧϧͰͷ࣮ߦʁ
KANAZAWA https://github.com/serverless/plugins
KANAZAWA https://github.com/dherault/serverless-offline serverless-offline
KANAZAWA ͜ΕͰΞϓϦέʔγϣϯͷ࣮ʹूதͰ͖Δ
KANAZAWA ՝ɿΦϯϓϨαʔόͷଓʹݻఆIP͕ඞཁ AWS DC
KANAZAWA LambdaΛVPCʹೖΕͯΞϨίϨ͢Δඞཁ͕ DC VPC Private subnet Public subnet
KANAZAWA https://github.com/smoketurner/serverless-vpc-plugin serverless-vpc-plugin
KANAZAWA $ yarn add -D serverless-vpc-plugin ϓϥάΠϯͷΠϯετʔϧ serverless.ymlʹઃఆՃ plugins: -
serverless-webpack - serverless-vpc-plugin custom: vpcConfig: cidrBlock: '10.0.0.0/16' zones: - ap-northeast-1a - ap-northeast-1c
KANAZAWA ͜Ε͚ͩ
KANAZAWA Error —————————————————————— The CloudFormation template is invalid: Template format
error: Number of resources, 201, is greater than maximum allowed, 200 ՝ɿ͋ΔσϓϩΠ͕ࣦഊͨ͠
KANAZAWA 1APIʹ͖ͭෳͷCloudFormationϦιʔε͕࡞ΒΕΔ • AWS::Lambda::Function • AWS::Lambda::Permission • AWS::Logs::LogGroup • AWS::ApiGateway::Resource
• AWS::ApiGateway::Method APIʹΑͬͯAWS::ApiGateway::Model͕ෳɺ͞Βʹڞ௨ͷϦιʔε ɹ ࣮ݶք͍
KANAZAWA https://github.com/dougmoscrop/serverless-plugin-split-stacks serverless-plugin-split-stacks
KANAZAWA ՝ɿΉͳ͘σϓϩΠΛյ͢ඞཁ͕͋ͬͨ ɹɹɹEIP͕มΘΔˠΦϯϓϨͷઃఆมߋ͕ඞཁˠݏͳإΛ͞ΕΔ
KANAZAWA https://github.com/SC5/serverless-plugin-additional-stacks serverless-plugin-additional-stacks
KANAZAWA ՝ɿVPCʹೖΕͨLambdaىಈʢίʔϧυελʔτʣ͕͍ ɹɹɹඇVPCͩͱ2ʙ3ඵ ɹɹɹVPCͩͱ9ʙ10ඵ
KANAZAWA https://github.com/FidelLimited/serverless-plugin-warmup serverless-plugin-warmup
KANAZAWA ՝ɿ։ൃڥ͚ͩඞཁͳϦιʔε
KANAZAWA https://github.com/anantab/serverless-plugin-ifelse serverless-plugin-ifelse
KANAZAWA custom: serverlessIfElse: - If: '"${self:custom.currentStage}" == “dev"' Exclude: -
provider.role - provider.environment.ENV1 - functions.func3 - functions.func1.events.http.0.authorizer Set: provider.timeout: 90 provider.profile: dev ElseExclude: - provider.environment.ENV2 ElseSet: provider.timeout: 120 https://github.com/anantab/serverless-plugin-ifelse/blob/master/README.md
KANAZAWA serverless-merge-config serverless-webpack serverless-jest-plugin serverless-dynamodb-local serverless-offline serverless-aws-documentation serverless-iam-roles-per-function serverless-plugin-api-gateway-auth serverless-plugin-stage-variables
serverless-plugin-split-stacks serverless-plugin-warmup serverless-scriptable-plugin serverless-plugin-additional-stacks serverless-es-logs serverless-plugin-ifelse serverless-kms-secrets serverless-plugin-package-json serverless-plugin-git-variables ར༻தͷϓϥάΠϯ
KANAZAWA Serverlessͷ·ͱΊ • Serverless FrameworkͰAPI࡞ૉૣ͘Ͱ͖Δ • ࠔͬͨ࣌ϓϥάΠϯΛ୳͢ • ࠷ऴखஈCloudFormationςϯϓϨʔτ
AWS Amplify ͷ֦ுੑ
ଜ্խ a.k.a @fossamgna
AWS Amplifyͱ
AWS Amplify ͱ “εέʔϧ͢ΔϞόΠϧΞϓϦ͓ΑͼΣϒ ΞϓϦΛ࠷Ͱߏங͢Δํ๏” KANAZAWA
AWS Amplify ͷߏ CLIɿAmplifyͰΞϓϦΛߏங͢ΔͨΊͷπʔϧνΣʔϯ Cloud ServicesɿΞϓϦͷόοΫΤϯυ FrameworkɿϞόΠϧɺWeb͚ͷ֤SDK Developer ToolsɿCI/CD, ϗεςΟϯάɺϞόΠϧσόΠε
ͷςετڥ KANAZAWA
Amplify CLIͱόοΫΤϯυ
Amplify CLIͷجຊίϚϯυ $ amplify init $ amplify <category> add/remove/update $
amplify push KANAZAWA
Amplify CLIͷΧςΰϦ Authentication (Cognito) Storage (S3, DynamoDB) API (API Gateway,
AppSync) Function (Lambda) KANAZAWA Analytics (Pinpoint, Kinesis) Interactions (Lex)
Amplify ͷΧελϚΠζ
Amplify ͷΧελϚΠζํ๏ •طଘΧςΰϦʔͷςϯϓϨʔτฤू •ΧελϜCloudFormationελοΫͷՃ •ϓϥάΠϯ KANAZAWA
Amplify ΧελϚΠζͷࣄྫ • S3ʹΞοϓϩʔυ͞ΕͨϑΝΠϧʹରͯ͠ CloudFrontͷॺ໊͖URLΛൃߦ • S3όέοτɺLambdaCLIͰੜͨ͠Ϧιʔ εΛར༻ KANAZAWA
ΧελϜCloudFormationελοΫͷՃ 1. CloudFormationςϯϓϨʔτϑΝΠϧͷՃ͢Δ 2. amplify/backend/backend-config.jsonͷฤू͢Δ 3. CLIʹՃͨ͠ϦιʔεΛೝࣝͤ͞Δ KANAZAWA
CloudFormationςϯϓϨʔτϑΝΠϧͷՃ amplify/backend/<category>/<resource-name>/<cloudformation-template.json/yml>ͱͯ͠ஔ͢Δ { "AWSTemplateFormatVersion": "2010-09-09", "Description": "Private content resource stack
creation using Amplify CLI", "Parameters": { "storageMediaContentBucketName": { "Type": "String", "Default": "storageMediaContentBucketName" }, }, "Resources": { "PrivteContentCloudFrontDistribution": { "Type" : "AWS::CloudFront::Distribution", "DependsOn" : [ "OriginAccessIdentity" ], …. } } KANAZAWA
amplify/backend/backend-config.jsonͷฤू { "privatecontent": { "usercontent": { "service": "CloudFront", "providerPlugin": "awscloudformation",
"dependsOn": [ { "category": "storage", "resourceName": "MediaContent", "attributes": [ "BucketName" ] } ] } }, "storage": { "MediaContent": { "service": "S3", "providerPlugin": “awscloudformation" } } KANAZAWA
CLIʹՃͨ͠ϦιʔεΛೝࣝͤ͞Δ amplify env checkout <current-env-name> Λ࣮ߦͯ͠Ճ͠ ͨϦιʔεΛCLIʹೝࣝͤ͞Δ KANAZAWA
Amplify CLIϓϥάΠϯ • Amplify CLIϓϥάΠϯͱͯ͠ߏ͞Ε͍ͯΔ • ϓϥάΠϯʹ4ͭͷλΠϓ͕͋Δ • category •
provider • frontend • util KANAZAWA
Amplify CLIϓϥάΠϯͷ࡞ • ϓϥάΠϯͷܗΛੜ͢ΔίϚϯυ͕༻ҙ͞ΕͯΔ • amplify plugin init • ϓϥάΠϯͷ໊લλΠϓͳͲ͍͔ͭ͘ͷ࣭ʹ͑Δ
ͱܗίʔυ͕ੜ͞ΕΔ KANAZAWA
Amplify CLIϓϥάΠϯͷߏ ࠷খߏͷྫ |_my-amplify-plugin/ |_commands/ | |_ help.js | |_
version.js | |_amplify-plugin.json |_index.js |_package.json KANAZAWA
ࣄྫͷAmplify CLIϓϥάΠϯ • CloudFrontΛߏ͢ΔͨΊͷϓϥάΠϯ • λΠϓcategory • ΧελϜCloudFormationελοΫͷςϯϓ Ϩʔτ࡞ɺbackend-config.jsonͷฤू͕ ϓϥάΠϯͷࣄ
KANAZAWA
Amplify CLIϓϥάΠϯͷ࣮ • ϓϥάΠϯ࣮ؔ͢Δใ·ͩ·ͩগͳ͍ • https://github.com/aws-amplify/amplify-cliͷιʔε͕࣮ͷࢀߟʹͳΔ • amplify-cli/packages/amplify-cli/src/extensions/amplify-helpers Լʹ ϓϥάΠϯΛ࣮͢Δͷʹ༗༻ͳϝιου͕ͦΖ͍ͬͯΔ
KANAZAWA
Amplify CLIͷΧελϚΠζͷ·ͱΊ • ΧελϜCloudFormationελοΫ • ྑ͍ɿຊདྷɺՃ͍ͨ͠ελοΫͱbackend-config.jsonͷฤूͷΈͰΧε λϚΠζͰ͖Δ • ΠϚΠνͳɿLambdaͷΑ͏ʹෳͷϦιʔεΛՃ͢ΔΑ͏ͳ߹࡞ ۀ͕ࡶ
• ϓϥάΠϯ • ྑ͍ɿෳͷϦιʔεΛՃ͢ΔΑ͏ͳ߹࡞ۀָ͕Ͱؒҧ͍Λى͜͠ ʹ͍͘ɻ൚༻తͳΒଞϓϩδΣΫτͰ͑ΔʢOSSʹͨ͠ΓͰ͖Δʣ • ΠϚΠνͳɿϓϩάϥϜΛॻ͘ඞཁ͕͋Δʢ࣮ίετ͕͔͔Δʣ KANAZAWA
KANAZAWA Ҏ্