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
AWS AppSyncと仲良くするためのTips
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Haruna Oka
July 10, 2024
Technology
210
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS AppSyncと仲良くするためのTips
Classmethod Odyssey Online 2024/07/09 に発表した「AWS AppSyncと仲良くするためのTips」のスライド#cm_odyssey
Haruna Oka
July 10, 2024
More Decks by Haruna Oka
See All by Haruna Oka
Next.js × AWS App Runner × AWS AppSyncで進めるクライアントファーストのWEB開発
okaharuna
7
6.3k
re:Growth 2020 Serverless
okaharuna
2
1.5k
EventBridgeでAWSとShopifyの統合
okaharuna
2
6.4k
Serverless SPA development starting with Angular
okaharuna
0
3.4k
serverlessdaysfukuoka_oka.pdf
okaharuna
1
2.3k
SPA×Auth0
okaharuna
5
2.1k
Fargate_Super_Introduction.pdf
okaharuna
2
3.3k
Other Decks in Technology
See All in Technology
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
270
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
AI・HPC開発を支えるGPU環境の新しい選択肢 液冷GPUシステム「AquSys」の取り組み
gpuunite_official
0
240
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
500
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
260
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
270
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
150
LLMアプリ、 雰囲気で運用してませんか? 〜LLMOpsの現在地〜
taka_aki
1
100
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
290
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
140
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
520
The Curse of the Amulet
leimatthew05
2
14k
Abbi's Birthday
coloredviolet
3
9.5k
GraphQLとの向き合い方2022年版
quramy
50
15k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
390
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
630
Producing Creativity
orderedlist
PRO
348
40k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
AWS AppSyncと 仲良くするためのTips 2024.07.09 フリーランスエンジニア 岡 春奈
Xへの投稿の際は、 ハッシュタグ #cm_odyssey でお願いいたします。 2 お願い
⾃⼰紹介 3 岡 春奈 / Haruna Oka バックエンドエンジニア @OkaHaruna
本⽂タイトル • 話すこと ◦ 今使っている案件でのAppSyncの話 • 話さないこと ◦ フロントの話 ◦
Amplifyの話(Gen2) 4
全体構成 5
6
AppSyncを1年使ってみた 7
アジェンダ • 構成を変えたところ • それぞれの難点‧利点 • まとめ 8
構成を変えた部分 9
構成を変えた部分 • リゾルバーの使い分けを⾒直した • オニオンアーキテクチャの導⼊ • APIの認証⽅式を変えた • バリデーションスキーマを⾃動⽣成 10
リゾルバーの種類 • ユニットリゾルバー • パイプラインリゾルバー • Lambdaリゾルバー 11
ユニットリゾルバー 12 公式Docs: AWS AppSync リゾルバー
パイプラインリゾルバー 13 公式Docs: AWS AppSync リゾルバー
Lambdaリゾルバー 14 正確にはLambdaをデータソースとし たユニットリゾルバー 公式Docs: AWS AppSync リゾルバー
リゾルバーの使い分け 15
元々の使い分け 16
開発進める中での問題点 17
開発進める中での問題点 • JSリゾルバーの制約が⾟い ◦ 組み込み関数が多々使えない • Pipelineリゾルバーのメンテがしづらい • コードサイズ制限に引っかかる 18
リゾルバーの使い分け(現状) 19
リゾルバーの使い分け(現状) • Mutation系はLambdaに統⼀ ◦ middyの導⼊ • Pipelineリゾルバーを辞めた ◦ (管理コストを下げるため) 20
リゾルバーの使い分け(現状) • 結論 ◦ Lambdaの同時実⾏数を気にしてJSリゾ ルバーに寄せていたが、Lambdaの同時 実⾏数を気にするようなアクセス数に なった時はAppSync⾃体を剥がしたほう が良さそう 21
オニオンアーキテクチャの導⼊ 22
オニオンアーキテクチャの導⼊ • Lambdaリゾルバーに寄せたことで共通化 がしやすくなった • 将来的にDBが変わる可能性も考慮してディ レクトリ構成を全体的に⾒直した 23
オニオンアーキテクチャの導⼊ • /core ◦ /domain ◦ /infrastructure • /graphql ◦
スキーマとcodegenで⽣成したファイル 24
オニオンアーキテクチャの導⼊ 25
APIの認証⽅式を変えた 26
APIの認証⽅式を変えた • APIは3つ ◦ 管理者向け: Admin API ◦ ユーザー向け: Customer
API ◦ ゲストユーザー向け: Public API 27
APIの認証⽅式を変えた • Admin API ◦ Cognitoユーザープール(グループ) • Customer API ◦
Cognitoユーザープール • Public API ◦ APIキー 28
APIの認証⽅式を変えた • Admin API ◦ Cognitoユーザープール(グループ) • Customer API ◦
Cognitoユーザープール • Public API ◦ APIキー → IAM認証に切り替えた 29
APIの認証⽅式を変えた 30
APIの認証⽅式を変えた 31
APIの認証⽅式を変えた 32
APIの認証⽅式を変えた 33
バリデーションスキーマの⽣成 34
バリデーションスキーマの⽣成 • zodを導⼊ • codegenのプラグイン ◦ typescript-validation-schema ◦ @constraintに最⼤⽂字数等を指定 35
バリデーションスキーマの⽣成 36
バリデーションスキーマの⽣成 37
他開発ツール 38
他開発ツール周り • npm → pnpm にして扱いやすくなった • APIドキュメントの⾃動⽣成 ◦ magidocで⽣成
→ Cloudflare Pagesで公開 • CDKTFの導⼊ 39
CDKTFの導⼊ • CDK for Terraformを導⼊ • ⼀部のリソースでCloudflareを使っている ◦ CDN, DNS等
• 元々はterraformでやる想定だった • CDKに合わせてCDKTFでやることに 40
CDKTFの導⼊ • ⼀部のリソースでCloudflareを使っている ◦ CDN, DNS等 • 元々はterraformでやる想定だった • CDKに合わせてCDKTFでやることに
41 →Typescriptで統⼀できて管理コストが下がった
反省点 42
反省点 • 初⼿RDSにしておくべきだった • DB設計にもっと時間をかけるべきだった • そもそもAppSyncが適していなかったかも 43
まとめ • AppSyncの開発効率を最⼤限に活⽤するな らやはりAmplifyと使うのが有⽤ • GraphQL + monorepo = 相性良し
• ⾔語をtypescriptで統⼀できた(CDKTF) 44