gpt4 book ai didi

amazon-web-services - 当 ECR 镜像引用代码时,AWS CDK 更新 lambda 函数代码

转载 作者:行者123 更新时间:2023-12-03 08:28:13 27 4
gpt4 key购买 nike

我有一个 Lambda 堆栈,位于与 Lambda 代码本身分开的存储库中。 Lambda 代码作为 docker 镜像打包并部署到 ECR,然后单独的 Lambda 堆栈使用 aws_lambda.DockerImageCode.from_ecr() 方法将代码作为 DockerImageFunction 引用。这似乎已经正确部署了初始函数,但是在将 Lambda 代码的新镜像发布到 ECR,然后使用 Lambda 堆栈从存储库运行 cdk deploy 后,它只是说没有发现差异。如何引用我的 Lambda 代码,以便在部署构造时发现代码已更改并更新 Lambda 函数代码(就像 aws lambda update-function-code cli 调用一样)?我在使用引用 Lambda 堆栈本地代码(如在同一存储库中)的代码 Assets 之前已经完成了此操作,但是当代码没有被引用为 Lambda 代码时,如何让堆栈识别 Lambda 代码中的更改本地 Assets ?

我意识到对于是否在单一存储库中组织堆栈还是在单独的存储库中组织堆栈以及他们负责部署的任何应用程序代码存在一些争议,但为了进行此讨论,我更感兴趣的是如何完成更新当堆栈与代码分离时,Lambda 函数的数量。

最佳答案

您可能遇到了臭名昭著的 Docker“最新”标签问题。

参见:

这意味着,如果您没有明确为 Docker 镜像指定“标签”,默认情况下,您的所有基础设施都会假设您正在尝试部署使用 your-image-name 的 Lambda :最新 图像名称。鉴于此引用(作为字符串)永远不会改变,无论您是否将新镜像推送到 ECR,您的 Lambda 部署都永远不会理解“最新”标记内发生的某些更改。

我的建议是,每当您更改代码库时,不要将其推送到“最新”标签之上,而应始终将其推送到全新且不可变的标签(例如当前时间戳)。然后,将该标签作为对可预测命名的参数存储条目的引用(例如 /myproduct/lambdaNameHere/tagName)。稍后,您可以在 Lambda 基础设施中“读取”该标签,现在将看到发生了更改(之前的 Lambda 版本指的是一个图像+标签组合,但现在指的是不同的图像+标签组合)。

关于amazon-web-services - 当 ECR 镜像引用代码时,AWS CDK 更新 lambda 函数代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65996593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com