问题描述
我已经搜索了几天,尝试了在网络上找到的各种内容,包括 AWS 的文档,但我仍在苦苦挣扎于 Canary 部署。最终,我们希望根据需要使用 terraform 和 AWS CLI 来编排部署 - 但现在我只是尝试通过 AWS 控制台(根据需要使用 AWS CLI)手动让 Canary 工作。
第一步
- 我有一个 API GW 设置
- 与舞台挂钩的 lambda 函数
- 阶段未启用金丝雀
- 该方法的集成请求中的 Lambda 函数没有 lambda 的版本或别名(只是 lambda 函数的名称) *** Lambda 返回最新响应***
第二步
- 我通过 API GW Stage 中的控制台启用了 Canary。
- 我通过添加当前的 lambda 版本来更新集成请求 -> Lambda 函数。
- 我在 API GW 中“部署 API”。 我看到 stage 和 canary deploymentIds 是一样的。 我相信此时最新的部署(包括最新的 lambda 版本和 API GW 设置中的所有其他内容)被保存为最新部署的版本和“非金丝雀”/“以前”/“产品”版本。 *** Lambda 返回最新响应 *** 我认为这是可以的,因为自从启用 Canary 以来我还没有对 lambda 进行更改。
第三步
- 我更改了 lambda 函数以返回不同的值
- 我点击“部署”将更改推送到 lambda 函数
- 然后我“发布新版本”
- 此时我假设我需要返回 API GW -> 集成请求并在“Lambda 函数”字段中更新到最新版本
- 现在“部署 API” 现在我假设之前的部署仍然是 prod/prevIoUs/non-canary 版本,刚刚发生的部署是带有所有最新代码、版本、API GW 设置等的 Canary 版本。
现在事情变得棘手了: 如果我将 Canary 百分比设置为 10%,我希望看到来自 API 的 10% 的响应具有最新响应,而 90% 具有先前版本的响应 - 但是它被翻转了,我得到了 90% 的 Canary 响应。如果我在 API GW -> Stage -> Canary 中将 Canary 百分比更改为 90%,则在测试时,我使用最新响应平均为 10%。
如果可能的话,我宁愿避免使用 lambda 别名或阶段变量(为了简单起见)。我假设金丝雀在 2 个部署快照之间切换,而最新的部署是金丝雀。如果这是正确的,我不需要在“集成请求 - > Lambda 函数”中使用 stageVariable 来映射到版本。而且由于我不想通过 Lambda 流量拆分来做金丝雀 - 我不需要创建 lambda 别名。
我还使用 AWS CLI 命令尝试了上述大部分步骤(除了修改 Lambda 函数代码和创建新的 lambda 版本)。这产生了类似的结果。
我还没有想在这里花哨。没有 CloudFormation、CodeDeploy、terraform 等。一旦我了解 API GW 级金丝雀的工作原理,下一步就是自动化。我也不想做蓝绿色金丝雀。
谢谢!期待看到它很明显/易于修复。 ;)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)