我试图用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模板的输出?