首页 > 解决方案 > aws cdk 将图像推送到 ecr

问题描述

我正在尝试做一些看起来相当合乎逻辑和直截了当的事情。

我正在使用 AWS CDK 来预置一个 ecr 存储库:

     repository = ecr.Repository(
                            self, 
                            id="Repo", 
                            repository_name=ecr_repo_name,
                            removal_policy=core.RemovalPolicy.DESTROY
                            )

然后,我有一个 Dockerfile,它位于我的项目的根目录中,我试图将其推送到部署中的同一个 ECR 存储库。

我在相同的服务代码中执行此操作:

    assets = DockerImageAsset(
            self, 
            "S3_text_image", 
            directory=str(Path(__file__).parent.parent),
            repository_name=ecr_repo_name
            )

部署正常并继续进行并创建 ECR 存储库,但映像被推送到默认位置aws-cdk/assets

如何使部署将我的 Dockerfile 发送到我希望它所在的确切 ECR 存储库?

标签: amazon-web-servicesdockeraws-cdkamazon-ecr

解决方案


AWS CDK 贬低repositoryNameDockerImageAsset. GitHub 上存在一些引用该问题的问题。请参阅其中一位开发人员的评论

目前 CDK 带有 2 个资产系统:

旧版(目前仍然是默认设置),您可以在其中为每个资产指定一个 repositoryName,CLI 将创建并推送到您命名的任何 ECR 存储库。

新的(将来将成为默认),其中将通过执行 cdk 引导创建单个 ECR 存储库,并将所有图像推送到其中。CLI 将不再创建存储库,它必须已经存在。IIRC 这样做是为了限制部署所需的权限。@eladb,你能帮我记住为什么我们选择这样做吗?

有一个新构造请求,允许您部署到(aws-ecr-assets) ecr-deployment #12597的自定义 ECR 存储库。

用例

我想使用此功能将我的本地图像源代码完全部署到 ECR,使用我之前在我的 CDK 应用程序中创建的 ECR 存储库或更重要的是在应用程序外部使用 arn 创建。最大的问题是由于审计和语义版本控制,图像无法完全抽象到资产仓库中。

如果您不想等待 CDK 团队实施新结构,也可以在https://github.com/wchaws/cdk-ecr-deployment找到第三方解决方案。


推荐阅读