Amplify Gen2 + Next.js v14で作成したアプリケーションにて、Lambda関数内にて環境変数を参照するため、 import { env } from '$amplify/env/<関数名>' を記述したところ、ブランチ環境のデプロイ時にエラーが発生するようになった。
対応方法を調べたのでメモ。
環境
Node.js 20.10.0, Next.js 14.2.4。
Amplify関連は、aws-amplify 6.3.6, @aws-amplify/backend 1.0.4, @aws-amplify/backend-cli 1.2.1。
問題
カスタム認証の実装のため、 amplify/data/customAuthorizer.ts を作成し、その中でDynamoDBを参照するため、以下の手順で import { env } from '$amplify/env/customAuthorizer' を記述した。
サンドボックス環境での動作確認ができたため、ブランチ環境での確認のためデプロイしようとすると、以下のエラーでビルドに失敗した。
[WARNING]: ./amplify/data/customAuthorizer.ts:16:21 Type error: Cannot find module '$amplify/env/customAuthorizer' or its corresponding type declarations.
自動生成されたファイルがコンパイル対象になっている模様。
対応
エラーメッセージでissueを検索すると、以下を発見。
その中から、 #1374 がリンクされており、以下のコメントにて対応方法が記載されていた。
tsconfig.json の "exclude" に ".amplify", "./amplify" を追加すればいいとのこと。
該当部分は create-next-app 後のデフォルトの "exclude": ["node_modules"] だったため、 "exclude": ["node_modules", ".amplify", "./amplify"] に変更。
その状態でブランチ環境の再デプロイを行うと、ビルドに成功した。
振り返り
Amplify Gen2、まだまだGA直後のため、ところどころ不具合が残っている印象。
ただ、ほとんど他の誰かが通った道なので、issueを検索すれば対応方法がわかることが多いのが救いか。