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
拡張して使うServerless&Amplify/use-with-extending-ser...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
MURAKAMI Masahiko
November 20, 2019
Programming
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
拡張して使うServerless&Amplify/use-with-extending-serverless-and-amplify
MURAKAMI Masahiko
November 20, 2019
More Decks by MURAKAMI Masahiko
See All by MURAKAMI Masahiko
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
150
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
370
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
900
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
49
CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -
fossamagna
3
3.7k
Amplify Gen2の 新機能と実践的な使用例 AWS Amplify Gen 2 Festival in Japan/New features and practical use cases in Amplify Gen2
fossamagna
0
850
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1k
みんな本当に AWS Amplify を知っている?/do-you-really-know-aws-amplify
fossamagna
0
200
Amplify OSSにコントリビュートしてAmplify Badgeを手に入れよう!/contribute-to-amplify-oss-and-get-an-amplify-badge
fossamagna
0
630
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
10
4k
Lessons from Spec-Driven Development
simas
PRO
0
190
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
250
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
CSC307 Lecture 17
javiergs
PRO
0
320
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.8k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
590
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
3.9k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
240
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
170
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
The SEO Collaboration Effect
kristinabergwall1
1
480
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Embracing the Ebb and Flow
colly
88
5.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
It's Worth the Effort
3n
188
29k
Building Adaptive Systems
keathley
44
3.1k
How to Talk to Developers About Accessibility
jct
2
230
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
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 Ҏ্