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

如何在SAM框架template.yaml中添加自定义值并在Lambda handler中获取

SAM框架向Lambda传递自定义值的实现方案

可以实现,但你设想的直接在Api资源的Metadata字段配置后自动注入到event/context的方式行不通,Metadata是CloudFormation/SAM用于存储工具层面元数据的字段,不会主动传递到Lambda运行时环境。有两种常用的实现方式可以满足需求:

方案一:通过Lambda环境变量传递(单API对应单Lambda场景推荐)

如果该自定义值是固定对应某个Lambda的,直接配置为Lambda的环境变量即可,配置成本最低:

  1. template.yaml 配置示例:
# Lambda 资源配置
PostExperimentFunction:
  Type: AWS::Serverless::Function
  Properties:
    Runtime: nodejs18.x
    Handler: index.lambdaHandler
    # 自定义环境变量
    Environment:
      Variables:
        value1: "software"

# 对应API配置
PostExperiment:
  Type: AWS::Serverless::Api
  Properties:
    Path: /my-path
    Method: post
    Integration:
      Type: AWS_PROXY
      Uri: !GetAtt PostExperimentFunction.Arn
  1. Lambda 中读取方式:
export async function lambdaHandler(event, context) {
  // 直接读取环境变量
  const value1 = process.env.value1
}

方案二:通过API Gateway参数映射传递(多API共用同一个Lambda场景推荐)

如果多个API路径共用同一个Lambda,需要区分不同请求的自定义值,可以通过API Gateway的请求参数映射,把自定义值注入到请求头或者请求上下文里:

  1. template.yaml 配置示例:
PostExperiment:
  Type: AWS::Serverless::Api
  Properties:
    StageName: prod
    DefinitionBody:
      paths:
        /my-path:
          post:
            x-amazon-apigateway-integration:
              type: aws_proxy
              uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PostExperimentFunction.Arn}/invocations
              # 注入自定义头,注意固定值需要用单引号包裹
              requestParameters:
                integration.request.header.x-custom-value1: "'software'"
  1. Lambda 中读取方式:
export async function lambdaHandler(event, context) {
  // 从请求头读取自定义值
  const value1 = event.headers['x-custom-value1']
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:27:01