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
AIサービス立ち上げにAWS Amplifyを使ってわかったPros & Cons
Search
tsmiyamoto
August 26, 2022
Technology
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AIサービス立ち上げにAWS Amplifyを使ってわかったPros & Cons
シード期の人的・資金的リソースが少ない中で「AWS Amplify」を選定することの是非について纏めました。
結論、「Amplifyの採用はあり」という持論を持っています。
tsmiyamoto
August 26, 2022
More Decks by tsmiyamoto
See All by tsmiyamoto
SageMakerが対応していないアルゴリズムの学習をECRで行ってノーコードAIプラットフォームを作った|株式会社TechSword
tsmiyamoto
0
630
SageMakerとIoT GreengrassとAmplifyで作るノーコードエッジAIプラットフォーム
tsmiyamoto
1
1.3k
Other Decks in Technology
See All in Technology
品質と信頼性を地続きにする
grimoh
2
800
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
220
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
130
SREは、MCPとAutopilotをこう使え!
kazumax55
3
900
Goodbye ShellScript, Hello File-based App
shunsock
0
280
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.5k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
390
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
0
210
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
6
3.1k
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
190
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
110
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
The Language of Interfaces
destraynor
162
27k
HDC tutorial
michielstock
2
870
GraphQLとの向き合い方2022年版
quramy
50
15k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Making Projects Easy
brettharned
120
6.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Designing Experiences People Love
moore
143
24k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Transcript
A I サ ー ビ ス 立 ち 上 げ
に AWS Am p lif y を 使 っ て わ か っ た Pros & Co ns 株 式 会 社 T e c h S w o r d 取 締 役 C T O 宮本 大輝
Contents ▪自己紹介 ▪サービス概要 ▪Amplifyとは ▪Pros & Cons & Tips ▪おわりに
Self Introduction 自己紹介
自己紹介 宮本 大輝 みやもと たいき ▪ 株式会社TechSword 取締役CTO ▪ 岡山大学大学院自然科学研究科
▪ 楕円曲線暗号に関する研究 ▪ ssh-keygen –t ed25519のやつ ▪ バックグラウンド ▪ アメリカでの研究インターンシップで機械学習に触れる ▪ IoTスタートアップ・ソラコムでのインターン
好きなAWSサービス Amazon SageMaker AWS IoT Greengrass AWS Amplify
本登壇の目的 ▪シード期スタートアップのプロダクト開発においてAmplifyを 選定することの利点&欠点 結論 ▪スピード感を持って開発するならAmplifyは大いにあり
About Our Service サービス概要
名称 株式会社TechSword 住所 〒700-8530 岡山県岡山市北区 津島中3丁目1番1号 会社概要 事業内容 ノーコードAIプラットフォームの開発・販売 設立
2021年5月19日 代表者 長島慶樹
ノーコードAIプラットフォーム TechSword Platform ▪ 知識0・スキル0でも画像認識AIを開発 ▪ 容易な実装が可能 ▪ 安価な導入コスト
None
アーキテクチャ
About AWS Amplify AWS Amplifyとは
AWS Amplifyとは? (スケーラビリティとコストに配慮しつつ) サクッとアプリ開発ができるサービス
Amplifyの構成要素 https://speakerdeck.com/jaguar_imo/aws-amplify-overview-in-brief?slide=8
Amplifyがラップするサービス Cognito DynamoDB AppSync S3 Lambda API Gateway Kinesis Pinpoint
Sumerian Elasticsearch Location Service Translate 認証・認可 DB GraphQL ストレージ 関数 REST API 分析 通知 AR/VR 全文検索 Geo 翻訳 etc・・・ 基本&主要機能
Pros & Cons & Tips 利点と欠点とTips
利点 ▪爆速開発 ▪開発環境の構築が容易 ▪サーバーレス構成となる ▪型安全な開発
利点① 爆速開発 サービスに必要な 認証・ストレージ・データベースを AWSのベストプラクティスに則って CLIでコマンドを実行するだけで構築
Amplify CLI ▪CloudFormationテンプレートを生成 ▪ amplify push で反映 $ amplify add
auth $ amplify add storage $ amplify add api
CI/CD ▪GitHub等との接続だけでCI/CD
PRごとにレビュー
enough? 🤔 AWSで同じことをやれるならそれがいいのでは? ▪Activateを利用することでコスト0 ▪ただし、パフォーマンスの差は未検証
ローカルモック $ amplify mock ▪ローカルでAPI・ストレージ・認証を再現 ▪毎回 amplify push をする必要なし ▪
1回のpushで大体2~5分は要する(そんなに待てない)
開発環境の構築が容易 1. Dev containerをビルド 1. TypeScript-nodeイメージをpull 2. Javaをインストール(for Amplify mock)
3. pipenv/pyenvをインストール(for Python Lambda) 4. amplify cliをインストール 2. amplify pull --appid abcdxyz –envName dev 3. npm start
総じて アプリケーションの機能開発以外のところに 脳みそも時間も使わなくていい CTO1人+非フルコミットメンバー4人で 半年で正式版リリース
利点② サーバーレス構成となる Pay-as-you-go (使った分だけ課金)
シード期のスタートアップ ▪AWSの利用料金はできるだけ減らしたい ▪ Activateのクレジットもできるだけ節約 ▪ユーザーが少ない段階で、EC2など立てるだけで課金される サービスは少し痛い ▪ もちろん、必要ならば使う サーバーレスで実現すれば安い (トラフィックが増えたとしても?🤔)
サーバーレス構成にすることで ▪スケーリングも(そんなに)気にしなくてもよい https://www.ragate.co.jp/blog/articles/5505
利点③ 型安全な開発 GraphQLのクエリ変数やレスポンスの 型を自動生成
開発の流れ 1. schema.graphqlにデータ構造を定義 ▪ nullable or non-nullable ▪ 他テーブルとのrelation 2.
amplify mock ▪ 内部ではamplify codegenが実行 ▪ API.ts(型定義)とqueries.ts, mutation.ts, subscription.tsが生成 3. 型定義に沿ってquery/mutationを実行 type Project @model { id: ID! name: String team: Team @hasOne } type Team @model { id: ID! name: String! } const project = { name: “New project", team: “uuidv4" }; await API.graphql(graphqlOperation(createProject, {input: project}));
Amplify Graphqlの恩恵 ▪定義をもとに自動生成されることで、人為的ミスがなくなる ▪RDBMSと似たリレーション ▪ ただし、設計パターンは複数あり ▪ シングルテーブル ▪ マルチテーブル
▪ https://aws.amazon.com/jp/blogs/news/single-table-vs-multi-table- dynamodb-appsync/
欠点 ▪GraphQL + AppSyncの取り扱い ▪Cognitoのエイリアス属性 ▪環境の共有が難しい ▪柔軟性の低さ ハマりポイント
①GraphQL + AppSyncの取り扱い ▪list系query 良さげ?👀 allTodos取ってこれないことがある!😭 const allTodos = await(
API.graphql({ query: queries.listTodos }) as Promise<ListTodoResult> );
なぜなら ▪list系queryは必ず全部取ってくることを保証しない ▪実績として、たった5個のitemsでもlistAllできないことがあった ▪ フロントから見ると「あれ、データ消えた!?」となってしまう 必ず全部取ってこないといけない場合は とする(たとえ5個、10個でも) do {listHoge} while(nextToken)
GraphQLのDepthにも注意 発生した問題 ▪ Amplify: Resolver invocation limit reached. 原因 ▪
一部の深いネストのデータを取るためにAPIのdepthを7にしていた ▪ モデルの中に循環参照がある関係で、1回のQueryで取ってくるデータが とんでもないことに type Model @model @auth(rules: [{ allow: owner }]) { id: ID! name: String! status: ModelStatus! type: ModelType! images: [Image] @connection(keyName: "byModel", fields: ["id"]) ・ ・ } type Image @model @auth(rules: [{ allow: owner }]) @key(name: "byModel", fields: ["modelID"]) { id: ID! modelID: ID! model: Model @connection(fields: ["modelID"]) width: Int! height: Int! ext: String! objects: [Object] @connection(keyName: "byImage", fields: ["id"]) }
None
GraphQLのDepth ▪デフォルトの2に ▪深くまで取ってくる必要があるときは独自でQueryを書く
②Cognitoのエイリアス属性 ▪エイリアス属性は 後から変更できない! https://hiroga.hatenablog.com/?page=1569198704
対処策 ▪まだアカウント数が片手で数えられるくらいだったので… ▪ Cognitoを完全に初期化して再セットアップ ▪Amplify上でのやり方 ▪ 通常通りamplify add authを実行 ▪
サインイン方法はUsernameを想定(←このUsernameは変更不可) ▪ (projectRoot)/amplify/backend/auth/testapp/cli-inputs.json の一部を次のように変更 ▪ "aliasAttributes": ["email", "preferred_username"], ▪ この変更はAmplify CLIを通してはできないので、jsonを書き換える他ない(もし くは後述のCDKか?)
③環境の共有が難しい ▪toB向けアプリあるある 一般ユーザー 用 アプリ 管理者 用 アプリ
amplify import storage ▪いい感じに別プロジェクトのDynamoDBをインポートしてくれそ うな雰囲気があるが… ▪DynamoDBへのアクセス権をプロジェクトにインポートするのみ で、AppSync(GraphQL)が共有されるわけではない ▪ 結果的にExpress+Node.jsやFastAPI+PythonでREST APIサーバーを
構築する必要あり ▪ それなら最初からREST API組んだ方がいいかも…
④柔軟性の低さ ▪Amplifyが対応していないものを別で作成しなければならない ▪ 例えば、S3/DynamoDB/Cognito以外のLambdaトリガーを設定したい とき ▪サブドメインによるマルチテナント運用は(たぶん)できない ▪ Slackでいうtechsword.slack.comなど ▪送信元IPに基づいたルーティングなど、インフラ寄りのことを 触るのは無理
ただし🖐️
進むCDK対応 上手くやれるかも🦆
To the End おわりに
まとめ ▪スピード感が求められるスタートアップの初期フェーズ においてAmplifyは最適 ▪TypeScriptとの相性もGood👍 ▪GraphQL+AppSyncの仕様には注意 ▪柔軟性の観点からCDKの活用 or 脱Amplifyの時は来る かもしれない
エンジニア BizDev 絶賛募集中!
メディア出演 ▪NewsPicksのメイクマネーに出演 https://www.youtube.com/watch?v=MrBfP3I8hQ0
キーワード React TypeScript AI IoT ソラコム エッジ NVIDIA Jetson MLOps
Python 物体検出 教師なし 異常検知
こんな人と働きたい! ▪スーパーフレックスの会社で自発的に働きたい方 ▪エッジデバイスなど、ハードウェアも好きな方 ▪AIの民主化に興味がある方 ▪オーナーシップを持って開発をしたい方
How to contact me Feel free to reaching me out💬