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

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