如何用AWS CDK Assertions验证每个NodejsFunction的Handler配置?
解决方案
方法一:验证所有Lambda函数的Handler配置
现有代码仅能确认栈中存在至少一个符合要求的Lambda,要确保11个NodejsFunction全部配置正确,需要遍历所有Lambda资源逐一检查:
it("should have all Lambda functions using Handler = 'index.handler'", () => { // 获取栈内所有AWS::Lambda::Function类型的资源 const allLambdas = template.findResources("AWS::Lambda::Function"); // 遍历每个Lambda资源,断言Handler属性符合要求 Object.values(allLambdas).forEach(lambda => { expect(lambda.Properties.Handler).toBe("index.handler"); }); });
findResources会返回指定类型的所有资源,通过遍历并逐个断言,就能覆盖所有11个NodejsFunction的检查。
方法二:定位特定NodejsFunction实例检查
如果需要针对某个特定的lambdaExample做精准验证,有两种实现方式:
方式A:直接访问栈实例的Lambda属性
如果你的栈实例直接暴露了lambdaExample变量,可直接在CDK层面验证配置,无需依赖CFN模板:
it("should set correct Handler for lambdaExample", () => { const targetLambda = allStacks.lambdaStack.lambdaExample; // 断言CDK代码中配置的handler属性 expect(targetLambda.handler).toBe("index.handler"); });
方式B:通过CFN逻辑ID定位资源
如果需要从CFN模板层面验证,可利用Lambda的逻辑ID(默认是CDK变量名的驼峰转帕斯卡格式,比如lambdaExample对应逻辑ID为LambdaExample)定位:
it("should have correct Handler for lambdaExample", () => { // 通过逻辑ID获取指定Lambda资源 const targetLambda = template.findResources("AWS::Lambda::Function")["LambdaExample"]; expect(targetLambda.Properties.Handler).toBe("index.handler"); });
注意:如果自定义了Lambda的逻辑ID,需替换为自定义的名称。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

