标签: terraform

Terraform 中的嵌套地图数据

假设我有一个名为“env”的字符串类型变量(值可以是“dev”或“Production”)

使用以下数据,如何获取“dev”或“product”中第一个元素的setting1的值?

locals{
   environments = {
      dev = {
         "hello001" = {
            setting1 = "abc"
            setting2 = "def"
            setting3 = "ghi"
         }
         "hello002" = {
            setting1 = "jkl"
            setting2 = "mno"
            setting3 = "pqr"
         }
      }
      production = {
         "hello003" = {
            setting1 = "abc"
            setting2 = "def"
            setting3 = "ghi"
         }
         "hello004" = {
            setting1 = "jkl"
            setting2 = "mno"
            setting3 = "pqr"
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过

local.environments[var.env][0].setting1
Run Code Online (Sandbox Code Playgroud)

但出现错误“该值没有任何索引”

terraform

2
推荐指数
1
解决办法
5786
查看次数

为什么我会收到此 GRPCProvider UpgradeResourceState terraform 错误?

问题:为了解决表的 GCP 数据目录标记的一些其他问题,将 terraform 从 0.14.4 更新到 1.0.8 后,我在尝试应用 terraform 时遇到了新错误。

\n
\xe2\x94\x82 Error: Request cancelled\n\xe2\x94\x82 \n\xe2\x94\x82   with module.ds-bigquery.google_bigquery_table.prism_tables_no_partition["co.expenses"],\n\xe2\x94\x82   on ds-bigquery/bq-prism-tables.tf line 249, in resource "google_bigquery_table" "prism_tables_no_partition":\n\xe2\x94\x82  249: resource "google_bigquery_table" "prism_tables_no_partition" {\n\xe2\x94\x82 \n\xe2\x94\x82 The plugin.(*GRPCProvider).UpgradeResourceState request was cancelled.\n
Run Code Online (Sandbox Code Playgroud)\n

和这个痕迹

\n
Stack trace from the terraform-provider-google_v3.61.0_x5 plugin:\n\npanic: interface conversion: interface {} is string, not map[string]interface {}\n\ngoroutine 4466 [running]:\ngithub.com/hashicorp/terraform-provider-google/google.bigQueryTablecheckNameExists(0xc000df9600, 0x1, 0x1, 0x0, 0x2d21b78)\n    /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:26 +0x164\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x2526520, 0xc000543940, 0x2526520, 0xc000543ae0, 0x2d22688, 0x40c201, 0xc000df9f30, 0x10)\n    /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:47 +0x63f\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x275dac0, 0xc000c5ec00, 0x275dac0, 0xc000c5f140, 0x2d22688, 0x1, 0xc000f90120, 0xc000fd1000)\n …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-gcp

2
推荐指数
1
解决办法
6465
查看次数

Terraform null_resource 未与后端一起运行

我有一个地形变量地图,如下所示

variable "MyProj" {
  type = map(object({
  name     = string
  type     = string
 }))
default = {
  "Proj1" = {
      name      = "Proj1"
      programme = "java"
   },
   "Proj2" = {
      name       = "Proj2"
      programme  = "npm"
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个空资源代码,只要根据上述映射(对象())和所需状态识别出更改,该代码就会运行批处理脚本。

   resource "null_resource" "nullr" {
   for_each = var.MyProj

   provisioner "local-exec" {
   command = "bash /home/myscript.sh ${each.value.name} ${each.value.progrmme}
  }
}
Run Code Online (Sandbox Code Playgroud)

我的意图是,每当在上面的 map() 中识别出更改时,就应该运行空资源。

当我将 terraform 状态保留在本地计算机中时,它会按预期运行。但是,当我使用 azurem 后端将 terraform 状态保留在 Azure blob 容器中时,它不会运行 null_resource。即使我使用 terraform 状态的后端,我也应该在配置中进行哪些更改

azure terraform

2
推荐指数
1
解决办法
3851
查看次数

如何在 terraform 中禁用应用程序配置的公共访问

我可以azurerm_app_configuration为 Azure 应用程序配置创建应用程序配置。并可以azurerm_private_endpoint使用 terraform 进行创建。

但我没有找到哪个 terraform 函数可以用于禁用公共访问,如下图所示。

在此输入图像描述

有谁可以帮忙吗

azure terraform azure-app-configuration

2
推荐指数
1
解决办法
2713
查看次数

如何继承访问权限以查看属于 GCP 组织的所有项目?

我目前被列为 Google Workspace 管理员,但由于某种原因,我似乎仍然无法执行某些操作,例如创建文件夹来组织项目。我们使用 terraform 生成一些项目,生成的项目仅授予对权限中直接指定的项目的访问权限。

我看到网站上引用的继承权限/访问权限。我们如何设置它,以便我和其他一些人始终继承访问权限以查看为组织创建的每个项目?

google-cloud-platform terraform google-iam google-cloud-iam terraform-provider-gcp

2
推荐指数
1
解决办法
1704
查看次数

如何在 terraform 中检查具有两个值的变量字符串

如何在 terraform 中检查具有两个值的变量字符串。

\n

我想用两个字符串值检查变量中的字符串,类似于下面的代码。

\n
virtual_network_type = var.vnet_type == "External" || "Internal" ? var.vnet_type : null\n\n
Run Code Online (Sandbox Code Playgroud)\n

但 terraform 抛出以下错误消息

\n
Error: Invalid operand\n\xe2\x94\x82 \n\xe2\x94\x82   on ../../modules/test/test-instance.tf line 51, in resource "azurerm_api_management" "apim_demo":\n\xe2\x94\x82   51:  virtual_network_type = var.vnet_type == "External" || "Internal" ? var.vnet_type : null\n\xe2\x94\x82 \n\xe2\x94\x82 Unsuitable value for right operand: a bool is required.\n\xe2\x95\xb5\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以在地形中做到这一点吗?

\n

terraform terraform-provider-azure

2
推荐指数
1
解决办法
8012
查看次数

如何使用 Terraform 将多个自定义操作添加到 Azure 逻辑应用程序?

我想使用 Terraform 部署 Azure 逻辑应用程序。我需要添加 2-3 个自定义操作。我目前正在测试添加 2 个变量。

我希望所有操作都相继运行,但目前操作是并行部署的。我不知道哪个参数决定操作是否应该并行部署或一个接一个地部署。

我已复制并粘贴以下代码:

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/logic_app_trigger_http_request
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/logic_app_action_custom
Run Code Online (Sandbox Code Playgroud)

如何让动作依次部署?

在此输入图像描述 地形代码:

# Define Terraform provider
terraform {
  required_version = ">= 0.12"
}
# Configure the Azure provider
provider "azurerm" { 
  environment = "public"
  version = ">= 2.0.0"
  features {}  
}

resource "azurerm_resource_group" "example" {
  name     = "my-logicapp-rg"
  location = "West Europe"
}

resource "azurerm_logic_app_workflow" "example" {
  name                = "workflow1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}


resource "azurerm_logic_app_trigger_http_request" "example" {
  name         = "some-http-trigger"
  logic_app_id = azurerm_logic_app_workflow.example.id …
Run Code Online (Sandbox Code Playgroud)

terraform azure-logic-apps

2
推荐指数
1
解决办法
1718
查看次数

Azure 静态 Web 应用程序 - 使用 Terraform 的应用程序设置

使用 Terraform,我创建了一个 Azure 静态 Web 应用程序,如下所示。但文档 没有演示如何设置资源的应用程序设置。对于普通的Azure功能应用程序,我们可以看到app_settings参数。但是如何为使用 Terraform 创建的 Azure 静态 Web 应用程序设置应用程序设置?

resource "azurerm_static_site" "example" {
  name                = "example"
  resource_group_name = "example"
  location            = "West Europe"
}
Run Code Online (Sandbox Code Playgroud)

我喜欢为 Azure 静态 Web 应用程序设置参数AAD_CLIENT_ID并配置身份提供程序,如 Microsoft文档中所示。AAD_CLIENT_SECRET

terraform terraform-provider-azure

2
推荐指数
1
解决办法
4502
查看次数

错误:不支持的块,类型此处不应出现“已移动”类型的块

我正在尝试 terraform 移动块,但在使用它时出现以下错误。

main.tf 文件如下所示:-

module "docdb" {
  `source = "./modules/docdb"`
  docdb_subnet_group_name = "${var.project_name}-${var.environment}-group"
  docdb_subnet_ids = module.vpc.private_subnets
  docdb_cluster_identifier = "${var.project_name}-${var.environment}-docdb"
  docdb_username = random_password.uname_create[0].result
  docdb_password = random_password.password_create[0].result
  skip_final_snapshot = var.skip_final_snapshot
  docdb_vpc_security_group_ids = [module.sg_docdb.security_group_id]
  docdb_cluster_instance_count = var.docdb_cluster_instance_count
  docdb_cluster_instance_identifier = "docdb-cluster-${var.environment}-${count.index}"
  instance_class = var.instance_class
  docdb_parameter_group_name = "${var.project_name}-${var.environment}-docdb"

}

moved {
  from = aws_docdb_cluster.docdb
  to = module.docdb.aws_docdb_subnet_group.docdbgroup
}

moved {
  from = aws_docdb_cluster_instance.docdb_cluster_instances[0]
  to = module.docdb.aws_docdb_cluster.docdb
}

moved {
  from = aws_docdb_cluster_parameter_group.cluster_para_group
  to = module.docdb.aws_docdb_cluster_instance.docdb_cluster_instances
}

moved {
  from = aws_docdb_subnet_group.docdbgroup
  to = module.docdb.aws_docdb_cluster_parameter_group.cluster_para_group …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

2
推荐指数
1
解决办法
7306
查看次数

module.db是一个对象列表,只有在apply之后才知道

rds.tf:-

module "db" {
  **count  = var.environment == "dev" || var.environment == "qa" ? 1 : 0**
  source = "../rds"
  identifier = var.db_name
  engine                     = var.rds_engine
  engine_version             = var.rds_engine_version

output.tf:

output "rds_instance_endpoint" {
  description = "The connection endpoint"
  value       = module.db.db_instance_endpoint
}

ERROR:-

Error: Unsupported attribute
   on outputs.tf line 28, in output "rds_instance_endpoint":
   28:   value       = module.db.db_instance_endpoint
   module.db is a list of object, known only after apply

Can't access attributes on a list of objects. Did you mean to access …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

2
推荐指数
1
解决办法
1万
查看次数