在 AWS CloudFormation 和 Serverless 中组织堆栈和共享资源

Organising stacks and shared resources in AWS CloudFromation and Serverless

我有一个关于使用 CloudFormation 来设计和组织 AWS Serverless 资源的架构问题。

目前,我有多个按域特定用途组织的堆栈,并且效果很好。大多数包含 Lambdas 的堆栈必须使用 Serverless 进行转换(全部使用 SAM)。使用 EventBridgeS3+Events 的组合可以促进异步通信,并且效果很好。我遇到的问题是同步通信。

我不想使用从其他堆栈导出的名称从其他堆栈引用 Lambdas 并直接调用它们,因为这会导致更新和版本问题(如果在其他堆栈中引用输出导出,我除非先删除引用,否则无法更改资源,这对于 CI/CD 和保持关注点分开来说并不理想。

我一直在使用 API Gateway 作为抽象,但感觉相当笨拙。有这种分离是很好的,但是必须有域和 DNS 解析 + 让 API GW 暴露在外部感觉不对。也许有更好的方法将 API GW 配置为仅供内部使用。如果你成功了,能给我指明方向吗?

是否有更好的方法以同步方式从不同堆栈抽象调用 Lambda 函数? (Common template patterns 用于 CF 或类似的东西?)

我看到两个问题:

  1. 使用 API 网关的同步 Lambda 函数的替代方案。
  • Api 网关是一种简单的方法,使用 IAM 身份验证可以确保安全。与 REST APIs 相比,HTTP Api 是更加简化和便宜的选择。我们可以选择 Private Api 而不是 Regional/Edge,它不会暴露在 VPC 之外以使其移动安全。
  • 对于不需要任何 API 网关功能的简单用例,我们可以拥有一个目标为 Lambda 函数的私有 ALB。(这将每月花费一些费用)
  • 我们始终可以使用 AWS SDK invoke 直接调用 lambdas。
  1. 在模板之间共享资源的备选方案。
  • 如果我们需要删除和重新创建资源,导出和导入会有点问题,但如果我们只是更新资源,应该不会有问题。
  • 我们始终可以将 Lambda 函数的 Arn 存储在源模板中的 SSM 参数中,并从目标模板中的 SSM 参数中解析 A​​rn 的值。这是完全解耦的。这比简单地硬编码 Arn 的值要好。