我正在运行 React 应用程序,前端代码存储在我的 GitHub 存储库中,并且我正在使用 AWS Amplify 运行部署
我尝试使用 AWS Systems Manager (SSM) Parameter Store 存储 API 密钥,以使用 此文档 存储我的环境机密。我能够访问测试环境变量。由于将 API 密钥存储为环境变量被认为是一种不好的做法,因此我尝试在 AWS Systems Manager 中使用 Parameter Store。这些是我采取的步骤:
/amplify/myAppId/myBackendEnvironmentName/REACT_APP_SECRETS
为了澄清这一点,我从 AWS Amplify 主页 - 后端环境 选项卡中获取了 App ID 和 环境名称。它为我提供了 CLI 命令,可将环境拉至我的本地计算机:amplify pull --appId myAppId --envName myBackendEnvironmentName
Secure String
My current account
alias/aws/ssm
(已预先选择)value
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- echo $REACT_APP_TEST_VAR
- echo $REACT_APP_SECRETS
- echo ${REACT_APP_TEST_VAR}
- echo ${REACT_APP_SECRETS}
- REACT_APP_SECRETS=${REACT_APP_SECRETS}
- REACT_APP_TEST_VAR=${REACT_APP_TEST_VAR}
- npm run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
REACT_APP_TEST_VAR 是显示的环境变量,而 REACT_APP_SECRETS 则不显示。这是前端部署日志的部分:
2023-09-30T15:37:39.856Z [INFO]: # Completed phase: preBuild
# Starting phase: build
# Executing command: echo $REACT_APP_TEST_VAR
2023-09-30T15:37:39.857Z [INFO]: ThisWillBeMyTets
# Executing command: echo $REACT_APP_SECRETS
# Executing command: echo ${REACT_APP_TEST_VAR}
ThisWillBeMyTets
# Executing command: echo ${REACT_APP_SECRETS}
# Executing command: REACT_APP_SECRETS=${REACT_APP_SECRETS}
# Executing command: REACT_APP_TEST_VAR=${REACT_APP_TEST_VAR}
# Executing command: npm run build
2023-09-30T15:37:40.178Z [INFO]: > [email protected] build
> react-scripts build
当我在部署的 React 应用程序上执行
console.log(process.env)
时,这是输出:
{
"NODE_ENV": "production",
"PUBLIC_URL": "",
"FAST_REFRESH": true,
"REACT_APP_TEST_VAR": "ThisWillBeMyTets"
}
我所做的一切都在同一个地区。
基本上
process.env.REACT_APP_SECRETS
就是undefined
。我尝试了一切,阅读并重新阅读文档,但我不知道如何访问秘密。一定有什么我想念的东西,有什么想法吗?
您在构建日志中看到以下警告吗?
[WARNING]: !Failed to set up process.env.secrets
AWS amplify 中的秘密与 Gen1 与 Gen1、前端与后端、构建时与运行时非常令人困惑。
我发现这有效:
此外,您还需要具有从 SSM 参数存储读取权限的 IAM 服务角色,即
ssm:GetParametersByPath
。
在 github 上查看这个非常有用的评论:
如果一切都正确,则不应在构建日志中看到该警告。