aws_cdk跨栈传递资源参数方法及传参报错解决方案
报错原因
你遇到的问题由两个错误共同导致:
- 自定义参数透传问题:你把自定义的Lambda参数放在
**kwargs中直接传给了CDK原生Stack基类的构造函数,基类不识别自定义入参,直接抛出意外关键字参数的错误 - 参数名不匹配:你在
app.py中传入的参数名是temp_lambda,但在API网关栈的代码中尝试读取的参数名是test_lambda,两边命名不一致
修复方案
自定义栈参数必须在调用父类构造函数前,从kwargs中提前提取出来,不能透传给Stack基类,同时统一两边的参数命名。
- 修改API网关栈文件
hello_handler_apigateway_handler.py:
from constructs import Construct from aws_cdk import ( Stack, aws_lambda as _lambda, aws_apigateway as apigw, ) class HelloHandlerApigatewayStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: # 提前取出自定义参数,避免透传给父类Stack linked_lambda = kwargs.pop("temp_lambda") # 剩余CDK原生参数(如env)传给父类构造 super().__init__(scope, id, **kwargs) apigw.LambdaRestApi( self, 'Endpoint', handler=linked_lambda, )
- 你的
app.py和Lambda栈代码不需要额外修改,CDK会自动处理跨栈的资源引用权限、自动生成跨栈输出导入逻辑,不需要手动配置CfnOutput,只要保证两个栈部署在同账号同区域即可,你当前的env配置满足要求。
验证方式
修改完成后在项目根目录执行cdk ls,可以正常列出两个栈名即为修复成功:
HelloHandlerStack HelloHandlerApigatewayStack
内容的提问来源于stack exchange,提问作者Siddhant Sahni
相关产品推荐
相关产品推荐

