我对Terraform很陌生,如果这个问题有一个明显的答案我错过了,我很抱歉。
我正在尝试为现有组织创建一个地形配置文件。我能够在下面列出的main.tf
中提供我所拥有的一切,除了这个组织中已经存在的Shared
文件夹。
相关github问题:
- 文件夹操作违反父目录的惟一显示名。
- 文件夹重命名与现有文件夹 匹配时的通用错误消息
以下是我遵循的步骤:
- 在组织管理界面中手动创建
Shared
文件夹 - 手动创建一个起程拓殖管理项目
<redacted-project-name>
的根源Shared
文件夹。 - 从terraform管理项目手动创建一个名为
terraform@<redacted-project-name>
的服务帐户 - 创建、下载并安全存储
terraform@<redacted-project-name>
服务帐号密钥。 - 在terraform管理项目中启用api:
cloudresourcemanager.googleapis.com
,cloudbilling.googleapis.com
,iam.googleapis.com
,serviceusage.googleapis.com
- 设置服务帐户权限为角色/所有者,角色/resourcemanager.organizationAdmin,角色/resourcemanager.folderAdmin和角色/resourcemanager.projectCreator。
- 创建
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 apply
的帐户的现有密钥和权限 - 用于现有策略和启用api
main.tf
?为了在地形模板中包含已经存在的资源,请使用import
语句。
在google_folder的Terraform文档中:
# Both syntaxes are valid
$ terraform import google_folder.department1 1234567
$ terraform import google_folder.department1 folders/1234567
对于上面的例子,
- 获取文件夹id使用
gcloud alpha resource-manager folders list --organization=<redacted_org_id>
提供组织id。 - id保存文件夹,如果没有完成,宣布
main.tf
内的文件夹作为资源resource "google_folder" "shared" { display_name = "Shared" parent = data.google_organization.org.name }
- 执行命令:
terraform import google_folder.shared folders/<redacted_folder_id>
. c。您应该得到类似google_folder.shared: Import prepared!
的输出 - 确保您的基础设施通过
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.