$LATEST 版本的 AWS Lambda 的定义

mon*_*mon 6 amazon-web-services aws-lambda

请向我指出 AWS 定义了 lambda 版本的$LATEST的文档,或者建议它是 AWS 使用术语而不定义它的方式。

显然,AWS lambda 文档说$LATEST是一个版本。

如果您尚未发布所选函数的版本,“版本”面板将仅列出 $LATEST版本

最初我认为它就像HEAD标记指向 Git 分支中的最新提交。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
Run Code Online (Sandbox Code Playgroud)

请告知这是否是正确的理解,除非只有一个人在工作和测试,否则我们不应该使用 $LATEST 进行调用。

如果是这样,我认为 $LATEST 在适当的工程中没有实际用途,如果我们对修订重新执行相同的程序,我们应该能够一致地识别代码的修订并重现相同的结果。


更新

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

如果已发布,则版本是不可变的,但如果未发布则是可变的,在这种情况下称为 $LATEST。

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

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

AWS 有很多奇怪的“陷阱”,例如 ECS 容量提供程序是不可变的,一旦创建就无法删除,如果删除 ECS 集群,该容量提供程序将保留在那里并且不可见,从而在尝试为新的 ECS 集群创建新容量提供程序时导致错误具有相同的名称(尽管最终修复了称为“按设计”的错误)。我相信 $LATEST 就是其中之一。

在此处输入图片说明

Mar*_*cin 6

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

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

由于版本是不可变的,aliases通常在您的客户端代码中使用。每当您发布函数的新版本时,都可以更改别名以指向不同的版本。如果版本是可变的,或者可能在某些时候“未发布”,那么别名就不会毫无意义。

  • 我想指出的是,您可以“部署”最新版本,而不是“版本”。最新版本可以反复部署,并且无论发布了多少个版本,未限定的 arn(或使用 $LATEST 限定符的限定 arn)将始终引用此 $LATEST 版本(只要已部署)。您可以随时更改、修改最新的。它就像舞台场地。当您打开 lambda 控制台并选择一个函数(不是该函数的版本)时,在编辑器中打开的代码是最新的(如果已部署)。 (2认同)