1

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

现在我正在自动化。如果我aws_ecr_repository这样声明:

data "aws_ecr_repository" "service" {
  name = "myrepository"
}

然后 Terraform 将管理它。我最终可以用类似的东西来引用它

image = "${aws_ecr_repository.myrepository.repository_url}"

在构建 ECS 任务定义的过程中。

我的印象是,当我terraform destroy作为开发周期的一部分运行时,Terraform 会删除这个存储库——或者当它有图像时会失败。这会很糟糕,因为terraform destroy这样要么永远不会完成,要么我必须清除 ECR 存储库才能成功完成该命令。

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

4

1 回答 1

8

如果您不希望 Terraform 管理它,请使用数据源。这使您可以像这样获取数据:

data "aws_ecr_repository" "example" {
  name = "example"
}

然后引用如下网址:

${data.aws_ecr_repository.example.repository_url}
于 2018-06-05T17:47:17.483 回答