使用无服务器部署AWS Lambda时,可以创建AWS资源。但是,现在我开始使用Terraform来开发资源,并且我不确定应该通过Terraform文件还是无服务器来定义哪些资源。
答案 0 :(得分:4)
首先,您可以在https://serverless.com/learn/comparisons/页上阅读Terraform /无服务器比较。
而且,实际上,您可以选择其中一个,也可以一起使用,因为它们在技术上并不互斥,一个专注于一件事,另一个专注于在相似的问题空间中解决另一件事,但又不一样问题等 选择哪个真的取决于很多因素。
基本思维可能是这样的:
当您要关注与无服务器应用程序相关的资源时,您可能会考虑使用无服务器框架(serverless.yml)
但是,如果您想专注于定义成熟的基础架构或更传统的云基础架构(即,自己定义网络,服务器,存储,负载均衡器等),则可以考虑使用Terraform。
最好的方法是进行实验,一次只选择一个即可。然后,您将看到适合您的特定任务以及使自己更轻松的事情。
答案 1 :(得分:2)
我认为这是一个很难回答的问题,因为它取决于许多因素,例如贵公司的内部结构。
根据经验,我想说的是,只有无服务器服务使用的每个资源都应该在serverless.yml文件中定义,共享资源应该使用terraform(或其他技术)项目来定义。我过去曾使用过这种近似方法,但效果很好。
Yan Cui的一篇不错的文章谈论共享代码和基础结构(https://hackernoon.com/aws-lambda-how-best-to-manage-shared-code-and-shared-infrastructure-827bed395eb7)。
答案 2 :(得分:0)
回答可能有点晚了,但我最近有一些经验可能对分享这个主题有用。
我曾使用无服务器框架为客户开发应用程序。客户已经拥有一个中间件团队,以他们自己的方式来管理与基础设施相关的 AWS 资源。我有一个类似的问题:我应该在无服务器项目中放入哪些 AWS 资源?
第一次尝试时,我使用无服务器框架来创建 VPC 和网络内容以及 lambda 函数。这个解决方案的问题是我的项目与中间件团队的工作方式有很多冲突。他们有一个中央文件来跟踪子网和 IP 地址。它们为整个组织提供一个 Internet、NAT 和 VPN 网关,其他 VPC 必须通过中转网关连接到这些网关。他们使用第三方软件来管理防火墙规则。等等。我不得不多次返工来修改我的代码以符合他们的网络先决条件。
对于第二次尝试,我在我的无服务器项目中只放置了 Lambda 函数和一些东西,还有其他东西,例如 DynamoDB 表、SNS、SQS、S3、IAM 角色、安全组、VPC 等。中间件团队现有的 IT 请求流程,并将参考 ID 放入我的配置中。此解决方案出现了一个新问题:随着应用程序的增长,始终需要新的 AWS 资源,例如 DynamoDB 表,并且供应计划应与开发周期保持一致。 IT 请求流程通常与开发周期不同步。由于所需 AWS 资源的预置待定,该项目被推迟。值得一提的是,资源规范通常会随着我们在开发过程中发现的更多而改变。发出另一个 IT 请求来更改规范,这会使流程变得非常糟糕。
从这次经历中,我了解到将“与应用程序相关的资源”与“与基础设施相关的资源”分开的重要性。将一种混入另一种会导致上述问题。
对我有用的是不要将网络问题置于无服务器项目中。相反,通过其他方式(例如在单独的项目中使用 Terraform 或通过手动配置)预配置此类资源,并将它们的参考 ID 放入无服务器项目的配置中。
对于无服务器项目中应该包含哪些资源,对我来说,最少的列表通常是 Lambda 函数、DynamoDB 表、SNS 主题、SQS 队列和 CloudWatch Events (EventBridge)。
我一般从这些假人开始,然后开始分析需求,看看我的应用程序在其增长过程中是否需要其他类型的资源。将此类资源添加到应用关注列表中,并与中间件、架构师、安全团队等相关方讨论确定列表中的所有资源是否可以在无服务器框架项目中控制。