如何对资源组内的所有资源进行 terraform 导入?

How to terraform import all resources within a resource group?

提问人:Helena Raia 提问时间:5/17/2023 更新时间:5/19/2023 访问量:971

问:

我需要导入资源组中的所有资源,而不必使用 terraform import 单独标识它们

我已经尝试使用以下命令导入资源组,以查看它是否会导入其资源:

 terraform import "azurerm_resource_group.example" "/subscriptions/*****/resourceGroups/rg-example"

这是我的 main.tf 文件:

terraform {
required_providers {
    azurerm = {
        source = "hashicorp/azurerm"
        version = "3.56.0"
    }
    }
}

provider "azurerm" {
    features {
    }
}

resource azurerm_resource_group example{
   name = "rg-example"
}

此资源组有三个存储帐户,但仅导入资源组。

有没有其他方法可以做到这一点?

谢谢

Azure 导入 Terraform

评论

2赞 silent 5/17/2023
LMGTFY github.com/Azure/aztfexport
0赞 Helena Raia 5/17/2023
我试过这个。使用并运行命令登录到 azure 后,我收到错误“访问请求的资源被拒绝。用户可能没有足够的权限。但是,我的用户是订阅的所有者。你知道为什么会这样吗az loginaztfexport rg rg-example
1赞 Matthew Schuchard 5/17/2023
您执行了导入 RG 的命令,并且根据问题按预期导入了 RG。命令功能是否存在一些混淆,即认为将导入 RG 以外的其他资源?如果是这样,那么文档可能会有所帮助:developer.hashicorp.com/terraform/cli/import
0赞 Helena Raia 5/17/2023
@MattSchuchard,该命令正常工作,是的。我一直在寻找类似的命令,但它不仅导入资源组,还导入其资源,而无需单独标识它们。谢谢你的帮助terraform import

答:

0赞 HowAreYou 5/18/2023 #1

没有 terraform 命令支持同时导入多个资源。但是,我们仍然可以使用脚本来做到这一点。

若要导入多个资源,请先从 Azure 下载 CSV 文件中的所有资源详细信息。enter image description here

enter image description here

现在,我使用下面的 Powershell 脚本一次性导入 Excel 工作表中的所有三个资源。

# Path to the CSV file
$csvFilePath = "C:\Users\v-goonav\Downloads\Azureresources (6).csv"

# Import the CSV file
$table = Import-Csv -Path $csvFilePath

# Filter the records based on the "TYPE" column
$resources = $table | Where-Object { $_.TYPE -eq "Storage account" }

# Import the names of the storage accounts
Write-Host "Importing Storage account"
foreach ($account in $resources) {
    #Write-Host $account.NAME
    $name=$account.NAME
    Write-Host $name
    terraform import azurerm_storage_account.$name /subscriptions/00000-00000-0000-00000-000000000/resourceGroups/testrgtf/providers/Microsoft.Storage/storageAccounts/$name
}

$resources = $table | Where-Object { $_.TYPE -eq "Virtual network" }

# Import the names of the vnet
Write-Host "Importing vnet"
foreach ($account in $resources) {
    #Write-Host $account.NAME
    $name=$account.NAME
    Write-Host $name
    terraform import azurerm_virtual_network.$name /subscriptions/00000-00000-0000-00000-000000000/resourceGroups/testrgtf/providers/Microsoft.Network/virtualNetworks/$name
}

enter image description here

可以在 terraform 中使用此 Powershell 脚本。请查看以下参考链接。

  1. null 资源 |Terraform
  2. 获取 terraform null_resource local-exec 以运行 PowerShell 安装模块 |堆栈溢出