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

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

スポンサーリンク

記事内に広告が含まれています。
吹き出しのイメージ

LambdaからPrisma経由でSupabaseをマイグレーションすることは可能?

この記事では、Dockerで作成したLambdaから、Prismaを経由してSupabaseにマイグレーションを実行する方法を紹介します。

手順は以下の通りです。

  • 記事の前提
  • 実装方法

最後までご覧いただき、参考にしていただけると幸いです。

スポンサーリンク

記事の前提

この記事では、LambdaやECRへのプッシュ方法、またSupabaseプロジェクトの作成手順については詳細には紹介していません。

Dockerを使用してLambdaにデプロイできることを前提としています。

スポンサーリンク

実装方法

それでは実装方法を紹介します。

Supabaseプロジェクトの作成

詳細なSupabaseプロジェクトの作成手順については省略しますが、以下の手順でプロジェクトを作成し、DATABASE_URLを取得します。

  1. Supabaseコンソールにアクセスし、新しいプロジェクトを作成します。
  2. プロジェクトが作成されたら、Supabaseコンソールの Project Settings -> Database セクションに移動します。
  3. 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をデプロイします。詳細な手順は省略しますが、以下の流れで進めます。

  1. ECRへのDockerコンテナのプッシュ
    Dockerイメージをビルドし、ECRリポジトリにプッシュします。
  2. Lambdaへのデプロイ
    ECRリポジトリからDockerイメージを使用してLambdaを作成します。
  3. 環境変数の設定
    Supabaseと連携するために、DATABASE_URL をLambdaの環境変数として設定します。この値はSupabaseのコンソールから取得したConnection stringです。

スポンサーリンク

最後に

ここまで、LambdaからPrismaを経由してSupabaseにマイグレーションを実行する方法について紹介しました。

最初は難易度が高そうに感じていましたが、Dockerを利用することで、思ったよりも簡単に実装できました。

Dockerは偉大です。

ここまでお読みいただき、ありがとうございました。

スポンサーリンク

シェアする

フォローする

リアル大学生 - にほんブログ村人気ブログランキング

スポンサーリンク