Terraform 脚本列出在 Terraform 中使用的动态变量名称的能力

Terraform script to list out ability to dynamic variable names for use in terraform

我想在 terraform 中定义和声明不同资源组的相同资源。

最终目标是在我 运行 terraform 计划时从命令行获取所有创建的资源,这些资源属于我 select 的特定资源组。下面是我尝试 运行 但不确定下面的定义声明是否 correct.Please 的 terraform 脚本建议我如何编写或格式化此脚本。我是 terraform 广告的新手,探索了许多博客来创建以下脚本,但需要说明。

以下是资源变量名的2个资源组。 var.tf:

variable "properties" {

 type = object( {
    resourcegroup_name = string
    location = string
    keyvault_name = string
    Networksecuritygroup_name = string
    Storageaccount_name = string
    Storageaccount_dev = string
    APImanagement_name = string
    APP-serviceplan_name = string
    webappservice_name = string
    SQLDatabase_name = string
    NetworkInterface_name = string
    VirtualMachine_name = string
    EndPoint = string
    CDNProfile = string
    ApplicationInsigt_name = string
    TrafficManagerProfile_name = string
    SQLServer_name = string
    Subnet_name = string
    
})
variable "resourcegroup1" {
 default = [{
   
    resourcegroup_name = "001-rg"
    location = "UK South"
    keyvault_name = "kv-001"
    TrafficManagerProfile_name = "tmp-001"
    Storageaccount_name = "stg001"
    APImanagement_name = "apm-001"
    APPserviceplan_name = "asp-001"
    webappservice_name = "was-001"
    Storageaccount_dev = "devstg001"
    SQLDatabase_name = "DB-001"
    NetworkInterface_name = "NIC-01"
    VirtualMachine_name = "VM001"
    EndPoint1 = "stg001 (stg001/stg001)"
    CDNProfile1 = "cdn_001"
    EndPoint2 = "devstg001 (devstg001/devstg001)"
    CDNProfile2 = "cdn_dev001"
    ApplicationInsigt_name = "AI-001"
    SQLServer_name = "Db-server-001"
    Subnet_name = "subnet001"
    }]
},
variable "resourcegroup2" {
 default = [{
   
    resourcegroup_name = "002-rg"
    location = "UK South"
    keyvault_name = "kv-002"
    TrafficManagerProfile_name = "tmp-002"
    Storageaccount_name = "stg002"
    APImanagement_name = "apm-002"
    APPserviceplan_name = "asp-002"
    webappservice_name = "was-002"
    Storageaccount_dev = "devstg002"
    SQLDatabase_name = "DB-002"
    NetworkInterface_name = "NIC-02"
    VirtualMachine_name = "VM002"
    EndPoint1 = "stg002 (stg002/stg002)"
    CDNProfile1 = "cdn_002"
    EndPoint2 = "devstg002 (devstg002/devstg002)"
    CDNProfile2 = "cdn_dev002"
    ApplicationInsigt_name = "AI-002"
    SQLServer_name = "Db-server-002"
    Subnet_name = "subnet002"
    }]
}

main.tf:

    terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "2.90.0"
    }
  }
}

provider "azurerm" {
  # Configuration options
  features{}
}
data "azurerm_client_config" "current" {}

resource "azurerm_key_vault" "keyvault" {
  name                        = "${var.keyvault_name}"
  location                    = "${var.location}"
  resource_group_name         = "${var.resourcegroup_name}"
  enabled_for_disk_encryption = true
  tenant_id                   = "${data.azurerm_client_config.current.tenant_id}"
 
  sku_name = "standard"

  access_policy {
    tenant_id = "987654"
    object_id = "123456"

    key_permissions = [
      "Get",
    ]

    secret_permissions = [
      "Get",
    ]

    storage_permissions = [
      "Get",
    ]
  }
}
#---------------------------------------API Management Serrvice---------------------------------------
variable "apimAdminEmail"{
default= "abc@gmail.com"
}
variable "apimTier"{
default= "Developer_1"
}
variable "apimCapacity"{
default= "1"
}
variable "hostName"{
default= "api3"
}
resource "azurerm_api_management" "APIM" {
  name                = "${var.APImanagement_name}"
  location            = "${var.location}"
  resource_group_name = "${var.resourcegroup_name}"
  publisher_name      = "API"
  publisher_email     = "${var.apimAdminEmail}"
  

   
    sku_name     = "${var.apimTier}"
    #capacity = "${var.apimCapacity}"
  

  identity {
    type = "SystemAssigned"
  }

  
}

我不太确定你的问题,但我假设你想要两个使用单个 main.tf (两个不同环境的通用模板)部署两个不同的环境 示例:Dev 和 Stage 环境。

如果是这种情况,请为每个环境配置两个单独的 variable.tf 文件,并在初始化 terraform 时将 variable.tf 文件传递​​给。

请检查下面的例子

  1. 创建两个名称不同的变量文件(dev.tfvars 和 stage.tfvars)

dev.tfvars

resourcegroup_name = "002-rg"
location = "UK South"
keyvault_name = "kv-002"
TrafficManagerProfile_name = "tmp-002"

stage.tfvars

resourcegroup_name = "001-rg"
location = "UK South"
keyvault_name = "kv-001"
TrafficManagerProfile_name = "tmp-001"
  1. 声明每个变量的默认值

variables.tf

variable "resourcegroup_name" {
    default = ""
}
variable "location" {
    default = ""
}
....
  1. 当运行 terraform自动化时,传递你创建的var fie
terraform init
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"