terraform手臂模板部署输出在重新部署上不可用

时间:2020-02-20 12:46:38

标签: azure terraform azure-resource-manager terraform-provider-azure

我试图用Terraform编码环境。在环境中,我使用SQL虚拟机ARM模板,因为该模板在terraform中尚不可用。我也想在RSV中备份此SQL VM。为此,我需要SQL VM的资源ID。此刻,我正在像这样使用ARM模板中的输出:

"sql_vm_id": {
            "type": "string",
            "value": "[resourceId('Microsoft.SqlVirtualMachine/SqlVirtualMachines', parameters('virtualMachineName'))]"
        }

并且我在terraform代码中引用了此输出,如下所示:

sourceResourceId = azurerm_template_deployment.sqlvm[count.index].outputs["sql_vm_id"]

,并且部署首次成功。但是,当我重试部署时,出现以下错误:

Error: Invalid index

  on modules\sqlVirtualMachine\sqlVirtualMachine.tf line 135, in resource "azurerm_template_deployment" "sqlvmbackup":
 135:     sourceResourceId = azurerm_template_deployment.sqlvm[count.index].outputs["sql_vm_id"]
    |----------------
    | azurerm_template_deployment.sqlvm is tuple with 1 element
    | count.index is 0

The given key does not identify an element in this collection value.

因此,看起来第二次尝试部署时未检索到ARM模板的输出,因此无法再找到此输出。对于terraform中的ARM模板部署,部署模式是增量的。填写完整无济于事,因为我不想删除资源组中的所有其他资源。

该错误表明索引无效,因此起初我以为索引存在问题,但是,当我将outputs["sql_vm_id"]更改为name时,部署计划可以继续进行(当然稍后会失败,因为该名称不能用作ID)。但是,这表明count.index是有效的。

重新部署Terraform代码时是否可以选择检索ARM模板的输出?

0 个答案:

没有答案