AWS Lambda的$LATEST版本定义

15
请指向AWS定义lambda版本$LATEST的文档,或建议这是AWS在没有定义术语的情况下使用的术语。
显然,AWS lambda文档说$LATEST是一个版本。 AWS Lambda函数版本 如果您没有发布所选函数的版本,则版本面板仅列出$LATEST版本
最初,我认为它像Git分支中指向最新提交的HEAD标签。 Git提交是不可变的,但lambda版本不是。 AWS Lambda函数版本 可以发布版本,该版本是持久的。
系统每次发布函数时都会创建一个新版本的Lambda函数。...发布版本时,代码和大多数设置被锁定,以确保用户在使用该版本时获得一致的体验。
但也可以取消发布并进行更改和保存。
您只能在未发布的版本上更改函数代码和设置。
所以我猜,由于我在AWS中找不到定义,$LATEST是代码+运行时+设置的临时快照,某人在AWS账户中保存了该快照,并且尚未更新和保存。

我想这就像本地git存储库中的正在进行的临时工件。我们不知道代码是什么,因为有人可能正在保存它,如果我们不使用已发布的、因此是不可变的版本作为调用限定符,我们永远不会知道我们正在执行什么。

个人认为版本应该是不可变的。它不应该像Lambda $LATEST一样是可变的。对我来说,3月19日下午3点的版本1或3月20日下午1点的版本1都没有任何意义。版本1必须是唯一的。如果进行更改,则必须是版本1.1或2.0。

调用

POST /2015-03-31/functions/FunctionName/invocations?Qualifier=Qualifier HTTP/1.1

请确认这个理解是否正确,除非只有一个人在工作和测试,否则我们不应该使用 $LATEST 进行调用。
如果是这样的话,在正常的工程中,拥有 $LATEST 没有实际意义,因为我们应该能够始终识别代码的修订版本,并在重新执行同一程序时重现相同的结果。

更新

我认为目前我的困惑是由于AWS的不一致和可能错误的命名。

版本如果已发布则不可变,但如果未发布,则可变,此时称为 $LATEST。

版本可以是 Lambda 函数的快照,但也可以是整数。

$LATEST 指向最后保存的 Lambda 函数,可以随时更改,因此如果使用 $LATEST,我们无法确定正在执行或查看什么。我看到的 $LATEST 可能与其他人看到的不同。在 $LATEST 上工作就像在移动的目标上工作。

AWS 有很多奇怪的“陷阱”,例如 ECS 容量提供程序是不可变的,一旦创建就无法删除,如果删除 ECS 集群,则该容量提供程序仍然存在但不可见,因此当尝试为具有相同名称的新 ECS 集群创建新的容量提供程序时会导致错误(这个问题被称为“设计如此”最终得到了修复)。我认为 $LATEST 就是其中之一。

enter image description here


1
我认为有些混淆。版本(例如1、2、3)是不可变的。这就是你在代码中使用别名的原因,因为别名可以更改以指向不同的版本。如果你在代码中使用版本,那么每次你更改你的lambda并发布新版本时,你都需要更新客户端的代码。 - Marcin
谢谢@Marcin,我之前认为“version”就像“commit”一样是不可变的,但$LATEST也被称作“version”,而且它不是不可变的。所以我的问题是,$LATEST“version”到底是什么,这真的让我感到困惑。 - mon
我已经从头到尾搜索了Lambda开发人员指南PDF文档,但没有找到它的定义。我想知道如何在文档不明确的情况下熟悉AWS服务。 - mon
当你在 lambda 中提到“版本”时,通常指的是“发布版本”(例如,1、2、3),它是不可变的。$LATEST只是最新的“未发布版本”,可以随意更改。您可以一直在 $LATEST 上工作/测试,直到满意为止。一旦您对其满意,就可以通过发布来“冻结”它。此时,它变成了不可变版本号1,例如。 - Marcin
1
谢谢@Marcin。现在我理解了,它就像本地的Git存储库,我可以在提交之前进行更改。 - mon
我根据评论添加了答案,以供将来参考。 - Marcin
1个回答

14

根据评论,以下内容有助于澄清问题:

当你在Lambda中提到“版本”时,通常是指不可变的“发布版本”(例如1、2、3)。$LATEST是最新的“未发布版本”,可以随意更改。您可以在上继续工作/测试,直到满意为止。一旦您满意,就可以通过发布来“冻结”它。此时它将成为不可变版本编号1。

由于版本是不可变的,所以在客户端代码中通常使用别名aliases。每当您发布函数的新版本时,可以更改别名以指向不同的版本。如果版本是可变的,或者可以某种方式被“取消发布”,那么别名将毫无意义。


2
我想指出的是,你可以“部署”最新版本,而不是“版本”。最新版本可以一遍又一遍地部署,未经限定的 ARN(或使用 $LATEST 限定符的合格 ARN)将始终引用此 $LATEST 版本(只要它已经被部署),无论发布了多少个版本。你总是可以更改、修改 Latest。就像一个暂存区。当你打开 Lambda 控制台并选择一个函数(而不是函数的版本)时,在编辑器中打开的代码就是最新的(如果它已经被部署)。 - Sinux1
1
多好的解释。 - Ankush Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接