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

AWS CDK:使用LambdaIntegration的requestParameters传递字面量报错排查

API Gateway通过requestParameters传递字面量到Lambda失败问题排查

问题详情

尝试通过API Gateway集成的requestParameters将字面量值传递给Lambda函数,但部署失败。

当前使用的CDK代码:

myApigatewayResource.addMethod(
    'GET',
    new apiGateway.LambdaIntegration(
        myLambdaFunctionHandler,
        {
            requestParameters: {
                'integration.request.querystring.customvalue': '123456789'
            }
        }
    ),
    {
        methodResponses: [
            { statusCode: '200' },
        ]
    }
);

执行cdk synth && cdk deploy时触发错误:

Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression specified: 123456789

根据LambdaIntegrationOptions官方文档:

将请求参数指定为键值对(字符串到字符串的映射),目标作为键,源作为值。
使用以下格式指定目标:integration.request.location.name,其中location可以是querystring、path或header,name是有效的唯一参数名称。
源必须是现有的方法请求参数或静态值。静态值必须用单引号括起来,并根据其在请求中的目标进行预编码。

代码看似符合文档要求,但仍报错,问题出在哪里?

问题原因及解决办法

问题核心是静态值的单引号未正确传递。在JS/TS代码中,直接写'123456789'会被解析为不带单引号的纯字符串,而API Gateway要求静态值本身必须包含单引号作为映射表达式的标识。

修正后的代码

myApigatewayResource.addMethod(
    'GET',
    new apiGateway.LambdaIntegration(
        myLambdaFunctionHandler,
        {
            requestParameters: {
                // 用双引号包裹单引号,确保最终传递的值包含单引号
                'integration.request.querystring.customvalue': "'123456789'"
                // 也可以用转义写法:\'123456789\'
            }
        }
    ),
    {
        methodResponses: [
            { statusCode: '200' },
        ]
    }
);

解释

  • JS/TS中,"'123456789'"会被解析为字符串'123456789'(包含两端的单引号),这才符合API Gateway对静态值的格式要求。
  • 原代码传递的是123456789(无单引号),API Gateway会将其视为待解析的映射表达式而非静态值,因此抛出“Invalid mapping expression”错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:19