如何将环境变量添加到AWS Amplify?

时间:2020-09-25 23:00:52

标签: node.js reactjs environment-variables aws-amplify

我有一个React / Node应用程序,我试图在AWS Amplify上托管。第一次尝试,部署了我的应用程序,但是由于缺少环境变量,我发现某些页面无法加载。 我已经在部署之前将它们添加到了AWS控制台,但是它没有用。然后我进行了一些搜索,发现需要将“ amplify.yml”文件修改为:

build:
  commands:
    - npm run build:$BUILD_ENV

不仅不起作用,而且该应用程序也不再起作用。 有什么想法吗?

4 个答案:

答案 0 :(得分:3)

为了让@leandro 的回答有效,我必须将 AWS 环境变量名称用大括号括起来:

build:
  commands:
    - npm run build
    - VARIABLE_NAME_1=${VARIABLE_NAME_1}

作为评论可能更好,但我没有足够的分数来发表。

答案 1 :(得分:1)

@Zarqam嘿,我遇到了这个问题,并花了很多时间。对我有用的是:

在我的React代码上,使用process.env.VARIABLE_NAME

在我的webpack.config.js上,使用以下插件:

新的webpack.EnvironmentPlugin(['VARIABLE_NAME_1','VARIABLE_NAME_2'])

在Amplify环境变量上,先放入VARIABLE_NAME_1等,然后再输入值,就像文档中说的那样。

最后的构建设置:

build:
      commands:
        - npm run build
        - VARIABLE_NAME_1=$VARIABLE_NAME_1 

(带$的是对您在amplify中放入的一个的引用。另外,我认为您必须在=符号之间没有空格)

然后触发构建,然后用手指交叉。

答案 2 :(得分:1)

由于此问题特别引用了 React,以下是在 AWS Amplify 中基于 React 的应用程序中使用环境变量所需的步骤。

在您的客户端 JS 中:

const BUILD_ENV = process.env.REACT_APP_BUILD_ENV || "any-default-local-build_env"; 

这里要注意的关键是我对 REACT_APP_ 的前缀,它涵盖了 Create-React-App 文档:here

现在,在您的 Amplify console 中,在应用设置 > 环境变量下:

![enter image description here

最后,您还需要在 App Settings > Build Settings 下添加此引用:

enter image description here

注意:“BUILD_ENV”可以是您想要的任何字符串。在环境变量中,您可以提供必要的 DEV/PROD 覆盖。

不要使用这种方法存储秘密密钥,AWS为此提供了一个secrets manager。此方法适用于可发布的密钥,例如连接到 Firebase 或 Stripe,并且密钥可以公开。

答案 3 :(得分:0)

Environmental Variables 上的 Amplify 文档有一个关于“Accessing Environmental Variables”的部分。

根据该文档,在您的 Amplify.yml(在控制台中或通过将其下载到项目的根目录)中,您可以使用命令将 Amplify 环境变量推送到您的 .env 中。如果您在 Amplify 中创建了一个名为“REACT_APP_TEST_VARIABLE”的环境变量,您会...

   build:
      commands:
        - echo "REACT_APP_TEST_VARIABLE=$REACT_APP_TEST_VARIABLE" >> .env
        - npm run build

进入 .env 后,您可以通过 process.env...

console.log('REACT_APP_TEST_VARIABLE', process.env.REACT_APP_TEST_VARIABLE)

如果您使用的是 Create React App,则您已经拥有 dotenv,或查看 Adding an .env file to React Project 了解更多信息。

强制提醒将您的 .env 添加到您的 .gitignore,并且不要在 .env 中存储任何敏感的内容。