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
Haruna Oka
July 10, 2024
Technology
1
170
AWS AppSyncと仲良くするためのTips
Classmethod Odyssey Online 2024/07/09 に発表した「AWS AppSyncと仲良くするためのTips」のスライド#cm_odyssey
Haruna Oka
July 10, 2024
Tweet
Share
More Decks by Haruna Oka
See All by Haruna Oka
Next.js × AWS App Runner × AWS AppSyncで進めるクライアントファーストのWEB開発
okaharuna
7
5.9k
re:Growth 2020 Serverless
okaharuna
2
1.4k
EventBridgeでAWSとShopifyの統合
okaharuna
2
6.1k
Serverless SPA development starting with Angular
okaharuna
0
3.3k
serverlessdaysfukuoka_oka.pdf
okaharuna
1
2.1k
SPA×Auth0
okaharuna
5
2k
Fargate_Super_Introduction.pdf
okaharuna
2
3.2k
Other Decks in Technology
See All in Technology
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
310
Windows で省エネ
murachiakira
0
150
AIを導⼊しても、 開発⽣産性は"爆増"していない なぜ?
kinosuke01
4
3.6k
避けられないI/O待ちに対処する: Rails アプリにおけるSSEとasync gemの活用 / Tackling Inevitable I/O Latency in Rails Apps with SSE and the async gem
moznion
2
1.8k
GopherCon Tour 概略
logica0419
2
160
20250929_QaaS_vol20
mura_shin
0
110
AWSのProductのLifecycleについて
stknohg
PRO
0
300
Tomorrow graphlib, Let us use everybody
hayaosuzuki
0
150
非エンジニアのあなたもできる&もうやってる!コンテキストエンジニアリング
findy_eventslides
3
850
今改めてServiceクラスについて考える 〜あるRails開発者の10年〜
joker1007
20
9.3k
5年間のFintech × Rails実践に学ぶ - 基本に忠実な運用で築く高信頼性システム / 5 Years Fintech Rails Retrospective
ohbarye
9
3.6k
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
540
Featured
See All Featured
Building Adaptive Systems
keathley
43
2.8k
Music & Morning Musume
bryan
46
6.8k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Designing Experiences People Love
moore
142
24k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
RailsConf 2023
tenderlove
30
1.2k
We Have a Design System, Now What?
morganepeng
53
7.8k
How to train your dragon (web standard)
notwaldorf
96
6.2k
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