amplify init不要: Next.jsとAmplifyUIで既存のCognito使って認証だけしたい

やりたいこと

  • Cognitoのユーザプールは別で作成済みで、amplifyを使ってのリソース作成や管理は「しない」
  • Next.jsのアプリケーションは別で作成済み

という条件で、AmplifyUIのうち認証のとこだけ使いたい(要は Authenticator | Amplify UI for React だけ使う)ということです。

これが以外と情報を探すのに手間取ったので、自分でメモしておきます。

確認した環境は以下の通り。

"next": "13.3.1"
"@aws-amplify/ui-react": "^4.6.0"

先に結論

amplify initamplify add auth を実行する必要はない。

必要なのは @aws-amplify/ui-react のインストールと、CognitoユーザプールのIDなどを環境変数として定義し、それをアプリで読み込むようにすることのみ。

手順

amplify UI のインストール

公式ドキュメントに従ってインストールする。

Installation | Amplify UI for React

npm install @aws-amplify/ui-react aws-amplify
# または
yarn add @aws-amplify/ui-react aws-amplify

環境変数の設定

Next.jsの場合は NEXT_PUBLIC_*** という接頭辞がある変数であればクライアントサイドで参照できる。

Next.js で環境変数を扱う (.env, NEXT_PUBLIC, NODE_ENV)|まくろぐ

Cognitoユーザプールの情報をNEXT_PUBLIC_hogehogeで定義していく。

補足)ここで定義する情報はクライアント側に漏れても問題のない情報なのでNEXT_PUBLICで定義するが、クライアント側に漏れてまずいような値を定義するときにはNEXT_PUBLICは使えませんというか使ったらだめです。

/project_root/.env.local などに以下を定義する。

NEXT_PUBLIC_AWS_PROJECT_REGION=ap-northeast-1
NEXT_PUBLIC_AWS_COGNITO_REGION=ap-northeast-1
NEXT_PUBLIC_AWS_USER_POOL_ID=ap-northeast-1_abcdefghijklmn
NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID=abcdefghijklmnopqrstu

AmplifyUI用の変数設定

/project_root/types とか /project_root/config とか、とにかくどこでもいいのだけれどアプリが読み込めるように以下の変数を定義する。

export const AmplifyConf = {
  aws_project_region: process.env.NEXT_PUBLIC_AWS_PROJECT_REGION,
  aws_cognito_region: process.env.NEXT_PUBLIC_AWS_COGNITO_REGION,
  aws_user_pools_id: process.env.NEXT_PUBLIC_AWS_USER_POOL_ID,
  aws_user_pools_web_client_id: process.env.NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID,
};

アプリで使う

あとは上記で定義した AmplifyConf を必要な場所で import して、

Amplify.configure(AmplifyConf);

してやれば使えるようになる。(詳細な使い方は公式ドキュメント確認のこと)