繁体   English   中英

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

[英]How to reference an existing organization folder, or other resources, in Terraform (For GCP)

我是 Terraform 的新手,如果这个问题有一个明显的答案我很抱歉,我很抱歉。

我正在尝试为现有组织创建一个 terraform 配置文件。 除了该组织中已经存在的Shared文件夹外,我能够提供下面概述的main.tf中的所有内容。

相关 github 问题:

以下是我遵循的步骤:

  1. 在组织管理 UI 中手动创建Shared文件夹。
  2. Shared文件夹的根目录下手动创建一个Terraform 管理项目<redacted-project-name>
  3. terraform 管理项目手动创建一个名为terraform@<redacted-project-name>的服务帐户
  4. terraform@<redacted-project-name>服务帐户创建、下载并安全地存储密钥。
  5. 启用 API: cloudresourcemanager.googleapis.com管理项目中的 cloudresourcemanager.googleapis.com、 cloudbilling.googleapis.comiam.googleapis.comserviceusage.googleapis.com
  6. 将服务帐户的权限设置为role/ownerroles/resourcemanager.organizationAdminroles/resourcemanager.folderAdminroles/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.

如何在 terraform 配置文件中包含现有资源?

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

为了在 terraform 模板中包含已经存在的资源,请使用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> 你应该得到一个 output 像google_folder.shared: Import prepared!
  4. 确保您的基础设施已通过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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM