aws cdk 将映像推送到 ecr

Ben*_*ler 10 amazon-web-services docker amazon-ecr aws-cdk

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

我正在使用 AWS CDK 来配置 ecr 存储库:

repository = ecr.Repository(
    self, 
    id="Repo", 
    repository_name=ecr_repo_name,
    removal_policy=core.RemovalPolicy.DESTROY
)
Run Code Online (Sandbox Code Playgroud)

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

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

assets = DockerImageAsset(
    self, 
    "S3_text_image", 
    directory=str(Path(__file__).parent.parent),
    repository_name=ecr_repo_name
)
Run Code Online (Sandbox Code Playgroud)

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

如何让部署将我的 Dockerfile 发送到我希望它驻留的确切 ECR 存储库?

kyl*_*yto 15

AWS CDK 已repositoryNameDockerImageAsset. GitHub 上有几个问题引用了该问题。请参阅其中一位开发人员的评论:

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

旧版本(目前仍然是默认版本),您可以为每个资产指定一个存储库名称,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上使用第三方解决方案。