Azure Terraform能否消化在ARM资源供应期间创建的json文件?

时间:2019-10-08 15:33:14

标签: azure terraform azureportal terraform-provider-azure

Azure terraform支持.tf.json文件结尾。这是否意味着terraform可以使用json文件进行计算以在Azure门户中创建Azure资源?寻找下面的两个链接会使这个问题不清楚吗?

https://www.terraform.io/docs/configuration/override.html https://www.terraform.io/docs/configuration/syntax-json.html

1 个答案:

答案 0 :(得分:0)

@ kimdav111从Azure门户创建资源时生成的json文件称为ARM模板,是的,Terraform可以使用这些json模板。下面是相同的示例:

resource "azurerm_resource_group" "test" {
  name     = "acctestRG-01"
  location = "West US"
}

resource "azurerm_template_deployment" "test" {
  name                = "acctesttemplate-01"
  resource_group_name = "${azurerm_resource_group.test.name}"

  template_body = <<DEPLOY
{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    }
  },
  "variables": {
    "location": "[resourceGroup().location]",
    "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'storage')]",
    "publicIPAddressName": "[concat('myPublicIp', uniquestring(resourceGroup().id))]",
    "publicIPAddressType": "Dynamic",
    "apiVersion": "2015-06-15",
    "dnsLabelPrefix": "terraform-acctest"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "apiVersion": "[variables('apiVersion')]",
      "location": "[variables('location')]",
      "properties": {
        "accountType": "[parameters('storageAccountType')]"
      }
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "[variables('apiVersion')]",
      "name": "[variables('publicIPAddressName')]",
      "location": "[variables('location')]",
      "properties": {
        "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
        "dnsSettings": {
          "domainNameLabel": "[variables('dnsLabelPrefix')]"
        }
      }
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}
DEPLOY

  # these key-value pairs are passed into the ARM Template's `parameters` block
  parameters = {
    "storageAccountType" = "Standard_GRS"
  }

  deployment_mode = "Incremental"
}

output "storageAccountName" {
  value = "${lookup(azurerm_template_deployment.test.outputs, "storageAccountName")}"
}

https://www.terraform.io/docs/providers/azurerm/r/template_deployment.html

无法将ARM模板更改为Terraform用于部署的JSON配置语法

希望这会有所帮助!