aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit

async-job / migration-runner を NodejsFunction に変更

オープン
#113 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
enhancement stale
主要言語
TypeScript
スター
229
フォーク
45
平均マージ
1分
マージ済み PR(30日)
4

説明

## 概要

DSQL + Drizzle移行(#94)により `prisma generate` が不要になり、ネイティブバイナリへの依存がなくなる。async-jobとmigration-runnerを `DockerImageFunction` から `NodejsFunction` に変更することで、ビルド時間の短縮とデプロイパッケージの軽量化が実現できる。

webappはNext.js standalone + Lambda Web Adapterの構成上 `DockerImageFunction` を維持する。starter-kitとして `DockerImageFunction` と `NodejsFunction` の両パターンを示すことで、ユーザーが用途に応じて使い分ける参考になる。

## 現状

現在、async-jobとmigration-runnerは `job.Dockerfile` を使用している。Prismaのネイティブバイナリ生成(`prisma generate`)のためにDockerマルチステージビルドが必要:

```dockerfile
# job.Dockerfile(現在)
FROM public.ecr.aws/lambda/nodejs:22 AS builder
WORKDIR /build
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci
COPY ./ ./
RUN npx prisma generate
RUN npx esbuild src/jobs/*.ts --bundle --outdir=dist --platform=node --charset=utf8 --external:@prisma/client

FROM public.ecr.aws/lambda/nodejs:22 AS runner
COPY package*.json ./
COPY prisma ./prisma
RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev
RUN npx prisma generate --generator client
COPY --from=builder /build/dist/. ./
```

## 変更内容

### async-job、migration-runner → NodejsFunction

Drizzle移行後はPrisma依存がなくなるため、`NodejsFunction` の `bundling` オプション(esbuild)で十分にバンドルできる。

```typescript
// 変更後のイメージ
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";

const handler = new NodejsFunction(this, "Handler", {
entry: join("..", "apps", "async-job", "src", "index.ts"),
handler: "handler",
runtime: Runtime.NODEJS_22_X,
architecture: Architecture.ARM_64,
bundling: {
format: OutputFormat.ESM,
},
// ...その他のプロパティは既存と同様
});
```

### job.Dockerfile の削除

async-jobとmigration-runnerが `NodejsFunction` 化すれば `job.Dockerfile` は不要になる。

### webapp は変更なし

Next.js standalone + Lambda Web Adapterの構成は `DockerImageFunction` を維持する。

## 検証方法

- async-job、migration-runnerが `NodejsFunction` としてデプロイ・実行できること
- ビルド時間が `DockerImageFunction` 比で短縮されること

## 依存関係

- DSQL + Drizzle移行が前提(Prisma依存の除去が必要)

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず、async-job と migration-runner の現在の DockerImageFunction 定義を見つけ、job.Dockerfile を確認します。前提条件として DSQL + Drizzle のマイグレーションが必要です。webapp は DockerImageFunction のままにして、これらの関数を NodejsFunction に置き換え、その後、両方のジョブがデプロイされて実行されること、およびビルド時間が短縮されることを検証します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
aws, docker, node.js, typescript
領域
build-system, cloud, infrastructure
issue の種類
リファクタリング
難易度
4/5
見積もり時間
3〜5日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
48/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。