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

如何在AWS Lambda部署的template.yaml中读取config.json的版本号作为环境变量?

从外部JSON文件加载配置到AWS SAM模板的Lambda环境变量

问题背景

你尝试用本地config.json中的版本号作为Lambda函数的环境变量,直接在template.yaml中使用${file(config.json):version_number}的方式无效,因为AWS SAM/CloudFormation不支持这种语法(这是Terraform专属语法),导致环境变量值被原样解析为字符串。

可行解决方案

方案一:通过参数覆盖传递配置

  1. 在template.yaml中定义参数
    先在模板顶部声明参数,用于接收外部传入的版本号:
Parameters:
  LambdaVersion:
    Type: String
    Description: 从config.json读取的Lambda版本号

Resources:
  my_lambda:
    Type: AWS::Serverless::Function
    Properties:
      Handler: my_package.my_source_code.lambda_handler
      # 其他必要配置(Runtime、CodeUri等)
      Environment:
        Variables:
          VERSION: !Ref LambdaVersion
  1. 脚本读取JSON并传递参数
    使用jq工具读取config.json的值,再通过sam deploy的--parameter-overrides参数传递:
# 读取config.json中的version_number字段值
VERSION=$(jq -r '.version_number' config.json)
# 执行部署并传入参数
sam deploy --no-confirm-changeset --parameter-overrides ParameterKey=LambdaVersion,ParameterValue=$VERSION

方案二:使用SAM Build变量注入

  1. 修改template.yaml使用Build变量占位符
    在模板中用${BUILD::VERSION}作为环境变量的占位符:
Resources:
  my_lambda:
    Type: AWS::Serverless::Function
    Properties:
      Handler: my_package.my_source_code.lambda_handler
      # 其他必要配置(Runtime、CodeUri等)
      Environment:
        Variables:
          VERSION: ${BUILD::VERSION}
  1. 构建时传递版本号
    读取config.json的值,在sam build时通过--build-args传递:
VERSION=$(jq -r '.version_number' config.json)
sam build --use-container --manifest <path/to/requirements.txt> --build-args VERSION=$VERSION
sam deploy --no-confirm-changeset

补充说明

  • 你之前看到的Fn::GetParam是用于读取部署包内的JSON文件内容,而非本地的config.json,所以不适用当前场景。
  • 若需要跨多环境复用配置,可将config.json拆分为环境对应版本(如config.dev.json、config.prod.json),在脚本中根据环境变量切换读取的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:24