如何使用无服务器框架有条件地部署 AWS Lambda 函数,仅到 prd 阶段

How to deploy a AWS Lambda Function conditionally, using Serverless Framework, only to prd stage

感谢您花时间阅读本文 post。我正在尝试根据阶段(仅适用于“prd”阶段)有条件地部署 AWS Lambda 函数。

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

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

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

如果您检查 serverless.yml 参考,lambda

中不支持“条件”键

无服务器框架定义不是 CloudFormation

的 1:1

您可以覆盖无服务器生成的 AWS CloudFormation 资源,以应用您自己的选项,link here

大致是这样的:

functions:
  startXtractUniversalInstance:
  ...

resources:
  extensions:
    StartXtractUniversalInstanceFunction:
      Condition: ...

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

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

您可以通过将它们添加到 serverless.yml

的插件部分来使用该插件
plugins:
 - serverless-plugin-ifelse 

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

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