AWS CDK 资产 docker 捆绑

AWS CDK assets docker bundling

我正在使用基于 Docker 的捆绑选项来安装必要的依赖项并创建 Lambda 层。部署成功。如果我尝试再部署几次 - 捆绑已启动,但最后会显示“无变化”。这是预期的行为,因为我没有更改任何内容,所以不会引入任何更改。

现在真正的花招是当我 运行 在 CI/CD 管道中执行部署命令时,它每次都会安装一个新环境。 CDK 变得混乱,即使没有对资产进行任何更改,它每次都会重新部署我的层。

问题 我需要做什么才能仅在对资产进行更改时进行部署?

当捆绑工件时,CDK 对工件中的文件进行哈希处理,如果哈希值不匹配,则它认为已进行更改并重新上传工件。

您可以找出导致散列旋转的原因...如果后续 cdk deploy 本地调用不旋转散列,可能是因为您 应该 在您的 CI/CD 管道中缓存(如依赖项的下载)

您可以指定自己的哈希值:

const sha = crypto.createHash('sha256');
const dirents = fs.readdirSync(codepath, { withFileTypes: true });
const filesNames = dirents
    .filter(dirent => dirent.isFile())
    .filter(dirent => new RegExp('(.*\.go)|(.*\.(mod|sum))$').test(dirent.name))
    .map(dirent => dirent.name);

for (const file of filesNames) {
    const data = fs.readFileSync(path.join(codepath, file));
    sha.update(`<file name=${file}>`);
    sha.update(data);
    sha.update('</file>');
}

const codeHash = sha.digest('hex');

lambda.Code.fromAsset(basePath, {
    assetHashType: cdk.AssetHashType.CUSTOM,
    assetHash: codeHash,
    bundling: { // whatever you're doing today