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
Amplifyで始めるサーバレス開発/serverless-development-start...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
MURAKAMI Masahiko
November 30, 2020
Programming
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amplifyで始めるサーバレス開発/serverless-development-starting-with-amplify
MURAKAMI Masahiko
November 30, 2020
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
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
Performance Engineering for Everyone
elenatanasoiu
0
270
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
830
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.3k
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.4k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
160
Webフレームワークの ベンチマークについて
yusukebe
0
200
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
110
スマートグラスで並列バイブコーディング
hyshu
0
290
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
200
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
680
The Cult of Friendly URLs
andyhume
79
6.9k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Are puppies a ranking factor?
jonoalderson
1
3.7k
Automating Front-end Workflow
addyosmani
1370
210k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
YesSQL, Process and Tooling at Scale
rocio
174
15k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Transcript
Amplifyで始める サーバレス開発 ESM MEETUP!! 2020-11-27 村上雅彦
村上雅彦 a.k.a @fossamagna
Amplifyとは
Amplifyとは “スケールするモバイルアプリ およびウェブアプリを最速で 構築する方法”
Amplifyの構成 CLI:Amplifyでアプリを構築するためのツール チェーン Cloud Services:アプリのバックエンド Framework:モバイル、Web向けの各SDK Developer Tools:CI/CD, ホスティング、モバイ ルデバイスのテスト環境
Amplifyのはじめ方 1. フロントエンドのプロジェクト作成 2. Amplify CLIでクラウドサービス(バックエンドリソース)を追加 3. Amplify CLIでクラウドに反映 4.
フロンドエンドからクラウドサービスを利用するコードを追加
Amplifyのはじめ方 (ストレージとしてS3を追加する場合) $ npx vue create my-project # Vue.jsのプロジェクト作成 $
amplify init # Amplifyプロジェクトの初期化 $ amplify storage add # ストレージを追加 $ amplify push # 追加したリソースをクラウドに反映
Amplifyのはじめ方 (Vue.jsで画像をS3にアップロードする場合) <template> <input type="file" accept="image/png" @change="upload" /> </template> <script
lang="ts"> import { defineComponent } from 'vue'; import { Storage } from 'aws-amplify'; export default defineComponent({ setup() { const upload = async (e: Event) => { const input = e.target as HTMLInputElement; const file = input && input.files ? input.files[0] : null; if (!file) return; const result = await Storage.put(file.name, file); # S3にアップロード console.log(result); }; return { upload } } }); </script>
Amplifyのカテゴリー • auth (Amazon Cognito) • storage (Amazon S3 &
Amazon DynamoDB) • function (AWS Lambda) • api (AWS AppSync & Amazon API Gateway) • analytics (Amazon Pinpoint) • hosting (Amazon S3 and Amazon CloudFront distribution) • notifications (Amazon Pinpoint) • interactions (Amazon Lex) • predictions (Amazon Rekognition, Amazon Textract, Amazon Translate, Amazon Polly, Amazon Transcribe, Amazon Comprehend, and Amazon SageMaker)
awesome list • dabit3/awesome-aws-amplify: Curated list of AWS Amplify Resources
• watilde/awesome-aws-amplify-ja: 日本語で書かれているAWS Amplifyのツール、チュートリアル、記事などのリンク集
Amplifyのカスタマイズ • Amplifyは多くの機能を提供している • 活発に開発されていて頻繁に新機能追加もある • だたし、自分の要件に100%あうとはかぎらない • 足りない部分はカスタマイズできるようになっている
Amplifyのカスタマイズ方法 • 既存カテゴリーのテンプレート編集 • カスタムCloudFormationスタックの追加 • プラグイン
既存カテゴリーのテンプレート編集 (Lambdaに環境変数を渡す場合) { "Parameters": { "RoleArn": { "Type": "String", "Default":
"<default role ARN>" } } … "Resources": { "LambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Environment": { "RoleArn": { "Ref": "RoleArn" } } } } } } { "EndpointURL": "<role ARN override>" } parameters.json lambda-template.json
カスタムCloudFormationスタックの追加 1. CloudFormationテンプレートファイルの追加する 2. amplify/backend/backend-config.jsonの編集する 3. CLIに追加したリソースを認識させる
カスタムCloudFormationスタックの追加 (CloudFront署名付きURLで画像共有する事例) • S3にアップロードされたファイル に対してCloudFrontの署名付き URLを発行 • S3バケット、LambdaはCLIで生 成したリソースを利用
CloudFormationテンプレートファイルの追加 { "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" ], …. } } amplify/backend/<category>/<resource-name>/<cloudformation-template.json/yml>として配置する
amplify/backend/backend-config.jsonの編集 { "privatecontent": { "usercontent": { "service": "CloudFront", "providerPlugin": "awscloudformation",
"dependsOn": [ { "category": "storage", "resourceName": "MediaContent", "attributes": [ "BucketName" ] } ] } }, "storage": { "MediaContent": { "service": "S3", "providerPlugin": “awscloudformation" } }
CLIに追加したリソースを認識させる amplify env checkout <current-env-name> を実行して追加したリソー スをCLIに認識させる
Amplify CLIプラグイン • Amplify CLIはプラグインとして構成されている • プラグインには4つのタイプがある ◦ category ◦
provider ◦ frontend ◦ util
Amplify CLIプラグインの作成 • プラグインの雛形を生成するコマンドが用意されてる ◦ amplify plugin init ◦ プラグインの名前やタイプなどいくつかの質問に答えると雛形コード
が生成される
Amplify CLIプラグインの構成 プラグインのディレクトリ構成 |_my-amplify-plugin/ |_commands/ # サブコマンド | |_help.js |
|_version.js | |_event-handlers/ # プラグインライフサイクルイベントのハンドラ | |_handle-PostPush.js | |_handle-PrePush.js | |_amplify-plugin.json # プラグインのメタ情報 |_index.js # プラグインエントリーポイント |_package.json
Amplify CLIプラグインの実装例 (CloudFront署名付きURLで画像共有する事例) • CloudFrontを構成するためのプ ラグイン • タイプはcategory • カスタムCloudFormationスタック
のテンプレート作成、 backend-config.jsonの編集が プラグインの仕事
Amplify CLIプラグイン実装のヒント • https://github.com/aws-amplify/amplify-cliのソースが実装の参考 になる • サードパーティプラグインのソースも参考になる • amplify-cli/packages/amplify-cli/src/extensions/amplify-help ers
配下にはプラグインを実装するのに有用なメソッドがそろっている
Amplify CLIのカスタマイズのまとめ • カスタムCloudFormationスタック ◦ 本来、追加したいCloudFormationスタックとbackend-config.jsonの編集 のみでカスタマイズできる • プラグイン ◦
複数のリソースを追加するような場合は作業が楽で間違いを起こしにくい。汎 用的なら他プロジェクトでも使える(OSSにしたりもできる) ◦ amplify cliのライフサイクルに合わせて実行したいならプラグイン!