Управление версиями API, развернутого с SAM - PullRequest
0 голосов
/ 16 января 2019

Я развернул v1 API, используя SAM. Стек представляет собой таблицу API Gateway, Lambda и DynamoDB.

Функция Lambda управляется через свойство AutoPublishAlias. Псевдоним называется «Live». Каждый раз, когда я развертываю новый выпуск v1, я получаю новую версию Lambda, и псевдоним «Live» изменяется, чтобы указывать на новый выпуск, например:

Перед выпуском:

Lambda version:
              3 <--- Alias: Live <--- v1 API
              2
              1

После выпуска:

Lambda version:
              4 <--- Alias: Live <--- v1 API
              3
              2
              1

Теперь я хочу развернуть v2, но оставить развернутым v1.

Я рассмотрел подход модификации моего чванства для создания путей с базовыми путями / v1 и / v2. Я бы также создал псевдоним "v1", указывающий на последний выпуск v1, и использовал бы этот псевдоним для API / v1, например:

Lambda version:
              5 <--- Alias: Live <--- v2 API
              4 <--- Alias: v1   <--- v1 API
              3
              2
              1

Затем AutoPublishAlias будет продолжать перемещать псевдоним "Live" в каждом новом выпуске, но псевдоним "v1" будет сохраняться там, где он был, например:

Новая версия v2

Lambda version:
              6 <--- Alias: Live <--- v2 API
              5
              4 <--- Alias: v1   <--- v1 API
              3
              2
              1

Это кажется разумным, за исключением того, что сделать исправление ошибки в v1 будет сложно. Я удивлен, что не нашел ни одного обсуждения версионирования API (не лямбда-версионирования) с SAM в Интернете. Есть соглашение для обработки этого?

1 Ответ

0 голосов
/ 16 января 2019

Я не думаю, что есть соглашение, каждый делает свое дело, которое соответствует его потребностям.

Одна вещь, которую вы можете сделать, это добавить ресурс Lambda Alias в шаблон SAM и вручную прикрепить v1 к версии 4 вашей функции:

MyLambdaV1Version:
  Type: AWS::Lambda::Alias
  Properties:
    FunctionName: !Ref MyLambda
    FunctionVersion: 4
    Name: v1

Тем не менее, вы правильно указываете, что отправка исправления ошибки в v1 будет проблематичной. Я бы рекомендовал разделить v1 и v2 на независимые стеки Cloudformation. Похоже, что это возможно, поскольку ваши функции находятся за шлюзом API, и, как я предполагаю, дальнейшее развитие v1 заморожено, помимо упомянутых выпусков исправлений ошибок.

...