Настраиваемый выбор ресурсов и именование с помощью экспорта Azure для Terraform
Экспорт Azure для Terraform предоставляет различные параметры для настройки экспортируемых ресурсов.
В этой статье вы узнаете о преимуществах и минусах для каждого варианта.
- Использование пользовательского интерфейса
- Использование режима запроса
- Использование файла сопоставления
Использование пользовательского интерфейса
При запуске экспорта Azure для Terraform в интерактивном режиме указанные ресурсы (с помощью параметров, указанных при выполнении). По умолчанию экспортируются все ресурсы.
Удаление выступает в качестве переключателя при пропуске или включении ресурсов. Чтобы удалить ресурсы из экспорта, используйте клавиши со стрелками, чтобы выбрать нужный ресурс и нажать клавишу DELETE. Ресурс обновляется, чтобы отобразить "Пропустить".
Чтобы отменить действие пропуска, убедитесь, что пропущенный ресурс выбран и нажмите клавишу DELETE еще раз.
Преимущества.
- Требуется использовать один переключатель.
- Не нужно знать необходимые ресурсы перед выполнением команды.
Недостатки.
- Действие может занять много времени, если у вас есть много ресурсов для прокрутки и пропускания.
Использование режима запроса
Применение фильтра с помощью синтаксиса запросов Azure Resource Graph — это эффективный метод, когда вы точно знаете, какие фильтры вам нужны.
aztfexport query [option] <ARG_where_predicate>
Например, предположим, что у вас есть группа ресурсов с именем myResourceGroup
, которая содержит множество ресурсов, включая сетевой ресурс. Если вы хотите экспортировать только сетевой ресурс, можно использовать следующий синтаксис:
aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"
Преимущества.
- Отдельная команда без необходимости редактирования вручную.
- Поддерживает неограниченное количество фильтров.
- Эффективно обрабатывает большое количество ресурсов.
Недостатки.
- Легко исключить ресурсы, которые необходимо экспортировать.
- Требуется знание синтаксиса Azure Resource Graph.
Использование файла сопоставления
В следующем синтаксисе показаны основы экспорта набора ресурсов, определенных в файле сопоставления ресурсов:
aztfexport mapping-file [option] <resource_mapping_file>
Файл сопоставления можно использовать в интерактивных или неинтерактивных режимах:
- Интерактивный режим: нажимайте клавиши s при интерактивном выполнении в представлении списка ресурсов.
- Неинтерактивный режим: файл сопоставления можно создать во всех командах экспорта (
resource
,resource-group
, ,query
)mapping file
путем добавления флага--generate-mapping-file
.
Если для вариантов использования требуются предварительные изменения, можно вручную создать или изменить файл сопоставления. Ниже приведены некоторые примеры, когда вы хотите вручную изменить собственный файл сопоставления:
Вариант использования | Шаги |
---|---|
У вас есть много ресурсов в группе ресурсов, но нужно экспортировать только несколько ресурсов. | Удалите объекты JSON из выбранного редактора и сохраните файл перед экспортом. |
Вы хотите переименовать все ресурсы согласованно. | Измените resource-name свойство на любое имя, соответствующее стандартам соответствия компании. |
Необходимо рефакторинг набора ресурсов по типу ресурса, например сети или вычислительным ресурсам. | Используйте редактор для поиска всех Microsoft.Network или Microsoft.Compute ресурсов. |
Например, предположим, что выполните следующую команду для группы ресурсов, содержащей виртуальную машину:
aztfexport rg --generate-mapping-file --non-interactive myResourceGroup
Результаты аналогичны следующему JSON-файлу:
{
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux",
"resource_type": "azurerm_virtual_machine_extension",
"resource_name": "res-0"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup",
"resource_type": "azurerm_resource_group",
"resource_name": "res-1"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key",
"resource_type": "azurerm_ssh_public_key",
"resource_name": "res-2"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup",
"resource_type": "azurerm_linux_virtual_machine",
"resource_name": "res-3"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146",
"resource_type": "azurerm_network_interface",
"resource_name": "res-4"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146/networkSecurityGroups/L3N1YnNjcmlwdGlvbnMvZGJmM2I2Y2ItYzFkMC00ZDA0LTk0YjktNTE1MDliOGQzM2ZkL3Jlc291cmNlR3JvdXBzL2hhc2hpY29uZi12bS1kZW1vL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrU2VjdXJpdHlHcm91cHMvdm0taGFzaGljb25mLXZtLWRlbW8tbnNn": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146|/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
"resource_type": "azurerm_network_interface_security_group_association",
"resource_name": "res-5"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
"resource_type": "azurerm_network_security_group",
"resource_name": "res-6"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip",
"resource_type": "azurerm_public_ip",
"resource_name": "res-7"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet",
"resource_type": "azurerm_virtual_network",
"resource_name": "res-8"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default",
"resource_type": "azurerm_subnet",
"resource_name": "res-9"
}
}
Значение только объекта в файле сопоставления имеет значение. Ключ (по умолчанию в Azure resource_id
) — это просто идентификатор в этом режиме.
Теперь предположим, что мы хотим сохранить группу ресурсов и все ресурсы, связанные с вычислениями, и изменить resource_name
значение.
Мы могли обновить файл сопоставления следующим образом:
{
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup",
"resource_type": "azurerm_resource_group",
"resource_name": "myResourceGroup"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"resource_type": "azurerm_linux_virtual_machine",
"resource_name": "myVM"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey",
"resource_type": "azurerm_ssh_public_key",
"resource_name": "myKey"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux",
"resource_type": "azurerm_virtual_machine_extension",
"resource_name": "myVMExtension"
}
}
После изменения файла сопоставления экспортируйте файл сопоставления с помощью следующей команды:
aztfexport map -n "aztfexportResourceMapping.json"
Преимущества.
- Так как вы редактируете файл, вы можете использовать редактор для поиска и замены необходимых элементов для удаления или редактирования.
- Выходные данные JSON позволяют использовать уникальные функциональные возможности, такие как фильтрация скриптов.
- Может переименовать ресурсы, чтобы соответствовать стандартам именования.
- Может рефакторинг JSON в несколько файлов сопоставления.
- Хорошо обрабатывает большие объемы ресурсов.
Недостатки.
- Для простых сценариев этот метод может быть перебором.
- Требуется изменение вручную.
Использование блоков импорта Terraform
При выполнении или более поздней aztfexport
v0.13
версии вместе с Terraform v1.5
или более --generate-import-block
поздней командой создается файл сопоставления вместе с файлом import.tf
. Файл import.tf
включает блоки импорта для каждого из ресурсов aztfexport
, которые смогли сопоставить. С этого момента поведение конфигурации идентично существующему рабочему процессу блока импорта. Чтобы завершить, выполните команду terraform plan
.
Чтобы затем удалить или отфильтровать ресурсы из результирующего экспорта, можно удалить блок, содержащий идентификатор ресурса и другие сведения.
Сравнение блоков импорта и экспорта Azure
Распространенный вопрос заключается в разнице между использованием экспорта Azure для Terraform и блоков импорта. Преимущества между двумя инструментами, которые мы заметили, включают:
- Экспорт Azure для Terraform помогает в обнаружении ресурсов. Существуют различные методы, помогающие обнаруживать и экспортировать нужные ресурсы.
- Экспорт Azure для Terraform предоставляет фильтрацию ресурсов, а также с помощью ручных и автоматизированных средств.
- Экспорт Azure для Terraform автоматически создает блоки импорта со своими выходными данными, экономия времени и усилий в процессе разработки.
- Блоки импорта Terraform изначально поддерживаются в Terraform, что упрощает их использование. Объединенные вместе, мы считаем, что использование обоих обеспечивает огромное преимущество для вас.
Преимущества.
- Поддерживаемый рабочий процесс Terraform в собственном коде. Json не требуется.
- Так как вы редактируете файл, вы можете использовать редактор для поиска и замены необходимых элементов для удаления или редактирования.
- Может переименовать ресурсы, чтобы соответствовать стандартам именования.
- Хорошо обрабатывает большие объемы ресурсов.
Недостатки.
- Для простых сценариев этот метод может быть перебором.
- Требуется изменение вручную для фильтрации.
- Не работает с более старыми версиями Terraform.
Итоги
В этой статье вы узнали о различных вариантах фильтрации ресурсов при экспорте с помощью Azure Export for Terraform.