如何在Terraform (For GCP)中引用现有的组织文件夹或其他资源



我对Terraform很陌生,如果这个问题有一个明显的答案我错过了,我很抱歉。

我正在尝试为现有组织创建一个地形配置文件。我能够在下面列出的main.tf中提供我所拥有的一切,除了这个组织中已经存在的Shared文件夹。

相关github问题:

  • 文件夹操作违反父目录的惟一显示名。
  • 文件夹重命名与现有文件夹
  • 匹配时的通用错误消息

以下是我遵循的步骤:

  1. 在组织管理界面中手动创建Shared文件夹
  2. 手动创建一个起程拓殖管理项目<redacted-project-name>的根源Shared文件夹。
  3. terraform管理项目手动创建一个名为terraform@<redacted-project-name>的服务帐户
  4. 创建、下载并安全存储terraform@<redacted-project-name>服务帐号密钥。
  5. terraform管理项目中启用api:cloudresourcemanager.googleapis.com,cloudbilling.googleapis.com,iam.googleapis.com,serviceusage.googleapis.com
  6. 设置服务帐户权限为角色/所有者,角色/resourcemanager.organizationAdmin,角色/resourcemanager.folderAdmin角色/resourcemanager.projectCreator
  7. 创建main.tf
terraform {
required_providers {
google = {
source  = "hashicorp/google"
version = "3.85.0"
}
}
}
provider "google" {
credentials = file(var.credentials_file)
region      = var.region
zone        = var.zone
}
data "google_organization" "org" {
organization = var.organization.id
}
resource "google_folder" "shared" {
display_name = "Shared"
parent       = data.google_organization.org.name
}
resource "google_folder" "ddm" {
display_name = "Data and Digital Marketing"
parent       = data.google_organization.org.name
}
resource "google_folder" "dtl" {
display_name = "DTL"
parent       = google_folder.ddm.name
}

我收到的错误:

Error: Error creating folder 'Shared' in 'organizations/<redacted-org-id>': Error waiting for creating folder: Error code 9, message: Folder reservation failed for parent [organizations/<redacted-org-id>], folder [] due to constraint: The folder operation violates display name uniqueness within the parent.

如何包含地形配置文件中的现有资源?

  • 对于(组织)文件夹(如上面的示例)
  • 计费帐户
  • 对于项目,即我是否应该声明或导入地形管理项目
  • main.tf?
  • 对于业务帐户,如何处理正在运行terraform apply
  • 的帐户的现有密钥和权限
  • 用于现有策略和启用api

为了在地形模板中包含已经存在的资源,请使用import语句。

为文件夹

在google_folder的Terraform文档中:

# Both syntaxes are valid
$ terraform import google_folder.department1 1234567
$ terraform import google_folder.department1 folders/1234567

对于上面的例子,

  1. 获取文件夹id使用gcloud alpha resource-manager folders list --organization=<redacted_org_id>提供组织id。
  2. id保存文件夹,如果没有完成,宣布main.tf内的文件夹作为资源
    resource "google_folder" "shared" {
    display_name = "Shared"
    parent       = data.google_organization.org.name
    }
    
  3. 执行命令:terraform import google_folder.shared folders/<redacted_folder_id>. c。您应该得到类似google_folder.shared: Import prepared!
  4. 的输出
  5. 确保您的基础设施通过terraform plan更新。
    No changes. Your infrastructure matches the configuration.
    Terraform has compared your real infrastructure against your configuration 
    and found no differences, so no changes are needed.
    

相关内容

  • 没有找到相关文章