Идентификатор среды службы приложения возврата ARM для использования в скрипте Terraform - PullRequest
1 голос
/ 23 мая 2019

Terraform не разрешает развертывание сред служб приложений, поэтому я использую azurerm_template_deployment в качестве обходного пути. Однако я хочу сослаться на идентификатор среды службы приложений в ресурсе плана обслуживания приложения, который я создаю позже. Как получить и сохранить идентификатор среды службы приложений, используя этот метод?

Я использую тег depen_on в ресурсе плана обслуживания приложения, чтобы обеспечить его создание после среды обслуживания приложения, но не могу понять, как получить идентификатор из создания и сохранить его в переменной. Я думаю, что это будет связано с использованием переменных и выходных тегов шаблона ARM.

resource "azurerm_template_deployment" "ase" {
  name                = "ILBASE_ARM_template"
  resource_group_name = "${azurerm_resource_group.ase.name}"

  template_body = <<DEPLOY

  {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "ilbase_name": {
        "type": "string"
      },
      "ilbase_domain_name": {
        "type": "string"
      },
      "ilbase_subnet_name": {
        "type": "string"
      },
      "ilbase_rglocation": {
        "defaultValue": "East US",
        "type": "string"
      },
      "vnet_id": {
        "type": "string"
      }
    },
    "variables": {
    },
    "resources": [
      {
        "apiVersion": "2016-09-01",
        "type": "Microsoft.Web/hostingEnvironments",
        "name": "[parameters('ilbase_name')]",
        "kind": "ASEV2",
        "location": "[parameters('ilbase_rglocation')]",
        "properties": {
          "name": "[parameters('ilbase_name')]",
          "location": "[parameters('ilbase_rglocation')]",
          "virtualNetwork": {
            "Id": "[parameters('vnet_id')]",
            "Subnet": "[parameters('ilbase_subnet_name')]"
          },
          "internalLoadBalancingMode": "Web, Publishing",
          "multiSize": "Standard_D1_V2",
          "multiRoleCount": 2,
          "workerPools": null,
          "ipsslAddressCount": 0,
          "dnsSuffix": "[parameters('ilbase_domain_name')]",
          "networkAccessControlList": [],
          "frontEndScaleFactor": 15,
          "apiManagementAccountId": null,
          "suspended": false,
          "dynamicCacheEnabled": null,
          "clusterSettings": null
        }
      }
    ],
    "outputs": {
    }
  }

  DEPLOY

  parameters {
    "vnet_id"            = "${azurerm_virtual_network.main_vnet.id}"
    "ilbase_subnet_name" = "${azurerm_subnet.ase.name}"
    "ilbase_name"        = "${var.env}-ASE-001"
    "ilbase_domain_name" = "${var.dnsName}"
    "ilbase_rglocation" = "${var.location}"
  }

  deployment_mode = "Incremental"
}

resource "azurerm_app_service_plan" "test" {
  name                = "api-appserviceplan-pro"
  location            = "${var.location}"
  resource_group_name = "${azurerm_resource_group.ase.name}"
  app_service_environment_id = ????????????????????

  sku {
    tier = "Isolated"
    size = "S1"
  }

  depends_on = ["azurerm_template_deployment.ase"]
}

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 23 мая 2019

В шаблоне ARM используйте outputs, чтобы установить вывод идентификатора среды службы приложения.

(что-то подобное, у меня не было возможности протестировать, любойОбратная связь об изменениях будет принята с благодарностью!)

"outputs": {
  "app_service_evironment_id": {
    "type": "string",
    "value": "[resourceId('Microsoft.Web/hostingEnvironments', parameters('ilbase_name'))]"
  }
}

azurerm_template_deployment поддерживает карту outputs .Используя эту карту, вы можете затем установить

azurerm_app_service_plan.test.app_service_environment_id = azurerm_template_deployment.ase.outputs["app_service_evironment_id"]

. depends_on не должно быть необходимым и должно быть неявным (поскольку azurerm_app_service_plan использует вывод azurerm_template_deployment)

...