【问题标题】:Invoke a lambda function with deployment using serverless framework使用无服务器框架通过部署调用 lambda 函数
【发布时间】:2019-03-02 15:55:22
【问题描述】:

有没有办法在使用无服务器框架部署后立即调用 lambda 函数。此函数仅创建 SNS 应用程序,只需在设置期间执行一次。 我可以使用serverless deploy stage && serverless invoke --function functionName,但如果功能失败,这不会破坏设置。

我希望它作为设置的一部分进行部署。

谢谢

【问题讨论】:

  • 我很想知道如何在部署时运行一些迁移。如果迁移失败,它应该回滚到之前的部署。
  • 嗨@NibyNool,请参阅下面我的回答。希望你觉得它有用。

标签: serverless-framework serverless


【解决方案1】:

可以将 Hooks 添加到 Serverless 框架的生命周期事件中。

我使用 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

【讨论】:

  • hmm 但是如何在这里通过变量或 !Ref 内部函数引用函数的名称?
【解决方案2】:

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

【讨论】:

  • 看起来很有趣。看起来它只会在 cloudformation 发生更改时运行,我想知道即使已经部署了某些用例也不会触发 CF 更新。
猜你喜欢
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2020-07-19
  • 2017-12-15
  • 2021-02-27
  • 2018-09-09
相关资源
最近更新 更多