【问题标题】:AWS CDK assets docker bundlingAWS CDK 资产 docker 捆绑
【发布时间】:2020-12-18 15:41:12
【问题描述】:
我正在使用基于 Docker 的捆绑选项来安装必要的依赖项并创建 Lambda 层。部署成功。如果我尝试再部署几次 - 捆绑已启动,但最后显示“无更改”。这是预期的行为,因为我没有更改任何内容,因此没有引入任何更改。
现在真正的诡计发生在我在 CI/CD 管道中运行部署命令时,该管道每次都会安装一个全新的环境。 CDK 感到困惑,即使没有对资产进行任何更改,它也会每次都重新部署我的层。
问题
我必须做什么才能仅在将更改引入资产时进行部署?
【问题讨论】:
标签:
amazon-web-services
assets
aws-cdk
【解决方案1】:
当捆绑工件时,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