使用无服务器框架调用 lambda 函数进行部署
Invoke a lambda function with deployment using serverless framework
有没有办法在使用无服务器框架部署后立即调用 lambda 函数。此功能仅创建 SNS 应用程序,只需在设置期间完成一次。
我可以使用 serverless deploy stage && serverless invoke --function functionName
,但如果函数失败,那不会破坏设置。
我希望它作为设置的一部分进行部署。
谢谢
不确定这是否完全符合您的需求,但我已经成功地配置了一个带有 CloudWatch 事件的 Lambda 函数,该事件将触发 CloudFormation API 调用。
您需要启用 CloudTrail 才能执行此操作。
您可以将函数的执行限制在特定的堆栈(可能使用 CloudTrail event 中的 resources
属性)
...
functions:
stack-deployment-function:
handler: stack-deployment-function.handler
description: Lambda function triggered by Stack changes/deployments
timeout: 300
environment:
FOO: bar
events:
- cloudwatchEvent:
name: ${self:service}-${opt:stage, self:provider.stage}-stack-deployment-function
description: 'Updates XYZ after CloudFormation update'
event:
source:
- "aws.cloudformation"
detail-type:
- "AWS API Call via CloudTrail"
detail:
eventName:
# Need to call DescribeStacks in Lambda to confirm successful deployment before making any changes
- "UpdateStack"
- "CreateStack"
可以在 Serverless 框架的生命周期事件中添加 Hook。
我使用 serverless-plugin-scripts 插件 (https://www.npmjs.com/package/serverless-plugin-scripts) 在部署和删除堆栈后调用自定义作业。
这是一个例子 -
custom:
scripts:
hooks:
'deploy:finalize': sls invoke -f functionName &&
'remove:remove': npm run scriptName && sls invoke -f anotherFunctionName
现在,通过 serverless deploy
成功部署后,将触发 sls invoke -f functionName
。
同样,在使用 serverless remove
删除时,npm run scriptName && sls invoke -f anotherFunctionName
执行。
此处提供无服务器框架的生命周期事件/命令的完整列表 - https://gist.github.com/HyperBrain/50d38027a8f57778d5b0f135d80ea406
有没有办法在使用无服务器框架部署后立即调用 lambda 函数。此功能仅创建 SNS 应用程序,只需在设置期间完成一次。
我可以使用 serverless deploy stage && serverless invoke --function functionName
,但如果函数失败,那不会破坏设置。
我希望它作为设置的一部分进行部署。
谢谢
不确定这是否完全符合您的需求,但我已经成功地配置了一个带有 CloudWatch 事件的 Lambda 函数,该事件将触发 CloudFormation API 调用。
您需要启用 CloudTrail 才能执行此操作。
您可以将函数的执行限制在特定的堆栈(可能使用 CloudTrail event 中的 resources
属性)
...
functions:
stack-deployment-function:
handler: stack-deployment-function.handler
description: Lambda function triggered by Stack changes/deployments
timeout: 300
environment:
FOO: bar
events:
- cloudwatchEvent:
name: ${self:service}-${opt:stage, self:provider.stage}-stack-deployment-function
description: 'Updates XYZ after CloudFormation update'
event:
source:
- "aws.cloudformation"
detail-type:
- "AWS API Call via CloudTrail"
detail:
eventName:
# Need to call DescribeStacks in Lambda to confirm successful deployment before making any changes
- "UpdateStack"
- "CreateStack"
可以在 Serverless 框架的生命周期事件中添加 Hook。
我使用 serverless-plugin-scripts 插件 (https://www.npmjs.com/package/serverless-plugin-scripts) 在部署和删除堆栈后调用自定义作业。
这是一个例子 -
custom:
scripts:
hooks:
'deploy:finalize': sls invoke -f functionName &&
'remove:remove': npm run scriptName && sls invoke -f anotherFunctionName
现在,通过 serverless deploy
成功部署后,将触发 sls invoke -f functionName
。
同样,在使用 serverless remove
删除时,npm run scriptName && sls invoke -f anotherFunctionName
执行。
此处提供无服务器框架的生命周期事件/命令的完整列表 - https://gist.github.com/HyperBrain/50d38027a8f57778d5b0f135d80ea406