构建 NodeJS Lambda - 相同的源,不同的 SHA 哈希

Building NodeJS Lambda - same source, different SHA hash

我遇到了一个有趣的问题,我无法指出原因。这是故事。

我的目标是使用 CircleCI 作为编排器,使用 Terraform 管理 Lambda 函数。过程如下所示:

GitHub repository -> CircleCI build (npm install && zip) -> aws s3 sync ZIP to S3 -> Terraform picks up ZIP from S3 -> if SHA is different, deploy to Lambda.

除了一个小问题,一切都很好。如果我 运行 整个过程两次,GitHub 存储库没有变化,Terraform 总是报告新的 SHA 哈希:

source_code_hash: "mx56e7pMbBdftYHes+pETvjFZInvKsP92vtZ5URqyJY=" => "dhe66opfifDLEr7wI+Ie9UE6ioUiG8hTajuPhctA+W0="

似乎问题出在npm install过程中,可能总是做一些略有不同的事情,因此结果也不同。我不认为 ZIPing 文件夹会造成麻烦,这很简单 zip -r file.zip *

请解释一下这种行为?

npm install 版本 4 或更低版本是不确定的,因此无法保证您在不同版本中的 npm install 是相同的。

npm 用版本 5 的 package-lock.json 解决了它。使用最新版本的 npm.

再试一次

或者,您可以尝试 yarnpnpm。两者都是旨在使用确定性安装的替代包管理器。