【问题标题】:I want to dubug lambda, but cdk synth does not include Lambda Resource, when it is deployed by pipeline stack我想对 lambda 进行调试,但 cdk 合成器在通过管道堆栈部署时不包含 Lambda 资源
【发布时间】:2021-03-05 00:42:15
【问题描述】:

我正在努力调试由 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?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-cdk aws-codepipeline aws-sam-cli


    【解决方案1】:

    在您给出的示例中,lambda 函数在部署在WebServiceStage 管道阶段下的堆栈中实例化。对于管道阶段cdk synth 将函数捆绑在cdk.out/ 内的JSON 文件中,并包含对该模板的引用作为template.yml 的一部分。 lambda 作为工件传入,这意味着它不会直接写入template.yml。

    一种解决方法是创建一个新文件 lambda-app.ts 来实例化 PipelinesWebinar 堆栈

    #!/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
    

    那么你应该可以在template.yml中找到逻辑ID并运行

    sam invoke local <logicalId>
    

    在本地运行

    【讨论】:

    • 感谢您的回答!我终于可以在本地执行 lambda。
    猜你喜欢
    • 2021-08-21
    • 2020-07-08
    • 2020-03-05
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多