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
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 Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
160
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
160
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
400
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
920
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
59
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
1.1k
みんな本当に AWS Amplify を知っている?/do-you-really-know-aws-amplify
fossamagna
0
200
Other Decks in Programming
See All in Programming
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
自作OSでスライド発表する
uyuki234
1
3.8k
スマートグラスで並列バイブコーディング
hyshu
0
290
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
190
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
150
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
190
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
530
Creating Composable Callables in Contemporary C++
rollbear
0
200
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
Contextとはなにか
chiroruxx
1
390
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
820
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
WENDY [Excerpt]
tessaabrams
11
38k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
The browser strikes back
jonoalderson
0
1.4k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Discover your Explorer Soul
emna__ayadi
2
1.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
Writing Fast Ruby
sferik
630
63k
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 Ҏ্