gpt4 book ai didi

google-cloud-platform - 如何在 Terraform 中引用现有组织文件夹或其他资源(适用于 GCP)

转载 作者:行者123 更新时间:2023-12-05 05:55:41 28 4
gpt4 key购买 nike

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

我正在尝试为现有组织创建 Terraform 配置文件。我能够提供我在 main.tf 中拥有的一切除 Shared 外概述如下此组织中已存在的文件夹。

相关github问题:

以下是我遵循的步骤:

  1. 手动创建 Shared组织管理 UI 中的文件夹。
  2. 手动创建Terraform 管理项目 <redacted-project-name>Shared 的根目录文件夹。
  3. 手动创建名为 terraform@<redacted-project-name> 的服务帐户来自 terraform 管理项目
  4. terraform@<redacted-project-name> 创建、下载并安全地存储 key 服务帐户。
  5. 启用 API:cloudresourcemanager.googleapis.com , cloudbilling.googleapis.com , iam.googleapis.com , serviceusage.googleapis.comterraform 管理项目
  6. 将服务帐户的权限设置为role/ownerroles/resourcemanager.organizationAdminroles/resourcemanager.folderAdmin roles/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 的帐户的现有 key 和权限
  • 针对现有政策和启用 API

最佳答案

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

对于文件夹

Terraform documentation for google_folder 中:

# 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>。您应该得到类似 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.

关于google-cloud-platform - 如何在 Terraform 中引用现有组织文件夹或其他资源(适用于 GCP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69405785/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com