无服务器部署多个功能
Serverless deploying multiple functions
我最近更新了我的无服务器项目,我发现在最近的几次更新中很多东西都发生了变化。
我不完全理解拥有多个 lambda 函数和 api 与同一项目相关的网关端点的正确方法是什么。使用旧的无服务器,我将每个 lambda 和端点作为一个完全独立的函数,这对我来说效果很好。
我似乎不能再这样做了,如果我尝试我的第二个 lambda 函数覆盖我的第一个,大概是因为我的 "service name" 两者是相同的。我的服务名称相同,因为我希望 API 网关中的同一个 API 中的两个其余端点。由于无服务器根据服务名称创建 API 名称。
然后我尝试将这两个函数添加到同一个 "Service"。这在大多数情况下都有效,除了现在我需要将我所有功能的自定义角色声明包含到同一个角色中(因为这个角色现在链接到我的所有功能)。有效地为每个单独的函数提供比它应该拥有的更多的权限。另一个问题是我所有用于不同功能的处理程序文件都被放入每个功能部署包中。
所以基本上,我不确定拥有与同一项目相关但功能独立的多个功能的正确方法是什么。以前有道理,现在没有了。
如果有人能给我一些建议
谢谢
我理解你的沮丧。在深入了解新版本并形成更好的理解之前,我也有同样的感觉。不过需要注意的一件事是,新版本尚未完全完成。因此,如果某些内容完全缺失,您可以提出问题并在 1.0 发布之前对其进行优先排序。
您应该在 serverless.yml
的 functions:
部分下的同一服务下定义多个函数。要单独打包这些函数(排除其他函数的代码),您必须在 package:
部分下设置 individually: true
。然后,您可以在根级别和函数级别使用 include 和 exclude 选项。即将进行的更改将允许您在包含和排除选项中使用 glob 语法(示例 **/*-fn.js)。您可以在此处找到有关包装的更多信息 https://serverless.com/framework/docs/guide/packaging/。
不知道如何在同一个服务下为不同的功能使用不同的角色。你是怎么做到 0.5 的?
我也试图为每个函数的单个 iam 角色找到一个解决方案。我找不到办法,但在查看文档时,我发现了这一行:"Support for separate IAM Roles per function is coming soon." on this page,所以至少我们知道他们正在努力。
Serverless 的 "IAM Roles Per Function" 插件允许您完全按照锡罐上的说明进行操作:为每个函数指定角色。您仍然可以使用 provider-level 角色:
By default, function level iamRoleStatements
override the provider level definition. It is also possible to inherit the provider level definition by specifying the option iamRoleStatementsInherit: true
编辑:您还可以在 both the provider and function level.
应用预定义的 AWS role
我最近更新了我的无服务器项目,我发现在最近的几次更新中很多东西都发生了变化。
我不完全理解拥有多个 lambda 函数和 api 与同一项目相关的网关端点的正确方法是什么。使用旧的无服务器,我将每个 lambda 和端点作为一个完全独立的函数,这对我来说效果很好。
我似乎不能再这样做了,如果我尝试我的第二个 lambda 函数覆盖我的第一个,大概是因为我的 "service name" 两者是相同的。我的服务名称相同,因为我希望 API 网关中的同一个 API 中的两个其余端点。由于无服务器根据服务名称创建 API 名称。
然后我尝试将这两个函数添加到同一个 "Service"。这在大多数情况下都有效,除了现在我需要将我所有功能的自定义角色声明包含到同一个角色中(因为这个角色现在链接到我的所有功能)。有效地为每个单独的函数提供比它应该拥有的更多的权限。另一个问题是我所有用于不同功能的处理程序文件都被放入每个功能部署包中。
所以基本上,我不确定拥有与同一项目相关但功能独立的多个功能的正确方法是什么。以前有道理,现在没有了。
如果有人能给我一些建议
谢谢
我理解你的沮丧。在深入了解新版本并形成更好的理解之前,我也有同样的感觉。不过需要注意的一件事是,新版本尚未完全完成。因此,如果某些内容完全缺失,您可以提出问题并在 1.0 发布之前对其进行优先排序。
您应该在 serverless.yml
的 functions:
部分下的同一服务下定义多个函数。要单独打包这些函数(排除其他函数的代码),您必须在 package:
部分下设置 individually: true
。然后,您可以在根级别和函数级别使用 include 和 exclude 选项。即将进行的更改将允许您在包含和排除选项中使用 glob 语法(示例 **/*-fn.js)。您可以在此处找到有关包装的更多信息 https://serverless.com/framework/docs/guide/packaging/。
不知道如何在同一个服务下为不同的功能使用不同的角色。你是怎么做到 0.5 的?
我也试图为每个函数的单个 iam 角色找到一个解决方案。我找不到办法,但在查看文档时,我发现了这一行:"Support for separate IAM Roles per function is coming soon." on this page,所以至少我们知道他们正在努力。
Serverless 的 "IAM Roles Per Function" 插件允许您完全按照锡罐上的说明进行操作:为每个函数指定角色。您仍然可以使用 provider-level 角色:
By default, function level
iamRoleStatements
override the provider level definition. It is also possible to inherit the provider level definition by specifying the optioniamRoleStatementsInherit: true
编辑:您还可以在 both the provider and function level.
应用预定义的 AWSrole