在将现有的 Azure 资源导入到 Terraform 时经常出现的错误
第一次接触 Azure 资源时,我们通过 Azure 门户创建资源并执行快速入门和教程,来确认资源有什么功能和如何运作。确认完毕后,为避免持续计费或者保留无法确定创建时间的 Azure 资源作为垃圾,我们会先删除 Azure 资源。下次如果想再次创建相同的 Azure 资源进行重新验证,我们希望在删除 Azure 资源前将其导入到 Terraform 中。因此,这次我们尝试处理在将现有的 Azure 资源导入到 Terraform 时常见的错误以及处理方法。
基本的Azure资源的导入格式
如果要将 azurerm_resource_group 导入到资源组中,则格式如下所示:<资源ID>中指定了资源组的资源ID。
terraform import azurerm_resource_group.rg < 资源 ID >
获取资源 ID 的示例。
使用下面的”JSON视图”可以轻松获取资源ID。
点击下面的图标,将资源 ID 复制到剪贴板中。
土地重塑的导入示例
将复制到剪贴板的资源ID粘贴到下面的示例中以导入Web PubSub资源。
$ terraform import azurerm_web_pubsub.sio /subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/WebPubSub/mnrsio
azurerm_web_pubsub.sio: Importing from ID "/subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/WebPubSub/mnrsio"...
╷
│ Error: parsing "/subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/WebPubSub/mnrsio": parsing segment "staticWebPubSub": parsing the WebPubSub ID: the segment at position 6 didn't match
│
│ Expected a WebPubSub ID that matched:
│
│ > /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.SignalRService/webPubSub/webPubSubValue
│
│ However this value was provided:
│
│ > /subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/WebPubSub/mnrsio
│
│ The parsed Resource ID was missing a value for the segment at position 6
│ (which should be the literal value "webPubSub").
常见错误及解决方法
因为剪贴板上复制并粘贴的资源ID字符串大小写与Terraform预期的不同,所以出现了这种错误。
具体而言,似乎要求在粘贴的资源 ID 中包含 WebPubSub,而 Terraform 需要用 webPubSub 进行接收。
最后一个错误消息的重点是”webPubSub”这个字面值。
作为对策,使用将WebPubSub更改为webPubSub的资源ID进行导入。
$ terraform import azurerm_web_pubsub.sio /subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/webPubSub/mnrsio
azurerm_web_pubsub.sio: Importing from ID "/subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/webPubSub/mnrsio"...
azurerm_web_pubsub.sio: Import prepared!
Prepared azurerm_web_pubsub for import
azurerm_web_pubsub.sio: Refreshing state... [id=/subscriptions/25695fc8-dcaa-430e-874c-f98a857adbe2/resourceGroups/mnrsio-rg/providers/Microsoft.SignalRService/webPubSub/mnrsio]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.