【Lambda】Prisma経由でSupabaseをマイグレーションする方法【Docker】


LambdaからPrisma経由でSupabaseをマイグレーションすることは可能?
この記事では、Dockerで作成したLambdaからPrismaを経由してSupabaseにマイグレーションを実行する方法を紹介します。
手順は以下の通りです。
- 記事の前提
- 実装方法
最後までご覧いただき、参考にしていただけると幸いです。
スポンサーリンク
記事の前提
この記事では、LambdaやECRへのプッシュ方法、またSupabaseプロジェクトの作成手順については詳細に紹介していません。
Dockerを使用してLambdaにデプロイできることを前提としています。
スポンサーリンク
実装方法
それでは実装方法を紹介します。
Supabaseプロジェクトの作成
詳細なSupabaseプロジェクトの作成手順については省略しますが、以下の手順でプロジェクトを作成し、DATABASE_URLを取得します。
- Supabaseコンソールにアクセスし、新しいプロジェクトを作成します。
- プロジェクトが作成されたら、Supabaseコンソールの Project Settings -> Database セクションに移動します。
- Connection string のURIをコピーし、[YOUR-PASSWORD] 部分をプロジェクト作成時に設定したデータベースパスワードに置き換えます。
このようにして完成した DATABASE_URL は、後ほどLambdaの環境変数として設定します。
package.jsonの作成
Node.jsを使用するため、Lambdaプロジェクトのルートにpackage.jsonを作成し、最低限の内容を記述します。
{
"name": "lambda-container",
"license": "MIT"
}
この状態で npm install を実行し、package-lock.json を生成します。
prismaのインストール
次に、以下のコマンドでPrismaとPrismaクライアントをインストールします。
npm install prisma
npm install @prisma/client
インストールが完了し、node_modules が生成されたら、npx prisma init を実行してPrismaの初期設定を行い、prisma/ ディレクトリを作成します。
schema.prismaの実装
schema.prisma に、マイグレーションしたいデータモデルを記述します。以下は例です。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
Dockerfileの作成
LambdaをDockerで実装するために、プロジェクトのルートに Dockerfile を作成します。
FROM public.ecr.aws/lambda/nodejs:16
COPY index.js package.json package-lock.json /var/task/
COPY prisma/ /var/task/prisma/
RUN npm install
RUN npx prisma generate
CMD ["index.handler"]
Lambdaの最低限のコードに加えて、prisma/ ディレクトリをコピーし、npx prisma generate でクライアントを生成します。
index.jsの作成
最後にプロジェクトルートにLambdaのコードを実装します。PrismaClientをインポートし、Supabaseを操作できるようにします。
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
exports.handler = async (event) => {
// ここにLambda処理を実装
};
完成形
最終的なディレクトリ構成は以下のようになります。
/
├─ node_modules/
├─ prisma/
└─ schema.prisma
├─ Dockerfile
├─ index.js
├─ package.json
├─ package-lock.json
デプロイ
最後にECRを通してLambdaをデプロイします。詳細な手順は省略しますが、以下の流れで進めます。
- ECRへのDockerコンテナのプッシュ
Dockerイメージをビルドし、ECRリポジトリにプッシュします。 - Lambdaへのデプロイ
ECRリポジトリからLambda関数を作成します。 - 環境変数の設定
Supabaseと連携するために、DATABASE_URL をLambda関数の環境変数として設定します。この値はSupabaseのコンソールから取得したConnection stringです。
スポンサーリンク
最後に
ここまで、LambdaからPrismaを経由してSupabaseにマイグレーションを実行する方法について紹介しました。
最初は難易度が高そうに感じていましたが、Dockerを利用することで、思ったよりも簡単に実装できました。
Dockerは偉大です。
ここまでお読みいただき、ありがとうございました。
スポンサーリンク
スポンサーリンク