Вызвать лямбда-функцию с развертыванием, используя безсерверный фреймворк - PullRequest
0 голосов
/ 26 сентября 2018

Есть ли способ вызвать лямбда-функцию сразу после развертывания, используя безсерверный фреймворк?Эта функция просто создает приложение SNS, которое требуется выполнить только один раз во время настройки.Я могу использовать serverless deploy stage && serverless invoke --function functionName, но это не приведет к срыву настройки в случае сбоя функции.

Я хочу, чтобы она была развернута как часть настройки.

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Хуки могут быть добавлены к событиям жизненного цикла Serverless Framework.

Я использовал плагин 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 выполняется.

Полный список событий / команд жизненного цикла Serverless Framework доступен здесь - https://gist.github.com/HyperBrain/50d38027a8f57778d5b0f135d80ea406

0 голосов
/ 27 сентября 2018

Не уверен, что это полностью соответствует вашим потребностям, но я успешно настроил функцию Lambda с событием CloudWatch, которое будет запускаться при вызовах API CloudFormation.

Вам понадобится CloudTrail, чтобы сделать это.

Возможно, вы можете ограничить выполнение функции конкретными стеками (возможно, используя атрибут resources в событии CloudTrail )

...

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"
...