Настраиваемый выбор ресурсов и именование с помощью экспорта 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 в несколько файлов сопоставления.
- Хорошо обрабатывает большие объемы ресурсов.
Недостатки.
- Для простых сценариев этот метод может быть перебором.
- Требуется изменение вручную.
Итоги
В этой статье вы узнали о различных вариантах фильтрации ресурсов при экспорте с помощью Azure Export for Terraform.
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по