重用配置以在Terraform中创建类似的资源



我有下面的TF文件,它将创建一个函数-FirstFunction。这非常有效。

resource "azurerm_function_app" "**firstfunction**" {
name                = **var.firstfunctionname**
location            = azurerm_resource_group.resourcegroupX.location
resource_group_name = azurerm_resource_group.resourcegroupX.name
app_service_plan_id = azurerm_app_service_plan.appserviceplan.id
https_only          = "true"
client_affinity_enabled = "true"

app_settings = {   
NS                     = azurerm_eventhub_namespace.eventhubns.name
Hub                    = azurerm_eventhub.**firsteventhub**.name    
propertyX       = "**firstproperty**"
LogRef                       = "${azurerm_storage_account.store.primary_blob_endpoint}${azurerm_storage_container.**firstlogs**.name}"
}
}

resource "azurerm_app_service_virtual_network_swift_connection" "**firstvnet**" {
app_service_id = azurerm_function_app.**firstfunction**.id
subnet_id      = azurerm_subnet.snet.id
}

在文件中,请参阅***所附的部分,需要对其进行更改以创建SecondFunction、ThirdFunction等。。。

我现在的方法是创建多个TF文件,复制相同的代码并更改**中的部分。

我通读了模块系统,但理解模块系统的局限性是,我不能引用在同一TF根模块中创建的其他组件,如下所示例如,在TF文件中,我将位置称为location=azurerm_resource_group.resourcegroupX.location如果我把它作为一个模块来做,那么位置应该被引用为location=var.location_name,其中location_name应定义为变量。我不能引用使用相同根模块创建的组件。

你能建议一个解决方案吗?我可以根据类似的代码创建多个组件?请注意,在上面的例子中,Im在一个TF文件中创建了2个资源,这两个资源都是相关的。

最简单的方法是在资源中使用count属性。它可以帮助您在同一代码中创建多个相同的资源。

resource "azurerm_function_app" "myfunction" {
count               = number_your_need     # how many resources you want to create 
name                = "${var.firstfunctionname}-${count.index}" 
location            = azurerm_resource_group.resourcegroupX.location
resource_group_name = azurerm_resource_group.resourcegroupX.name
app_service_plan_id = azurerm_app_service_plan.appserviceplan.id
https_only          = "true"
client_affinity_enabled = "true"

app_settings = {   
NS                     = azurerm_eventhub_namespace.eventhubns.name
Hub                    = azurerm_eventhub.**firsteventhub**.name   
propertyX       = "**firstproperty**"
LogRef                       = "${azurerm_storage_account.store.primary_blob_endpoint}${azurerm_storage_container.**firstlogs**.name}"
}
}

resource "azurerm_app_service_virtual_network_swift_connection" "**firstvnet**" {
count          = number      # how many you need to create
app_service_id = element(azurerm_function_app.myfunction[*].id, count.index)
subnet_id      = azurerm_subnet.snet.id
}

与您需要创建的azurerm_eventhub的解决方案相同。例如:

resource "azurerm_eventhub" "myeventhub" {
count  = number    # how many you need to create 
name   = "${var.eventhub_name}-${count.index}"
...
}

然后你可以在功能应用程序中这样引用它:

app_settings = {   
NS                     = azurerm_eventhub_namespace.eventhubns.name
Hub                    = element(azurerm_eventhub.myeventhub[*].name, count.index)  
propertyX       = "**firstproperty**"
LogRef                       = "${azurerm_storage_account.store.primary_blob_endpoint}${azurerm_storage_container.**firstlogs**.name}"
}

所有用***括起来的部分也是如此。

相关内容

  • 没有找到相关文章

最新更新