Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
拡張して使うServerless&Amplify/use-with-extending-ser...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
590
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
260
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
190
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
490
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
1k
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
82
CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -
fossamagna
3
3.8k
Amplify Gen2の 新機能と実践的な使用例 AWS Amplify Gen 2 Festival in Japan/New features and practical use cases in Amplify Gen2
fossamagna
0
900
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1.1k
Other Decks in Programming
See All in Programming
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
440
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
760
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
AmebaブログはKMPから卒業します
kmars0605
0
210
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
330
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
170
ChromeでローカルLLM
ryu1013
0
140
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
Kotlinの15年とServer-Side Kotlin
n_takehata
1
160
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Balancing Empowerment & Direction
lara
6
1.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Being A Developer After 40
akosma
92
590k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Building the Perfect Custom Keyboard
takai
2
910
Prompt Engineering for Job Search
mfonobong
0
520
エンジニアに許された特別な時間の終わり
watany
109
250k
Facilitating Awesome Meetings
lara
57
7.2k
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 Ҏ্