amazon-web-services - 我想对 lambda 进行调试,但 cdk 合成器在通过管道堆栈部署时不包含 Lambda 资源
问题描述
我正在努力调试由 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 模板,则创建的 SAM 模板中不存在 Lambda 函数(类型:AWS::Lambda::Function)。
我认为这种行为是因为 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
,将函数捆绑在内部的 JSON 文件中,cdk.out/
并包含对此模板的引用作为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 合成器使用该文件:-
cdk synth --app lambda-app.js --no-staging > template.yml
然后您应该能够在其中找到逻辑 IDtemplate.yml
并运行
sam invoke local <logicalId>
在本地运行它
推荐阅读
- c# - 如何使用我的视图模型类并将数据从视图模型传递到页面上的视图?
- javascript - 在没有 create-react-app 的情况下实现 react 的两个问题?
- java - 使用 Scanner 在 for 循环中逐字母分析字符串(抛出 IndexOutOfBoundExceptions)
- python - 初始化 zeors 和 one 的张量
- c# - 截屏时如何摆脱窗口的标题栏
- java - How to display month name from DatePickerDialog - Android Studio
- bash - chmod 不会更改权限
- python - 为什么睡眠功能睡眠不一致?
- c# - c#从泛型类派生的问题
- javascript - WebExtensions 中的 browser.alarms.create 与 setTimeout/setInterval 有何区别?