无服务器部署多个函数

11

我最近更新了我的无服务器项目,发现在最近几个更新中有很多变化。

https://serverless.com/

我不太明白如何正确地拥有与同一项目相关的多个Lambda函数和API Gateway端点。在旧版本的Serverless中,我把每个Lambda和端点作为完全独立的函数,这对我来说效果还不错。

我好像不能再这样做了,如果我尝试添加第二个lambda函数,它会覆盖我的第一个函数,因为两者的“service name”相同。我的服务名称相同是因为我想让同一API中包含两个REST端点。因为Serverless根据服务名称创建API名称。

然后我尝试将两个函数都添加到同一个“Service”中。这在大多数情况下有效,除了现在我需要将所有功能的自定义角色语句都包含在同一个角色中(因为这一个角色现在被链接到所有我的函数)。从实际上给每个单独的函数赋予比它应该拥有的更多权限。另一个问题是不同功能的所有处理程序文件都被放入每个函数的部署包中。

所以基本上,我不确定拥有与同一项目相关但功能分隔的多个函数的正确方法是什么。以前很有道理,现在不行了。

如果有人能给我一些指导,请告诉我。

谢谢

3个回答

9

我理解你的沮丧。我曾有过同样的感觉,直到我深入研究新版本并形成更好的理解。需要注意的一点是,新版本还没有完全完成。因此,如果有什么东西完全丢失了,您可以提交问题并在1.0发布之前将其设为优先级。

您应该在serverless.ymlfunctions:部分下定义同一服务下的多个函数。要单独打包这些函数(排除其他函数的代码),您必须在package: 部分下设置individually: true。然后,您可以在根级别和函数级别上使用包含和排除选项。即将推出的更改将允许您在包含和排除选项中使用通配符语法(例如**/*-fn.js)。您可以在此处找到有关打包的更多信息:https://www.serverless.com/framework/docs/providers/aws/guide/deploying

不确定如何在同一服务下的不同函数中使用不同的角色...您如何在0.5中实现的?


谢谢回答,包装相关的内容解答了我的第一个问题。我曾经使用过“customRole”标签为不同的函数分配不同的角色,该标签指向角色的 arn。这个标签存在于每个函数中,所以您可以为每个函数分配不同的角色,以限制它只拥有应该拥有的权限。 - 3uPh0riC

1

我也试图找到一种针对每个功能的单独IAM角色的解决方案。 我找不到方法,但当我查看文档时,我发现这行字:“即将支持每个功能的单独IAM角色。”this page上,所以至少我们知道他们正在努力。


0

Serverless的"IAM Roles Per Function"插件允许您像说话一样做到一个简单的事情:为每个函数指定角色。您仍然可以使用提供者级别的角色:

默认情况下,函数级别的iamRoleStatements会覆盖提供者级别的定义。也可以通过指定选项iamRoleStatementsInherit: true继承提供者级别的定义。

编辑:您还可以在提供者和函数级别都应用预定义的AWS角色


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接