首页 > 解决方案 > 如何将命令的输出设置为 AWS Codebuild 中的导出变量

问题描述

我正在创建一个服务/前端。该服务是使用 CloudFormation 创建的。ApiKey 用于身份验证。ApiKey 的值对 CloudFormation 不可用,所以我在创建 CodeBuild 环境时无法设置环境变量。我已经导出了 ApiKey Id,希望在 CodeBuild 期间通过 aws cli 获取 ApiKey 值。

我正在调用get-api-key,它按预期返回我的键值。我似乎无法弄清楚如何将其设置为环境变量。我错过了什么?

到目前为止,我已经尝试了一些东西。始终是相同的结果,但找不到密钥。我的 CloudFormation 模板创建了一个名为“REACT_APP_API_KEY”的环境变量并将其设置为一个空字符串(我这样做是因为如果我尝试导出一个新变量它会抱怨)。printenv我已经通过命令确认“REACT_APP_API_KEY”存在。

我的 buildspec.yaml 如下

version: 0.2
env:
  variables:
    S3_BUCKET: "nacho-bucket"
phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - echo Installing npm dependencies
      - npm install
  build:
    commands:
      - echo Retrieving API key value
      - aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq '.value'
      - REACT_APP_API_KEY = $(aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq '.value')
      - echo $REACT_APP_API_KEY
      - printenv
      - npm run build
  post_build:
    commands:
      - echo Deploying UI to environment $S3_BUCKET
      - cd build
      - 'aws s3 sync . s3://$S3_BUCKET --delete'

控制台输出:

[Container] 2020/10/19 19:19:36 Running command echo Retrieving API key value
Retrieving API key value

[Container] 2020/10/19 19:19:36 Running command aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq '.value'
"correctapikey"

[Container] 2020/10/19 19:19:42 Running command REACT_APP_API_KEY = $(aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq '.value')
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: REACT_APP_API_KEY: not found

[Container] 2020/10/19 19:19:42 Command did not exit successfully REACT_APP_API_KEY = $(aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq '.value') exit status 127

标签: amazon-web-servicesaws-codebuild

解决方案


精氨酸。我花了一天的大部分时间试图弄清楚这一点。修复如下(等号运算符周围不能有空格)。

- REACT_APP_API_KEY=$(aws apigateway get-api-key --api-key $API_KEY_ID --include-value | jq -r '.value')

推荐阅读