You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeBuild构建时如何将Secrets Manager获取的凭证写入JSON文件

可行方案

完全可以通过重定向实现写入,只要注意写法避免JSON格式损坏即可。

  • 错误写法避坑:不要直接用echo $CREDS > user.json。Shell对不加双引号的变量做展开时,会把JSON结构里的换行、缩进空白替换为单个空格,最终生成的文件是格式非法的JSON,后续程序读取会报错。

正确写法

方式1:沿用现有变量的写法

给变量加上双引号即可保留原始JSON格式,命令为:

echo "$CREDS" > user.json

方式2:更稳妥的无变量写法

不需要把凭证存在Shell变量中跨步骤传递,直接在拉取密钥的步骤就把结果写入文件,能彻底避免变量转义、格式丢失的问题,命令如下:

aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:{secret} | jq -r '.SecretString | fromjson' > user.json

这里给jq加-r(raw输出)参数,是让jq直接输出原始JSON结构,不会额外在外层包裹引号。

修正后的buildspec.yml参考

## buildspec.yml
version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: latest
    commands:
      - npm install
  pre_build:
    commands:
      # 推荐直接在拉取阶段写入文件,减少中间环节
      - aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:{secret} | jq -r '.SecretString | fromjson' > user.json
      # 如果要沿用变量写法,保留下面这行即可
      # - CREDS="$(aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:{secret} | jq '.SecretString | fromjson')"
  build:
    commands:
      # 如果用变量传值,打开下面这行,注意必须给变量加双引号
      # - echo "$CREDS" > user.json
      # 可选:校验写入的JSON格式是否合法
      - jq . user.json
      - npm start test:run

写入后加jq . user.json的校验步骤,如果文件是合法JSON会格式化输出内容,如果格式错误会直接报错,能提前发现问题避免影响后续测试命令执行。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:06:19