何时使用 terraform 与无服务器框架来部署 AWS lambdas 和周边资源?

ldm*_*ldm 6 amazon-web-services aws-lambda terraform serverless-framework

当您使用无服务器部署 AWS lambda 时,您可以创建 AWS 资源。但是,现在我开始使用 Terraform 开发资源,我不确定应该通过 Terraform 文件与无服务器定义哪些资源。

asi*_*swt 19

回答可能有点晚了,但我最近有一些经验可能对分享这个主题有用。

我曾使用无服务器框架为客户开发应用程序。客户已经拥有一个中间件团队,用自己的方式来管理与基础设施相关的AWS资源。我有一个类似的问题:我应该在我的无服务器项目中放置哪些 AWS 资源?

第一次尝试时,我使用无服务器框架来创建 VPC 和网络内容以及 lambda 函数。这个解决方案的问题是我的项目与中间件团队的工作方式有很多冲突。他们有一个中央文档来跟踪子网和 IP 地址。他们为整个组织提供单个 Internet、NAT 和 VPN 网关,其他 VPC 必须通过中转网关连接到该网关。他们使用第三方软件来管理防火墙规则。等等。我不得不多次返工来修改我的代码以符合他们的网络先决条件。

对于第二次尝试,我仅将 Lambda 函数和一些内容放入无服务器项目中,并由现有 IT 预先配置其他内容,例如 DynamoDB 表、SNS、SQS、S3、IAM 角色、安全组、VPC 等请求中间件团队的流程,并将参考 ID 放入我的配置中。此解决方案出现了一个新问题:随着应用程序的增长,始终需要新的 AWS 资源(例如 DynamoDB 表),并且配置计划应与开发周期保持一致。IT 请求流程通常与开发周期不同步。由于所需 AWS 资源的预置尚未完成,该项目被推迟。值得一提的是,随着我们在开发过程中发现更多内容,资源规范通常会发生变化。再次发出 IT 请求来更改规范会使整个过程变得极其糟糕。

从这次经历中,我了解到将“应用程序相关资源”与“基础设施相关资源”分开的重要性。将一种混合到另一种中会导致上述问题。

对我来说有效的是不要将网络问题放入无服务器项目中。相反,通过其他方式预先配置此类资源,例如在单独的项目中使用 Terraform 或通过手动配置,并将其引用 ID 放入无服务器项目的配置中。

对于无服务器项目中应该包含哪些资源,对我来说,最少的列表通常是 Lambda 函数、DynamoDB 表、SNS 主题、SQS 队列和 CloudWatch Events (EventBridge)。

我一般从这些虚拟资源开始,然后开始分析需求,看看我的应用程序在其增长过程中是否需要其他类型的资源。将此类资源添加到应用关注列表中,并与中间件、架构师、安全团队等相关方讨论,确定列表中的所有资源是否都可以在 Serverless Framework 项目中进行控制。


zdk*_*zdk 8

首先,您可以在https://serverless.com/learn/comparisons/页面中阅读 terraform/serverless 比较 。

而且,实际上您可以选择其中一个或将它们一起使用,因为它们在技术上并不相互排斥,一个专注于一件事,另一个专注于解决类似问题空间中的另一件事但不是同一个问题等。选择哪一个实际上取决于很多因素。

基本思路可能是这样的:

当您想专注于无服务器应用程序相关资源时,您可能会想到使用无服务器框架(serverless.yml)

但是,如果您想专注于定义成熟的基础设施或更传统风格的云基础设施(即自己定义网络、服务器、存储、负载平衡器等),您可能会考虑使用 Terraform。

最好的方法是试验,一次只选一个来试验。然后,您将看到什么适合您的特定任务以及什么让您的自我更轻松。

  • 链接已损坏 (7认同)

vga*_*tes 7

我认为这是一个很难回答的问题,因为这取决于很多因素,比如贵公司的内部结构。

根据经验,我认为仅由无服务器服务使用的每个资源都应在 serverless.yml 文件中定义,并且应使用 terraform(或其他技术)项目定义共享资源。我过去使用过这个近似值,效果很好。

Yan Cui 有一篇很好的文章讨论了共享代码和基础设施 ( https://hackernoon.com/aws-lambda-how-best-to-manage-shared-code-and-shared-infrastruct-827bed395eb7 )。