使用无服务器框架进行部署时调用lambda函数

时间:2018-09-26 19:43:26

标签: serverless-framework serverless

有没有一种方法可以在部署后使用无服务器框架立即调用lambda函数。此功能仅创建SNS应用程序,仅在安装过程中才需要执行一次。 我可以使用serverless deploy stage && serverless invoke --function functionName,但是如果功能失败,那将不会破坏设置。

我希望将其作为安装程序的一部分进行部署。

谢谢

2 个答案:

答案 0 :(得分:3)

可以将挂钩添加到无服务器框架的生命周期事件中。

我使用了无服务器插件脚本插件(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

答案 1 :(得分:1)

不确定这是否完全满足您的需求,但是我已经成功配置了带有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"