【问题标题】:Organising stacks and shared resources in AWS CloudFromation and Serverless在 AWS CloudFormation 和无服务器中组织堆栈和共享资源
【发布时间】:2021-05-24 01:32:59
【问题描述】:

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

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

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

我一直使用API Gateway 作为抽象,但感觉相当沉重。有这种分离很好,但必须有域和 DNS 解析 + 将 API GW 暴露在外部感觉不对。也许有更好的方法将API GW 配置为仅限内部。如果您在这方面取得了成功,请您指点我的方向吗?

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

【问题讨论】:

    标签: amazon-web-services architecture amazon-cloudformation aws-api-gateway aws-serverless


    【解决方案1】:

    我看到两个问题:

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

    【讨论】:

    • 您好,感谢您的建议。我非常喜欢 SSM 参数的想法。只需考虑使用 lambda 的 IAM 策略 - 宁愿在运行时而不是在模板中解析依赖项名称以允许更松散的耦合。还考虑使用内部端点的 API GW。尚未考虑 ALB,但会阅读。
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2019-06-22
    • 2020-03-09
    • 2020-06-26
    • 2021-04-22
    • 2016-03-23
    相关资源
    最近更新 更多