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
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
630
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
300
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
200
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
510
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
96
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
920
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1.1k
Other Decks in Programming
See All in Programming
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
170
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
210
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
310
GraphQL の onError と Nullability のこれから
quramy
0
210
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
16
9k
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
370
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
1.9k
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
590
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
A Tale of Four Properties
chriscoyier
163
24k
The Limits of Empathy - UXLibs8
cassininazir
2
770
How to train your dragon (web standard)
notwaldorf
96
6.9k
Code Reviewing Like a Champion
maltzj
529
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
380
Automating Front-end Workflow
addyosmani
1370
210k
The untapped power of vector embeddings
frankvandijk
2
2k
The Language of Interfaces
destraynor
162
27k
Raft: Consensus for Rubyists
vanstee
143
7.9k
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 Ҏ্