Aws lambda 使用cdk而不是sam在本地调试lambda

Aws lambda 使用cdk而不是sam在本地调试lambda,aws-lambda,aws-cdk,Aws Lambda,Aws Cdk,AWSCDK为开发人员提供了强大的功能。使用CDK-devolper不仅可以管理整个基础设施,还可以管理安全性、代码管道等 不过我最近有些挣扎。我曾经使用SAM进行本地调试来调试lambda。我知道如何设置CDK环境,以及如何调试CDK应用程序本身。但我不知道如何在CDK中调试lambda应用程序 有人能帮我吗?您可以按说明一起使用SAM和CDK。特别是: 运行您的AWS CDK应用程序并创建AWS CloudFormation模板 cdk-synth--no-staging>template.

AWSCDK为开发人员提供了强大的功能。使用CDK-devolper不仅可以管理整个基础设施,还可以管理安全性、代码管道等

不过我最近有些挣扎。我曾经使用SAM进行本地调试来调试lambda。我知道如何设置CDK环境,以及如何调试CDK应用程序本身。但我不知道如何在CDK中调试lambda应用程序


有人能帮我吗?

您可以按说明一起使用SAM和CDK。特别是:

  • 运行您的AWS CDK应用程序并创建AWS CloudFormation模板

    cdk-synth--no-staging>template.yaml

  • 查找您的应用程序的逻辑ID template.yaml中的Lambda函数。看起来像 MyFunction12345678,其中12345678表示8个字符的唯一字符 AWS CDK为所有资源生成的ID。线路正确吗 后面应该是这样的:
    Type:AWS::Lambda::Function

  • 通过执行以下命令来运行函数:

    sam本地调用MyFunction12345678--无事件


  • 如果您使用的是VSCode,则可以设置启动操作以在
    节点中运行当前文件,从而在本地对其进行测试只需在要测试的文件上按F5

    您需要在处理程序文件的末尾添加以下内容,以便在
    节点中执行处理程序时执行:

    if(process.env.NODE_env==“development”&&process.argv.includes(u文件名)){
    //使用模拟API网关事件对象练习Lambda处理程序。
    处理者(({
    路径参数:{
    参数1:“测试”,
    参数2:“代码”,
    },
    }作为未知)作为APIGatewayProxyEvent)
    。然后((响应)=>{
    log(JSON.stringify(response,null,2));
    返回响应;
    })
    .catch((err:any)=>console.error(err));
    }
    
    将其添加到
    .vscode/launch.json中的启动配置中:

    “配置”:[
    {
    “名称”:“当前TS文件”,
    “类型”:“节点”,
    “请求”:“启动”,
    “args”:[“${relativeFile}”、“-p”、“${workspaceFolder}/tsconfig.json”],
    “runtimeArgs”:[“-r”、“ts节点/寄存器”、“-r”、“tsconfig路径/寄存器”、“--nolazy”],
    “cwd”:“${workspaceRoot}”,
    “internalConsoleOptions”:“openOnSessionStart”,
    “envFile”:“${workspaceFolder}/.env”,
    “smartStep”:没错,
    “SkipFile”:[“/**”,“节点\模块/**”]
    },
    

    只有在使用Typescript时才需要
    ts节点
    tsconfig路径
    。如果您还没有这些路径,则必须添加带有
    npm i-D ts节点tsconfig路径的路径

    从2021年4月29日起,有一个通过SAM调试CDK应用程序的附加选项。它在预览中,但这篇博文介绍了它:

    基本上,安装AWS CLI和AWS CDK

    然后您可以运行如下命令:


    sam beta cdk build
    sam beta cdk local invoke
    sam beta cdk local invoke start api
    甚至用
    sam beta cdk local start Lambda

    模拟Lambda服务,感谢您的回答。文档中说,由typescript编写的Lambda能够调试。您知道Lambda是否由javascript编写是否也能够调试?您可能需要为此问题添加更多细节。您尝试了哪些步骤,遇到了哪些问题?我在这里描述的工作流应该与没有CDK时的工作流程完全相同。一般来说,如果您能够调试TypeScript,那么您肯定能够调试JavaSc我也是。回答得很好。非常感谢。我想问另一件事吗?我的团队想用CDK启动一个服务。我们想用CDK管理所有基础设施,用lambda开发业务逻辑。如果我们开始使用这个方法,我们服务的CDK代码将是非常大的代码。我的意思是,可能至少有3个阶段(开发、阶段、产品),还有前端和后端以及一些批处理风格的lambda代码。我想知道它在启动后是否可以维护,因为这种CDK会有大量的代码。CDK部署命令可能会运行很长时间。你有什么好主意吗?@Eddy,我不确定。我的感觉是,围绕模块化CDK应用程序的良好实践是可行的仍在出现。我的直觉是将所有东西都放在一起,直到你有充分的理由不这样做。你仍然可以在一个CDK应用程序中创建多个堆栈并单独部署它们。关于如何使用AWS SAM CDK等进行本地调试,我有一大堆不同的想法。这个选项最终是最简单、最有效的最有意义的