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
120
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.4k
re:Growth 2020 Serverless
okaharuna
2
1.3k
EventBridgeでAWSとShopifyの統合
okaharuna
2
5.7k
Serverless SPA development starting with Angular
okaharuna
0
3.2k
serverlessdaysfukuoka_oka.pdf
okaharuna
1
2k
SPA×Auth0
okaharuna
5
1.9k
Fargate_Super_Introduction.pdf
okaharuna
2
3k
Other Decks in Technology
See All in Technology
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
520
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
1
110
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
0
170
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
110
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
31k
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
100
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
160
20241220_S3 tablesの使い方を検証してみた
handy
3
360
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
Featured
See All Featured
A designer walks into a library…
pauljervisheath
204
24k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Six Lessons from altMBA
skipperchong
27
3.5k
Faster Mobile Websites
deanohume
305
30k
A better future with KSS
kneath
238
17k
Optimising Largest Contentful Paint
csswizardry
33
3k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Code Reviewing Like a Champion
maltzj
520
39k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Designing for Performance
lara
604
68k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Into the Great Unknown - MozCon
thekraken
33
1.5k
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