在具有自动生成名称的文件夹中部署 lambda 代码

Posted

技术标签:

【中文标题】在具有自动生成名称的文件夹中部署 lambda 代码【英文标题】:deploying lambda code inside a folder with an autogenerated name 【发布时间】:2019-12-03 17:19:33 【问题描述】:

我正在尝试在 pulumi-aws 中设置一个 lambda,但我的函数代码在部署时被包装在一个与生成的 lambda 函数名称同名的文件夹中。

我不希望有这个,因为它是不必要的,但更重要的是,这意味着我无法确定我的处理程序应该是什么,因为生成了文件夹名称?

(我意识到我可能可以使用引用来获取这个生成的名称,但我不喜欢无缘无故增加的复杂性。我认为没有充分的理由在 lambda 中包含这个文件夹?)

例如我的功能代码是 1 个简单的 index.js 文件。带有 1 个命名的处理程序导出。我希望我的 lambda 处理程序是 index.handler。

(请注意,我的 pulumi 代码使用 TypeScript,但 Lambda 使用 javascript。)

我已经为 code 属性尝试了几个选项:

const addTimesheetEntryLambda = new aws.lambda.Function("add-timesheet-entry", 
    code: new pulumi.asset.AssetArchive(
        "index.js": new pulumi.asset.FileAsset('./lambdas/add-timesheet-entry/index.js'),
    ),

在此示例中,zip 文件只是一个 index.js,zip 中没有文件夹信息。

const addTimesheetEntryLambda = new aws.lambda.Function("add-timesheet-entry", 
    code: new pulumi.asset.FileArchive("lambdatest.zip"),

【问题讨论】:

【参考方案1】:

AWS Lambda 代码始终位于以函数名称命名的“文件夹”中。这是我在 Web 控制台中创建的 Lambda:

但它不会影响处理程序的命名。 index.handler 就好了。

【讨论】:

您说的完全正确,不敢相信我以前从未注意到这一点。谢谢你让我恢复理智。我实际上遇到了问题,因为当我将 lambda 从 typescript 移动到 javascript 时,我忘记将 export const handler... 交换为 exports.handler = ... 并且让自己迷路了!

以上是关于在具有自动生成名称的文件夹中部署 lambda 代码的主要内容,如果未能解决你的问题,请参考以下文章

用 cloudformation 替换 terraform 部署的 lambda

从AWS API-Gateway中找出lambda名称

调用 lambda 时,“DisplayClass”名称是啥意思?

从 lambda 表达式中获取属性名称*没有*对象实例

是否可以使用 AWS SAM 配置具有不同 lambda 版本的不同 API Gateway 阶段

如何更改我的 Lambda 函数 API 端点的名称