显然,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 就是其中之一。