Поделиться через


Настраиваемый выбор ресурсов и именование с помощью экспорта 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.

Следующие шаги