Повторно используйте конфигурацию для создания подобных ресурсов в Terraform - PullRequest
0 голосов
/ 04 августа 2020

У меня есть приведенный ниже файл 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 и так далее ...

The способ, который у меня есть прямо сейчас, - это создать несколько файлов TF с одним и тем же скопированным кодом и изменить разделы, заключенные в **.

Я прочитал модульную систему, но понял, что ограничение с модульной системой заключается в том, что я не могу обратитесь к другим компонентам, созданным в том же модуле TF root, как показано ниже. Например, в файле TF я ссылаюсь на местоположение как location = azurerm_resource_group.resourcegroupX.location. Если я делаю это как модуль, местоположение должно быть указано на как location = var.location_name, где location_name должно быть определено как переменная. Я не могу ссылаться на компоненты, созданные с помощью одного и того же модуля root.

Не могли бы вы предложить решение, в котором я могу создать несколько компонентов на основе аналогичного кода? Обратите внимание, что в приведенном выше примере я создаю 2 ресурса в одном файле TF, и оба они связаны.

1 Ответ

0 голосов
/ 04 августа 2020

Самый простой способ - использовать свойство 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}"
 }

То же самое делает весь раздел, заключенный в ****.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...