¿Cómo usar for_each double en terraform?

2 minutos de lectura

avatar de usuario de dpa456
dpa456

todo el mundo.
Al usar for_each en terraform, aparece la duplicación. En este caso, ¿cómo debo evitarlo?

Los puntos problemáticos son 1), y 2). los valores de datos deben obtenerse de cada recurso a través de for_each.

// custom hostname binding
resource "azurerm_app_service_custom_hostname_binding" "service_host_bind" {
     
  for_each                     =  azurerm_dns_cname_record.cname_target
      
  hostname                  = trim(each.value.fqdn, ".")
      
  app_service_name     = azurerm_app_service._service.name
      
  resource_group_name = azurerm_resource_group._rg.name
      
  depends_on          = [azurerm_dns_txt_record._txt_target]

  lifecycle {
        ignore_changes = [ssl_state, thumbprint]
      }    }

// app service managed certificate
resource "azurerm_app_service_managed_certificate" "_service_manage_cert" {
      
      for_each                    = azurerm_app_service_custom_hostname_binding._service_host_bind
      
      custom_hostname_binding_id  = each.value.id     
    }

// app service certificate binding
resource "azurerm_app_service_certificate_binding" "xtrm_service_certi_bind" {
      
      1) hostname_binding_id = azurerm_app_service_custom_hostname_binding._service_host_bind.id
      // ## how to for_each??
      2) certificate_id               = azurerm_app_service_managed_certificate._service_manage_cert.id
        // ## how to for_each??
      ssl_state           = "SniEnabled"       
    }

Actualmente, hemos preparado varios dominios para la redirección e intentamos otorgar certificados para cada uno.

Por ejemplo, cuando hay un dominio de punto final (www.azure.com), dominios para redirección: auz-ure.com, auz-ure.com, az-ops.shop, etc.

(azure-redirect.net -> www.azure.com

auz-ure.com -> www.azure.com

az-ops.tienda -> www.azure.com)

Para el código de terraformación, me referí al documento.

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/app_service_managed_certificate

  • Gracias por reproducir 🙂 Probé tu sugerencia pero muestra este error “La clave dada no identifica un elemento en este valor de colección: cadena requerida”.

    – dpa456

    25 de noviembre de 2021 a las 10:44

  • Probablemente necesite usar each.key en lugar de each.value. Actualizaré la respuesta.

    – Tobías Thieron

    25 de noviembre de 2021 a las 11:18

  • hola, probé este código y tuve éxito en el plan de terraformación XD, sí, cada clave pasó el trabajo, ¡gracias! ”’ for_each = azurerm_app_service_custom_hostname_binding.service_host_bind hostname_binding_id = azurerm_app_service_custom_hostname_binding.service_host_bind[each.key].id id_certificado = azurerm_app_service_managed_certificate.service_manage_cert[each.key].identificación ”’

    – dpa456

    25 de noviembre de 2021 a las 13:23


¿Ha sido útil esta solución?