在AWS Amplify上使用Next.js和SSR,环境变量不会被传递到自动创建的Lambda



我有一个带有SSR的Next.js应用程序,它依赖于环境变量。当我将应用程序部署到AWS Amplify时,会创建2个Lambda函数。

我在Amplify中设置了环境变量,但是,这些变量没有在构建过程中创建的Lambda函数中设置。如果我在函数上手动设置环境变量,它们将在下一次构建过程中删除。

有什么想法吗?

放大团队一直在github中更新此问题:https://github.com/aws-amplify/amplify-console/issues/1987

以下是他们建议的方法:

  1. 像往常一样在Amplify控制台中添加所需的环境变量(步骤(
  2. 使用您在Amplify控制台中添加的环境变量更新(或创建(您的next.config.js文件。例如,如果您在上面的步骤1(中在控制台中创建了一个名为MY_ENV_VAR的环境变量,那么您将添加以下内容:
module.exports = {
env: {
MY_ENV_VAR: process.env.MY_ENV_VAR
}
};
  1. 现在,在下一次构建之后,您将能够在SSR lambdas中引用环境变量(process.env.MY_env_VAR(

Amplify Hosting支持通过在Amplify控制台的项目配置中设置环境变量,将环境变量添加到应用程序的构建中。但是,默认情况下,Next.js服务器组件不能访问这些环境变量。

为了使特定的环境变量可供Next.js访问,您可以修改Amplify构建规范文件,将其设置在Next.jss识别的环境文件中。

- env | grep -e MY_ENV_VAR >> .env.production

你需要在你的构建设置下设置它,看起来像这样:

version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- env | grep -e MY_ENV_VAR >> .env.production
- env | grep -e NEXT_PUBLIC_ >> .env.production
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
- .next/cache/**/*

遵循此处的文档:使服务器端运行时可以访问环境变量

此外,请记住在Amplify控制台中添加环境变量

最新更新