【问题标题】:How to deploy a AWS Lambda Function conditionally, using Serverless Framework, only to prd stage如何使用无服务器框架有条件地将 AWS Lambda 函数部署到 prd 阶段
【发布时间】:2021-11-03 01:15:45
【问题描述】:

感谢您抽出宝贵时间阅读这篇文章。我正在尝试基于阶段(仅适用于“prd”阶段)有条件地部署 AWS Lambda 函数。

这个 lambda 有一个角色,它也有条件地部署。我已经通过在资源块上使用 cloudformation 条件实现了这一点,如下所示:

但是,我不知道如何使它适用于 lambda 函数,因为它位于函数块中,我不知道如何引用条件。从 serverless.yml 参考中,我决定执行如下所示的操作,但它不起作用:

有人可以帮助我了解我做错了什么吗?还有什么解决方案可以完成这项工作?提前致谢

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless-framework


    【解决方案1】:

    如果您检查 serverless.yml 参考,则 lambda 中不支持“条件”键

    无服务器框架定义不是 CloudFormation 的 1:1

    您可以覆盖由 Serverless 生成的 AWS CloudFormation 资源,以应用您自己的选项,link here

    或多或少看起来像这样:

    functions:
      startXtractUniversalInstance:
      ...
    
    resources:
      extensions:
        StartXtractUniversalInstanceFunction:
          Condition: ...
    

    请务必仔细检查为您的函数生成的名称,上面的 StartXtractUniversalInstanceFunction 可能是错误的

    【讨论】:

    • 您好!非常感谢您的回答。在那个 serverless.yml 参考中,如果你转到“functions”块,你会在“layers”和“tracing”下面找到一个“condition”子句。我认为有一种使用它的方法,可能类似于 CloudFormation。它明确表示--->“条件:SomeCondition#可选,添加'条件'子句”。我通过 cloudformation 资源提供 lambda 函数解决了这个问题,但我想知道为什么我不能在函数块中使用该子句。提前致谢
    【解决方案2】:

    这可以使用无服务器 if-else 插件来实现 https://www.serverless.com/plugins/serverless-plugin-ifelse

    您可以通过将插件添加到 serverless.yml 的插件部分来使用该插件

    plugins:
     - serverless-plugin-ifelse 
    

    并设置条件以更新函数的 serverless.yml 中的值并排除它们。 包含选项不可用,因此您的条件类似于 -

    custom:
      currentStage: ${opt:stage, self:provider.stage}
      serverlessIfElse:
          - If: '"${self:provider.stage}" == "prd"'
            Set:
              functions.startXtractUniversalInstance.role: <custom role for prod>
            ElseExclude:
              - functions.startXtractUniversalInstance
    

    【讨论】:

    • 非常感谢您的回答。我通过在模板的资源部分添加 Lambda 函数解决了这个问题。即使您的解决方案也有效,我想知道如何工作或函数块中条件子句的语法是什么。希望有人能找出来。谢谢朋友
    • 好吧。在资源部分声明 Lambda 函数有点违背了使用无服务器框架的目的。正如我在上面的帖子中提到的那样声明了条件。 serverless 会在执行前评估这个条件。因此,您不必在 yaml 的函数部分中指定任何内容。如果为真,即当阶段为“prd”时,该条件将完全排除此功能
    • 你是对的伙伴,这正是我的想法。它消除了从无服务器中提供 lambda 函数的好处。您的解决方案效果很好,我一定会使用它。谢谢老哥
    猜你喜欢
    • 2021-10-07
    • 2018-04-02
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2021-09-30
    • 2018-05-17
    相关资源
    最近更新 更多