【问题标题】:AWS SAM update function code of lambda of an API GatewayAWS SAM 更新 API Gateway 的 lambda 函数代码
【发布时间】:2021-01-24 11:22:54
【问题描述】:

我正在使用 CloudFormation 和 SAM 来部署一个堆栈,其中包含:

  • S3 存储桶
  • 认知
  • AWS::Serverless::Api
  • AWS::Serverless::Function(授权者 + 微服务,Type: Api 和 API 网关的端点)
  • 日志组

为了部署我的堆栈,我首先运行 aws cloudformation package 来打包 lambda,然后运行 ​​aws cloudformation deploy 来部署生成的堆栈。这是有效的。

我现在的目标是能够在不部署整个堆栈(不构建授权人和其他微服务)的情况下更新微服务,类似于无服务器框架中的serverless deploy function。这最好是一个使用宏或仅替换文件中文本的可重用模板。

我面临的问题:

  • 运行 aws lambda update-function-code 需要重新部署 lambda
  • 要重新部署 lambda,我必须声明 AWS::Serverless::Function。要使该函数成为 API 网关的一部分,还必须声明 AWS::Serverless::Api
  • 声明 AWS::Serverless::Api 需要定义所有其他函数,否则它们将从 API 网关中删除。

我觉得自己被困在这里,没有找到实现目标的其他选择。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation aws-api-gateway aws-sam


    【解决方案1】:

    由于您使用的是 SAM,我建议您使用 sam cli commands 部署和更新您的应用程序。

    你可以跑

    • sam build
    • sam package
    • sam deploy

    当您运行 sam deploy 时,它会部署您的应用程序,但所有后续 sam deploy 命令将更新您现有的 cloudformation 堆栈,需要更新的适当资源.

    如果您选择使用标准 Cloudformation cli 命令,则可以使用 aws cloudformation update-stack 命令,这样您就不会重新部署整个新堆栈。

    【讨论】:

    • 检测哪些资源需要更新是根据属性,比如CodeUri,对吧?这种方法的问题在于,必须构建其他微服务并再次检查它们的哈希值,而这正是我试图避免的。
    • 必须构建并检查其哈希值您要手动执行此操作吗?运行 sam build && sam deploy 应该只需要几分钟。
    • 虽然 sam cli 是 aws 推荐的执行此操作的方法,但 sam deploy 对于主动开发来说非常缓慢,我假设为什么许多人(像我自己)希望在活动期间快速更改 lambda开发(使用 local-api 并不总是一个解决方案,对我来说,我有 sqs 和其他 aws 基础设施,所以我需要实际部署 lambdas 以在活动开发期间进行许多小改动)
    • 作为我之前评论的后续,一旦您在 aws sam 期间部署一次,您就可以使用 Lamba“更新函数代码”方法仅更新 lambda 代码以进行小的更改,而无需完整重新部署。我找到了这个示例并出于我的目的对其进行了一些修改,因为我没有使用节点/webpack:dev.to/spalladino/…
    猜你喜欢
    • 2022-01-13
    • 2019-08-11
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2018-07-18
    • 2020-04-13
    • 2019-06-03
    • 2021-11-18
    相关资源
    最近更新 更多