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

lawou6xi  于 2023-06-22  发布在  其他
关注(0)|答案(2)|浏览(127)

我有一个带有SSR的Next.js应用程序,它依赖于环境变量。当我将应用程序部署到AWS Amplify时,会创建2个Lambda函数。
我在Amplify中设置了环境变量,然而,这些变量并没有在构建过程中创建的Lambda函数中设置。如果我在函数上手动设置环境变量,它们将在下一次构建时被删除。
有什么想法吗?

qnyhuwrf

qnyhuwrf1#

Amplify团队已经在github中更新了这个问题:https://github.com/aws-amplify/amplify-console/issues/1987
以下是他们建议的方法:
1.在Amplify Console中添加所需的环境变量(步骤)
1.使用您在Amplify Console中添加的环境变量更新(或创建)next.config.js文件。例如,如果您在上面的步骤1)中在控制台中创建了一个名为MY_ENV_VAR的环境变量,那么您需要添加以下内容:

module.exports = {
  env: {
    MY_ENV_VAR: process.env.MY_ENV_VAR
  }
};

1.现在,在您的下一次构建之后,您将能够在SSR lambda表达式中引用您的环境变量(process.env.MY_ENV_VAR)!

izkcnapc

izkcnapc2#

Amplify Hosting通过在Amplify控制台的项目配置中设置环境变量,支持将环境变量添加到应用程序的构建中。但是,Next.js服务器组件默认情况下不能访问这些环境变量。
要使Next.js可以访问特定的环境变量,您可以修改Amplify构建规范文件,以在Next.js识别的环境文件中设置它们。
- 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/**/*

请按照此处的文档操作:Making environment variables accessible to server-side runtimes
另外,请记住在Amplify控制台中执行add the environment variables

相关问题