Бессерверное развертывание условной функции - PullRequest
0 голосов
/ 26 февраля 2019

Следующая конфигурация извлечена из моего serverless.yml

service: test-svc

provider:
  name: aws
  ...

functions:
  apiHandler:
    handler: index.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
  taskHandler:
    handler: task.handler
    events:
      - sqs:
          ...
  alexaHandler:
    handler: alexa.handler
    events:
     - alexaSmartHome: ...

Я хочу развернуть apiHandler и taskHandler функцию только в region-a

И развернуть alexaHandler вregion-b, region-c и region-d.

Если я выполню команду sls deploy --region us-east-1, все три функции будут развернуты, но мне это не нужно.Мне нужно только 2 функции для развертывания.

  1. Использование sls deploy function не вариант, потому что он заменяет только zip-файл.
  2. Помещение alexaHandler в подкаталог с новым serverless.ymlне работало, потому что развертывание упаковывает только подкаталог и не будет включать код из родительского каталога.(Многие коды разделены между 3 функциями)

Есть предложения по решению этого требования?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Вы можете условно выбрать значения в serverless.yml, сохранив условные функции в пользовательской переменной, такой как

### serverless.yml
provider:
  name: << aws or your provider >>
  runtime: << your runtime, eg nodejs8.10 >>
  region: << your aws region >>
  stage: ${opt:stage, 'dev'}
  custom:
    extraCode:
      dev:
      testing: ${file(testing_only/testing_endpoints.yml)}
      prod:

...

## and then at the functions section of serverless.yml

functions:
  - ${file(functions/someFunctionsInAFile.yml)}
  - ${file(functions/someMoreFunctions.yml)}
  - ${self:custom.extraCode.${self:provider.stage}}

При развертывании без сервера вы должны передать параметр командной строки --stage=myStageName, чтобы припередайте --stage=dev или --stage=prod, последняя строка в разделе функций будет пустой и ничего не будет развернуто.

Если вы введете --stage=testing, последняя строка в разделах функций будет заполнена файломустановите в разделе пользовательских переменных, а затем ваш тестовый код будет развернут.

0 голосов
/ 26 февраля 2019

Пройдя весь список плагинов без сервера, который я обнаружил выше, требование можно выполнить с помощью serverless-plugin-select

Используя этот плагин, мы можем выбрать для развертывания только несколько функций из безсерверных.yml в зависимости от значения stage или region.В моем случае используется значение региона.

Ниже приведено изменение serverless.yml.plugins добавлен раздел и regions ключ добавлен в каждую функцию.

service: test-svc


plugins:
  - serverless-plugin-select

provider:
  name: aws
  ...

functions:
  apiHandler:
    ...
    regions:
      - us-west-2
  taskHandler:
    ...
    regions:
      - us-west-2
  alexaHandler:
    ...
    regions:
      - eu-west-1
      - us-east-1
      - us-west-2

При использовании вышеуказанного конфига я использую следующий скрипт bash для развертывания для всех регионов.

#!/usr/bin/env bash

serverless deploy --region eu-west-1
serverless deploy --region us-east-1
serverless deploy --region us-west-2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...