对通过SAM

时间:2019-01-15 23:16:09

标签: amazon-web-services aws-lambda aws-api-gateway aws-sam

我已经使用SAM部署了API的v1。堆栈是API网关,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”别名,并将该别名用于/ v1 API,例如:

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

然后AutoPublishAlias将继续在每个新发行版上移动“实时”别名,但是“ v1”别名将保留在原位置,例如:

新的v2版本

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

这似乎是有道理的,但很难修复v1的错误。令我惊讶的是,我还没有在网上找到关于SAM的API版本控制(不是Lambda版本控制)的讨论。有处理这个的约定吗?

1 个答案:

答案 0 :(得分:1)

我认为没有约定,每个人都根据自己的需要做自己的事情。

您可以做的一件事是在您的SAM模板中添加一个Lambda Alias资源,然后手动将v1固定到函数的版本4:

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

但是,您正确地指出将错误修正版本推送到v1是有问题的。我建议将v1和v2分成独立的Cloudformation堆栈。似乎可行,因为您的功能位于API网关的后面,并且我假设除了提到的错误修复版本之外,v1的进一步开发也被冻结。