如何使用无服务器框架有条件地部署 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
感谢您花时间阅读本文 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