我想调试 lambda,但 cdk synth 不包含 Lambda 资源,当它由管道堆栈部署时
I want to dubug lambda, but cdk synth does not include Lambda Resource, when it is deployed by pipeline stack
我正在努力调试由 CDK 管理的 lambda。
我的CDK源和下面AWS提供的示例几乎一样
https://github.com/aws-samples/cdk-pipelines-demo/tree/typescript
源码结构如下:
--project_dir/
|_cdk.json
|_pipelines_webinar/
|_lambda/
|_handler.ts <====== I WANT TO EXECUTE AND DEBUG ON LOCAL THIS.
|_pipeline_stack.ts
|_pipelines_webinar_stack.ts
|_webservice_stage.ts
我认为它需要使用 SAM CLI 运行 并在本地调试。
但是,如果我 运行 cdk synth 来创建 SAM 模板,
Lambda 函数(类型:AWS::Lambda::Function)在创建的 SAM 模板中不存在。
我认为这种行为是因为 lambda 是由 CDK 管道部署的。
重现该情况的方法如下:
git clone -b typescript https://github.com/aws-samples/cdk-pipelines-demo.git
cd cdk-pipelines-demo
npm install
cdk synth > template.yml
问。在这种情况下,有什么方法可以 运行 并在本地调试 lambda 吗?
在您给出的示例中,lambda 函数在部署在 WebServiceStage
管道阶段下的堆栈中实例化。对于流水线阶段,cdk synth
将函数捆绑在 cdk.out/
内的 JSON 文件中,并包含对此模板的引用作为 template.yml
的一部分。 lambda 作为工件传入,这意味着它不会直接写入 template.yml
。
解决方法是创建一个新文件 lambda-app.ts
来实例化 PipelinesWebinar Stack
#!/usr/bin/env node
import 'source-map-support/register';
import { App } from '@aws-cdk/core';
import { PipelinesWebinarStack } from './pipelines_webinar/pipelines_webinar_stack';
const app = new App();
new PipelinesWebinarStack(app, 'PipelineStack');
app.synth();
然后用 tsc
编译它,并让 cdk synth 使用那个文件:-
cdk synth --app lambda-app.js --no-staging > template.yml
那么你应该可以在template.yml
和运行
中找到逻辑ID
sam invoke local <logicalId>
在本地运行它
我正在努力调试由 CDK 管理的 lambda。
我的CDK源和下面AWS提供的示例几乎一样
https://github.com/aws-samples/cdk-pipelines-demo/tree/typescript
源码结构如下:
--project_dir/
|_cdk.json
|_pipelines_webinar/
|_lambda/
|_handler.ts <====== I WANT TO EXECUTE AND DEBUG ON LOCAL THIS.
|_pipeline_stack.ts
|_pipelines_webinar_stack.ts
|_webservice_stage.ts
我认为它需要使用 SAM CLI 运行 并在本地调试。
但是,如果我 运行 cdk synth 来创建 SAM 模板, Lambda 函数(类型:AWS::Lambda::Function)在创建的 SAM 模板中不存在。
我认为这种行为是因为 lambda 是由 CDK 管道部署的。
重现该情况的方法如下:
git clone -b typescript https://github.com/aws-samples/cdk-pipelines-demo.git
cd cdk-pipelines-demo
npm install
cdk synth > template.yml
问。在这种情况下,有什么方法可以 运行 并在本地调试 lambda 吗?
在您给出的示例中,lambda 函数在部署在 WebServiceStage
管道阶段下的堆栈中实例化。对于流水线阶段,cdk synth
将函数捆绑在 cdk.out/
内的 JSON 文件中,并包含对此模板的引用作为 template.yml
的一部分。 lambda 作为工件传入,这意味着它不会直接写入 template.yml
。
解决方法是创建一个新文件 lambda-app.ts
来实例化 PipelinesWebinar Stack
#!/usr/bin/env node
import 'source-map-support/register';
import { App } from '@aws-cdk/core';
import { PipelinesWebinarStack } from './pipelines_webinar/pipelines_webinar_stack';
const app = new App();
new PipelinesWebinarStack(app, 'PipelineStack');
app.synth();
然后用 tsc
编译它,并让 cdk synth 使用那个文件:-
cdk synth --app lambda-app.js --no-staging > template.yml
那么你应该可以在template.yml
和运行
sam invoke local <logicalId>
在本地运行它