使用 cdk not sam 在本地调试 lambda
Debugging lambda locally using cdk not sam
AWS CDK 为开发人员提供了强大的功能。使用 CDK deveolper 不仅可以管理整个基础架构,还可以管理安全性、代码管道、...
不过我最近有点挣扎。我曾经使用 SAM 调试 lambda 进行本地调试。我知道如何设置 CDK 环境,以及调试 CDK 应用程序本身。但是我不知道如何在 CDK 中调试 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
,则必须添加它们。
自 2021 年 4 月 29 日起,有一个通过 SAM 调试 CDK 应用程序的附加选项。它处于预览状态,但此博客 post 涵盖了它:https://aws.amazon.com/blogs/compute/better-together-aws-sam-and-aws-cdk/.
基本上,安装 AWS CLI 和 AWS CDK。安装 SAM CLI - beta,可在此处获取: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
模拟 Lambda 服务
AWS CDK 为开发人员提供了强大的功能。使用 CDK deveolper 不仅可以管理整个基础架构,还可以管理安全性、代码管道、...
不过我最近有点挣扎。我曾经使用 SAM 调试 lambda 进行本地调试。我知道如何设置 CDK 环境,以及调试 CDK 应用程序本身。但是我不知道如何在 CDK 中调试 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
,则必须添加它们。
自 2021 年 4 月 29 日起,有一个通过 SAM 调试 CDK 应用程序的附加选项。它处于预览状态,但此博客 post 涵盖了它:https://aws.amazon.com/blogs/compute/better-together-aws-sam-and-aws-cdk/.
基本上,安装 AWS CLI 和 AWS CDK。安装 SAM CLI - beta,可在此处获取: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