我正在尝试做一些看起来相当合乎逻辑和直接的事情。
我正在使用 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 存储库?
答案 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 也有第三方解决方案。