コンテンツにスキップ
NextAuth.js v4 からの移行ですか?こちらをご覧ください 移行ガイド.

DynamoDBアダプター

リソース

セットアップ

インストール

npm install @auth/dynamodb-adapter @aws-sdk/lib-dynamodb @aws-sdk/client-dynamodb

環境変数

AUTH_DYNAMODB_ID=accessKey
AUTH_DYNAMODB_SECRET=secretKey
AUTH_DYNAMODB_REGION=eu-west-1

設定

モジュール式のaws-sdk v3からDynamoDBDocumentクライアントをアダプターに渡す必要があります。デフォルトのテーブル名はnext-authですが、アダプターの2番目のパラメーターとして{ tableName: 'your-table-name' }を渡すことでカスタマイズできます。

./auth.ts
import NextAuth from "next-auth"
import { DynamoDB, DynamoDBClientConfig } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocument } from "@aws-sdk/lib-dynamodb"
import { DynamoDBAdapter } from "@auth/dynamodb-adapter"
 
const config: DynamoDBClientConfig = {
  credentials: {
    accessKeyId: process.env.AUTH_DYNAMODB_ID,
    secretAccessKey: process.env.AUTH_DYNAMODB_SECRET,
  },
  region: process.env.AUTH_DYNAMODB_REGION,
}
 
const client = DynamoDBDocument.from(new DynamoDB(config), {
  marshallOptions: {
    convertEmptyValues: true,
    removeUndefinedValues: true,
    convertClassInstanceToMap: true,
  },
})
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: []
  adapter: DynamoDBAdapter(client),
})

AWS認証情報

AWSサービス/リソースへのアクセスを許可する場合は、常に最小権限の原則に従ってください。つまり、IDは特定のタスクを実行するために必要な最小限のアクションのみを実行できるようにする必要があります。

  1. AWSコンソールを開き、「IAM」次に「ユーザー」に移動します。
  2. 新しいユーザーを作成します。このユーザーの目的は、DynamoDBへのプログラムによるアクセスを許可することです。
  3. アクセスキーを作成し、キーIDとシークレットを.env/.env.localファイルにコピーします。
  4. 「アクセス許可の追加」と「インラインポリシーの作成」を選択します。
  5. 以下のJSONをJSON入力にコピーし、regionaccount_id、およびtable_nameを自分の値に置き換えます。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DynamoDBAccess",
      "Effect": "Allow",
      "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:Describe*",
        "dynamodb:List*",
        "dynamodb:PutItem",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:Scan",
        "dynamodb:Query",
        "dynamodb:UpdateItem"
      ],
      "Resource": [
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}",
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}/index/GSI1"
      ]
    }
  ]
}

高度な使い方

IaCテンプレート

以下は、DynamoDBを起動するのに役立つ、一般的なプロバイダー向けのInfrastructure-as-Codeテンプレートです。

デフォルトスキーマ

テーブルはシングルテーブル設計パターンに従います。これには多くの利点があります。

  • 管理、監視、プロビジョニングが必要なテーブルは1つだけです。
  • (例:ユーザーのすべてのセッションを取得するなど)関係のクエリは、マルチテーブルスキーマよりも高速です。
  • マルチリージョン化する場合は、レプリケートする必要があるテーブルは1つだけです。

DynamoDB Table

デフォルトでは、アダプターはパーティションキーpkとソートキーsk、およびパーティションキーとしてGSI1PK、ソートキーとしてGSI1SKを持つGSI1という名前のグローバルセカンダリインデックスを持つテーブルを想定しています。dynamodb TTLを使用して、期限切れになったセッションと検証リクエストを自動的に削除するには、属性名expiresTTLを有効にする必要があります。テーブル名と課金方法は自由に設定できます。完全なスキーマは、以下のテーブル構造セクションにあります。

カスタムスキーマの使用

アダプターのコンストラクターにoptionsキーを渡すことで、カスタムテーブルスキーマを設定できます

./auth.js
const adapter = DynamoDBAdapter(client, {
  tableName: "custom-table-name",
  partitionKey: "custom-pk",
  sortKey: "custom-sk",
  indexName: "custom-index-name",
  indexPartitionKey: "custom-index-pk",
  indexSortKey: "custom-index-sk",
})
Auth.js © Balázs Orbán and Team -2024