aws cdk 将映像推送到 ECR

时间:2021-05-04 21:05:58

标签: amazon-web-services docker aws-cdk amazon-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 存储库?

1 个答案:

答案 0 :(得分:1)

AWS CDK 弃用了 repositoryName 上的 DockerImageAsset 属性。 GitHub 上有几个问题引用了这个问题。请参阅其中一位开发人员的this comment

<块引用>

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

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

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

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

<块引用>

用例

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

如果您不想等待 CDK 团队实施新构造,那么 https://github.com/wchaws/cdk-ecr-deployment 也有第三方解决方案。