【问题标题】:AWS SAM - 如何处理大量端点
【发布时间】:2018-06-19 15:21:48
【问题描述】:

我们正在使用 AWS SAM 构建 API。在 CodeStar 中的 Lambda 节点模板上构建。事情进展顺利,直到我们的 template.yml 文件变得太大。每当推送代码并且 CloudFormation 开始执行更改集并为 SAM 端点创建堆栈时,它都会失败并回滚到最后一次成功的构建。

似乎我们有太多资源超出了每个堆栈的 CloudFormation 限制。

我尝试拆分模板文件并编辑构建规范以处理两个模板文件并执行两个 AWS CloudFormation 包命令并添加另一个工件。但它也没有奏效。因为只识别第一个模板并且只创建一个堆栈。

我找不到创建多个堆栈的自动部署的方法。

我很感激对此的一些意见和处理这种情况的建议。

提前致谢。

【问题讨论】:

  • 你有解决办法吗?

标签: amazon-web-services aws-lambda amazon-cloudformation aws-codebuild serverless


【解决方案1】:

您应该尝试使用嵌套堆栈模式。您无需将当前堆栈拆分为多个并行堆栈,而是创建一个父堆栈,该父堆栈将依次创建多个子堆栈。

更多信息here

【讨论】:

  • 感谢您的回复。但我不确定嵌套堆栈是否是解决方案。我尝试嵌套堆栈,但它不能很好地与 AWS::Serverless::Transform 配合使用。我无法将 SAM 功能放在单独的堆栈中,每当我尝试使用 AWS CLI 部署这些堆栈时,部署都会失败。 github.com/awslabs/serverless-application-model/issues/151
【解决方案2】:

AWS SAM(从 SAM v1.9.0 开始)支持嵌套应用程序,这些应用程序映射到嵌套的 CloudFormation 堆栈,该堆栈达到 200 个资源限制。 (AWS::Serverless::Application 转换为 AWS::CloudFormation::Stack)

https://github.com/awslabs/serverless-application-model/releases/tag/v1.9.0

【讨论】:

  • 但似乎(根据我从 CloudFormation 得到的错误)您无法将对在父堆栈中创建的 API 网关的引用传递给子堆栈。它们要求在定义函数的同一模板中创建 Api,因此这种模式会强制您创建多个 API 网关
【解决方案3】:

主要看的是你的 sam 模板中有哪些组件?有任何依赖关系吗?所有函数是否共享相同的 API 网关?所有函数都访问 DynamoDB 表吗? 就我而言,我通过 API [API 网关 + 函数 (CRUD)] 以单存储库的方式拆分 SAM,每个文件夹都包含其 sam 模板。

如果您有 Redis 或 SNS、SQS 之类的共享服务,则可以有一个单独的堆栈,使用 export import Feature 来导入服务的 ARN。

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2020-08-20
    • 2020-01-26
    • 2020-11-03
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多