1

我已经搜索了几天尝试在网络上找到的各种东西,包括 AWS 的文档,但我仍然在 Canary 部署方面苦苦挣扎。最终,我们希望根据需要使用 Terraform 和 AWS CLI 来编排部署 - 但现在我只是试图通过 AWS 控制台手动让金丝雀工作(根据需要使用 AWS CLI)。

第一步

  • 我有一个 API GW 设置
  • 连接到舞台的 lambda 函数
  • 金丝雀未在阶段启用
  • 方法的集成请求中的 Lambda 函数没有 lambda 的版本或别名(只是 lambda 函数的名称)*** Lambda 返回最新响应 ***

第二步

  • 我在 API GW 阶段通过控制台启用金丝雀。
  • 我通过添加当前的 lambda 版本来更新集成请求 -> Lambda 函数。
  • 我在 API GW 中“部署 API”。我看到阶段和金丝雀部署ID是相同的。我相信此时最新的部署(包括最新的 lambda 版本和 API GW 设置中的所有其他内容)都保存为最新部署的版本和“非金丝雀”/“以前”/“产品”版本。*** Lambda 返回最新的响应 *** 我认为这没问题,因为自从启用金丝雀后我还没有对 lambda 进行更改。

第三步

  • 我更改 lambda 函数以返回不同的值
  • 我点击“部署”将更改推送到 lambda 函数
  • 然后我“发布新版本”
  • 此时我假设我需要返回 API GW -> 集成请求并在“Lambda 函数”字段中更新到最新版本
  • 现在“部署 API” 现在我假设之前的部署仍然是 prod/previous/non-canary 版本,而刚刚发生的部署是具有所有最新代码、版本、API GW 设置等的 canary 版本。

现在事情变得棘手了:如果我将 Canary 百分比设置为 10%,我希望看到来自 API 的 10% 的响应具有最新响应,而 90% 是以前版本的响应 - 但是它被翻转了,我得到了90% 的金丝雀响应。如果我在 API GW -> Stage -> Canary 中将 Canary 百分比更改为 90%,则在测试时我平均 10% 与最新响应。

如果可能的话,我宁愿避免使用 lambda 别名或阶段变量(为了简单起见)。我假设金丝雀在 2 个部署快照之间切换,而最新的部署是金丝雀。如果这是正确的,我不需要在“集成请求 - > Lambda 函数”中使用 stageVariable 来映射到版本。而且由于我不想通过 Lambda 流量拆分来做金丝雀 - 我不需要制作 lambda 别名。

我还使用 AWS CLI 命令尝试了上述大部分步骤(除了修改 Lambda 函数代码和创建新的 lambda 版本)。这产生了类似的结果。

我还没想在这里变得花哨。没有 CloudFormation、CodeDeploy、Terraform 等。一旦我了解 API GW 级别的金丝雀是如何工作的,下一步就是自动化。我也不想做蓝绿色的金丝雀。

谢谢!期待看到它是明显/简单的修复。;)

4

0 回答 0