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
Next.js × AWS App Runner × AWS AppSyncで進めるクライアン...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Haruna Oka
September 23, 2023
Programming
6.3k
7
Share
Next.js × AWS App Runner × AWS AppSyncで進めるクライアントファーストのWEB開発
2023/09/23に開催されたServerlessDays Tokyo 2023で登壇した資料です
Haruna Oka
September 23, 2023
More Decks by Haruna Oka
See All by Haruna Oka
AWS AppSyncと仲良くするためのTips
okaharuna
1
190
re:Growth 2020 Serverless
okaharuna
2
1.4k
EventBridgeでAWSとShopifyの統合
okaharuna
2
6.3k
Serverless SPA development starting with Angular
okaharuna
0
3.4k
serverlessdaysfukuoka_oka.pdf
okaharuna
1
2.2k
SPA×Auth0
okaharuna
5
2.1k
Fargate_Super_Introduction.pdf
okaharuna
2
3.3k
Other Decks in Programming
See All in Programming
t *testing.T は どこからやってくるの?
otakakot
1
910
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
140
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
140
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
4.6k
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
660
Programming with a DJ Controller — not vibe coding
m_seki
3
800
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
1.6k
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
480
The Less-Told Story of Socket Timeouts
coe401_
3
1k
My daily life on Ruby
a_matsuda
3
190
cloudnative conference 2026 flyle
azihsoyn
0
130
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
180
30 Presentation Tips
portentint
PRO
1
290
Done Done
chrislema
186
16k
Documentation Writing (for coders)
carmenintech
77
5.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Balancing Empowerment & Direction
lara
6
1.1k
Why Our Code Smells
bkeepers
PRO
340
58k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
630
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Evolving SEO for Evolving Search Engines
ryanjones
0
190
How to Think Like a Performance Engineer
csswizardry
28
2.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
370
Transcript
Next.js × AWS App Runner × AWS AppSync で進める クライアントファーストのWEB
開発 岡 春奈
自己紹介 名前: 岡 春奈 Twitter: @OkaHaruna 職業: フリーランスエンジニア 趣味:
猫とラーメン
今入っている案件のアーキテクチャをベースに話します バックエンド周り(AppSync) の話がメインです 本日の内容について
アーキテクチャー図
CDN はクローリング対策のためCloudflare を選択 Auth0 は高すぎて断念 Workers, R2 も検討対象になったが冒険になってしま うため断念 技術スタックの選定理由
Amplify に頼らないAppSync 構築 リゾルバー実装 GraphQL Code Generator の活用 AppSync Topic
Amplify に頼らないAppSync 構築 IaC はCDK を利用 とは言いつつ実は当初はAmplify CLI で構築されていた (
初期構築時フロントメンバーしかいなかった為) カスタマイズ性と長期運用を見越してCDK に移行
2022/11 にJavaScript リゾルバーがリリース CDK のカスタムコンストラクタを利用してデプロイ時 にコンパイル 利用するリゾルバは3 種類 ユニットリゾルバー パイプラインリゾルバー
Lambda リゾルバー リゾルバー実装
リゾルバー実装 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html 公式でesbuild を使う方法を 紹介してるのでこれに倣う
リゾルバー実装(ビルド用のutility )
リゾルバー実装(ユニットリゾルバー)
リゾルバー実装(パイプラインリゾルバー)
リゾルバー実装(Lambda リゾルバー)
@aws-appsync/utils/dynamodb がアップデート リゾルバー実装 - DynamoDB にアクセス -
@aws-appsync/utils/dynamodb がアップデート リゾルバー実装 - DynamoDB にアクセス -
@aws-appsync/eslint-plugin でリゾルバーのチェック (esbuild-plugin-eslint でビルド時に実行も可) リゾルバー実装 - Lint -
基本的にはユニットリゾルバーで済ませる 認証の処理を挟むときはパイプラインリゾルバー Lambda リゾルバーも必要になった時のみ 例) 署名付きURL の発行、等 管理コストを下げるため 同時実行数を気にしたくないため リゾルバーの使い分け
util.autoUlid() を使ってID はULID に統一 ID で時系列のソートが可能 TransactWriteItems 等、1 つの関数内で複数のデータソ ースにアクセスしたい時は
dataSource.grantPrincipal.addToPrincipalPolicy() リゾルバーのTips
urql を利用 Apollo よりもシンプルに実装できるため エンドポイント毎の認証切り替えには @urql/exchange-auth を使う GraphQL クライアント
operation ファイルはAmplify で生成 (query GetContent($id: ID!)... の定義ファイル) plugin を使ってurql のhook
まで自動生成 typescript typescript-operations typescript-urql CodegenConfig.hooks.afterAllFileWrite で整形 GraphQL Code Generator の活用
デフォルトで構造化ログが出力される →CloudWatch Insight で検索可能 開発環境はfieldLogLevel をALL にしておく xrayEnabled でxray を有効化しておく
他Tips
開発プロセスについて
Next.js, CDK, API 全てTypescript の為モノレポに 管理ツールにTurborepo を選択した理由 Nx はオーバースペックだった 必要以上に設定を共通化せず開発に支障が出ないのを
第一に Prettier はルートで共通化( 分けたかったらoverrides) ESLint は各パッケージで実行、等 Turborepo でのモノレポ管理
AWS のリソースは全てCDK に集約 Cloudflare のリソースはTerraform で実装中 IaC - CDK とTerraform
-
環境毎のアカウントにOIDC でアクセスしてデプロイ CI/CD
速度重視のためトランクベースを採用 AWS の公式Doc でも「Gitflow はレガシー」と書か れているため https://docs.aws.amazon.com/prescriptive- guidance/latest/strategy-cicd-litmus/fully- cicd-process-differences.html CI/CD
もう少しCloudflare 使っていきたい テストやエミュレートがしづらい npm workspace 辛い(pnpm かbun に移行したい) 頻繁な仕様変更に伴うDynamoDB の設計が難しい
課題感
MVP 開発とサーバーレスは相性抜群 Amplify はライブラリだけ局所的に使うのがおすすめ GraphQL とREST は今後も使い分けていく まとめ