【发布时间】:2022-04-25 16:14:49
【问题描述】:
Terraform 有没有办法在尝试创建之前检查 Google Cloud 中的资源是否存在?
我想在工作期间检查以下资源是否存在于我的 CircleCI CI/CD 管道中。我可以访问终端命令、bash 和 gcloud 命令。如果资源确实存在,我想使用它们。如果它们不存在,我想创建它们。我在 CircleCI 的 config.yml 中执行此逻辑作为我可以访问终端命令和 bash 的步骤。我的目标是在需要时在 GCP 中创建必要的基础架构(资源),否则在创建时使用它们,而不会在我的 CI/CD 构建中出现 Terraform 错误。
如果我尝试创建一个已经存在的资源,Terraform 应用将导致错误提示“您已经拥有此资源”,现在我的 CI/CD 作业失败。
以下是描述我试图获取的资源的伪代码。
resource "google_artifact_registry_repository" "main" {
# this is the repo for hosting my Docker images
# it does not have a data source afaik because it is beta
}
对于我的 google_artifact_registry_repository 资源。我的一种方法是使用数据源块进行 Terraform 应用,并查看是否返回值。问题在于 google_artifact_registry_repository 没有数据源块。因此,我必须使用资源块创建此资源一次,之后的每个 CI/CD 构建都可以依赖它。是否有解决方法可以读取它存在?
resource "google_storage_bucket" "bucket" {
# bucket containing the folder below
}
resource "google_storage_bucket_object" "content_folder" {
# folder containing Terraform default.tfstate for my Cloud Run Service
}
我的 google_storage_bucket 和 google_storage_bucket_object 资源。如果我使用数据源块执行 Terraform 应用以查看这些是否存在,我遇到的一个问题是当找不到资源时,Terraform 需要永远返回该状态。如果我能在 10 到 15 秒之内确定资源是否存在,如果不存在则假设这些资源不存在,那就太好了。
data "google_storage_bucket" "bucket" {
# bucket containing the folder below
}
output bucket {
value = data.google_storage_bucket.bucket
}
当资源存在时,我可以使用 Terraform 输出存储桶来获取该值。如果不存在,Terraform 需要很长时间才能返回响应。对此有何想法?
【问题讨论】:
-
这里的理想路径是将这些资源导入状态并使用 TF 进行管理。
-
我试过了。我遇到的问题是我正在导入一个不存在的资源(云存储桶)。 Terraform 导入会挂起,或者花了很长时间我没有等待它完成。我希望这个脚本等待更多分钟。如果资源不存在并且我知道,那么我可以创建资源。如果资源存在,那么我可以导入它。我需要先知道资源是否存在,以确定是否需要导入。
标签: terraform terraform-provider-gcp