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
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
110
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
20260912_スクラムにジェネラリストは必要か
ryugen04
0
290
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.4k
enechainの内製セルフサービスプラットフォーム
hiyosi
0
150
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
120
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
1
460
AI時代に顧客へ最速で価値を 届けるための試行錯誤 〜「AI × マネジメント」領域におけるmentoのケース〜
posterkeisuke
0
110
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
150
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
150
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
140
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
250
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Leo the Paperboy
mayatellez
8
2.3k
KATA
mclloyd
PRO
35
15k
Docker and Python
trallard
47
4.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
420
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💬