问题描述
AWS CDK为开发人员提供了出色的功能。使用CDK开发人员不仅可以管理整个基础架构,还可以管理安全性,代码管道,...
但是我最近在挣扎。我曾经使用SAM调试lambda进行本地调试。我知道如何设置CDK环境以及调试CDK应用程序本身。但是我不知道如何在CDK中调试lambda应用程序。
有人可以帮助我吗?
解决方法
自 2021 年 4 月 29 日起,提供了通过 SAM 调试 CDK 应用程序的附加选项。它处于预览阶段,但这篇博文涵盖了它:https://aws.amazon.com/blogs/compute/better-together-aws-sam-and-aws-cdk/。
基本上,安装 AWS CLI 和 AWS CDK。安装 SAM CLI - 测试版,可在此处获得:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-cdk-getting-started.html。
然后你可以运行如下命令:
sam-beta-cdk build
sam-beta-cdk local invoke
sam-beta-cdk local invoke start-api
甚至用 sam-beta-cdk local start-lambda
您可以按照here所述同时使用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 local invoke MyFunction12345678 --no-event
如果使用的是VSCode,则可以设置启动操作以运行node
中的当前文件以在本地对其进行测试。 您需要做的就是在您要测试的文件上按F5 。
您需要在处理程序文件的末尾添加以下内容,以便在node
中执行时处理程序得以执行:
if (process.env.NODE_ENV === "development" && process.argv.includes(__filename)) {
// Exercise the Lambda handler with a mock API Gateway event object.
handler(({
pathParameters: {
param1: "test",param2: "code",},} as unknown) as APIGatewayProxyEvent)
.then((response) => {
console.log(JSON.stringify(response,null,2));
return response;
})
.catch((err: any) => console.error(err));
}
将此添加到.vscode/launch.json
中的启动配置中:
"configurations": [
{
"name": "Current TS File","type": "node","request": "launch","args": ["${relativeFile}","-p","${workspaceFolder}/tsconfig.json"],"runtimeArgs": ["-r","ts-node/register","-r","tsconfig-paths/register","--nolazy"],"cwd": "${workspaceRoot}","internalConsoleOptions": "openOnSessionStart","envFile": "${workspaceFolder}/.env","smartStep": true,"skipFiles": ["<node_internals>/**","node_modules/**"]
},
仅在使用Typescript时才需要ts-node
和tsconfig-paths
。如果还没有npm i -D ts-node tsconfig-paths
,则必须添加它们。