Docker 我如何在Terraform中声明和引用ECR存储库而不损害其内容?

Docker 我如何在Terraform中声明和引用ECR存储库而不损害其内容?,docker,terraform,aws-ecs,terraform-provider-aws,aws-ecr,Docker,Terraform,Aws Ecs,Terraform Provider Aws,Aws Ecr,我正在构建一个Terraform配置,以将一些容器部署到AWS ECS。显然,我必须将Docker图像推送到ECR。我在ECR中创建了一个存储库并推送了图像 现在我在自动化。如果我这样声明aws\u ecr\u存储库: data "aws_ecr_repository" "service" { name = "myrepository" } 然后Terraform将管理它。我最终可以用类似的东西来引用它 image = "${aws_ecr_repository.myrepository.

我正在构建一个Terraform配置,以将一些容器部署到AWS ECS。显然,我必须将Docker图像推送到ECR。我在ECR中创建了一个存储库并推送了图像

现在我在自动化。如果我这样声明aws\u ecr\u存储库:

data "aws_ecr_repository" "service" {
  name = "myrepository"
}
然后Terraform将管理它。我最终可以用类似的东西来引用它

image = "${aws_ecr_repository.myrepository.repository_url}"
在构建ECS任务定义的过程中

我的印象是Terraform将删除此存储库,或者在它有图像时失败,当我运行
terraformdestroy
作为开发周期的一部分时。这将是不好的,因为那样的话,
terraform destroy
将永远无法完成,或者我必须清除ECR存储库,才能成功完成该命令


我如何才能最好地引用已存在但我似乎不希望Terraform管理的ECR存储库,因为Terraform可能会破坏Terraform之外的数据,即发布CI作业上载的Docker图像?

如果您不希望Terraform管理它,请使用。这可以让您获得如下数据:

data "aws_ecr_repository" "example" {
  name = "example"
}
然后引用url,如:

${data.aws_ecr_repository.example.repository_url}

如果您不希望Terraform管理它,请使用。这可以让您获得如下数据:

data "aws_ecr_repository" "example" {
  name = "example"
}
然后引用url,如:

${data.aws_ecr_repository.example.repository_url}

您的代码片段实际上与我的代码片段相同,Terraform在其中管理它。我在某个时候破坏了
terraform
,它破坏了ECR回购。如果您使用的是
数据
源,而不是
资源
,则其未被管理。验证您没有在任何地方定义
资源“aws\u ecr\u存储库”
。第二个代码块表示引用的是资源而不是数据源,即使第一个代码块表示它是数据源。检查代码中的另一个。我一定在某个时候把它作为资源。你的代码片段和我的代码片段几乎一样,Terraform在其中管理它。我在某个时候破坏了
terraform
,它破坏了ECR回购。如果您使用的是
数据
源,而不是
资源
,则其未被管理。验证您没有在任何地方定义
资源“aws\u ecr\u存储库”
。第二个代码块表示引用的是资源而不是数据源,即使第一个代码块表示它是数据源。检查代码中的另一个。我一定在某个时候把它作为资源。它现在似乎工作得很好。