аз2тф
Теперь доступна более новая версия этого инструмента, написанная на Python, с поддержкой terraform v0.12. Он также обеспечивает выполнение из Runbook Azure, а также из командной строки https://github.com/andyt530/py-az2tf.
Разработка этой версии (оболочки bash) прекращена в пользу новой версии.
Эта утилита «Azure to Terraform» (az2tf) считывает подписку Azure и создает все необходимые файлы конфигурации terraform (.tf) из каждой составной группы ресурсов Azure. Она также импортирует состояние terraform с помощью
«Терраформировать импорт....» команда
И, наконец, запускает
«план терраформирования». команда
Надеемся, что команда terraform plan не сообщит о последующих добавлениях или удалениях, поскольку все соответствующие файлы конфигурации terraform будут созданы автоматически.
Требования и предпосылки
- Инструмент написан для сценария оболочки bash и протестирован на MAC.
- Необходимо установить Azure cli2 версии 2.0.55 или выше , а также необходимо войти в систему с правами как минимум «Чтение».
- необходимо установить версию terraform v0.11.11.
- jq см.: https://stedolan.github.io/jq/ (в macOS также доступно через $ Brew install jq)
Краткое руководство по использованию инструмента
Для запуска инструмента в локальной оболочке (bash) необходимо выполнить следующие действия:
- Разархивируйте или клонируйте этот репозиторий git в пустой каталог.
- войдите в Azure cli2 (
az login
) - запустить инструмент
Эксперимент: использование образа докера
- Сборка с помощью:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
. - Если он еще не существует, создайте «сгенерированный» каталог (
$ mkdir generated
). - Запустите с помощью
$ ./runme.sh
(буду признателен за отзывы о том, как лучше использовать докер)
Использование образа докера с помощью docker-compose
Мы можем использовать docker-compose, чтобы упростить запуск образа докера. Простое выполнение docker-compose run shell bash
.
Руководство по использованию
Чтобы создать файлы terraform для всей подписки Azure:
./az2tf.sh -s <Subscription ID>
Чтобы включить политики подписки Azure, а также элементы управления и назначения RBAC:
./az2tf.sh -s <Subscription ID> -p yes
Чтобы создать файлы terraform для определенной группы ресурсов в подписке:
./az2tf.sh -s <Subscription ID> -g <Resource Group>
Чтобы включить секреты из Key Vault в файлы terraform (секреты будут представлены в виде обычного текста):
./az2tf.sh -s <Subscription ID> -g <Resource Group> -x yes
Чтобы отфильтровать тип ресурса terraform: (например: только группы доступности)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
Будьте терпеливы — большой объем вывода выдается в виде az2tf:
- Циклы для каждого поставщика через ваши группы ресурсов и
- Создает необходимые файлы конфигурации *.tf в «сгенерированном» каталоге.
- Выполняет необходимые команды «импорта terraform».
- И, наконец, запускает «план терраформирования».
Поддерживаемые типы ресурсов
В настоящее время этим инструментом поддерживаются следующие типы ресурсов terraform:
Базовые ресурсы
- azurerm_resource_group (полный)
Ресурсы авторизации
- azurerm_role_definition (уровень подписки)
- azurerm_role_assignment (уровень подписки)
Ресурсы Active Directory
Ресурсы службы приложений (веб-приложения)
- azurerm_app_service
- azurerm_app_service_plan
Ресурсы по автоматизации
- azurerm_automation_account
Вычислительные ресурсы
- azurerm_availability_set (полный)
- azurerm_image
- azurerm_managed_disk (общий)
- azurerm_virtual_machine (общий)
- azurerm_virtual_machine_scale_sets (общий)
Ресурсы контейнера
- azurerm_container_registry (полный)
- azurerm_kubernetes_cluster
Ресурсы CosmosDB (DocumentDB)
- azurerm_cosmosdb_account (общий)
Ресурсы по блокам данных
- azurerm_databricks_resources
Ресурсы хранилища ключей
- azurerm_key_vault (общий)
- azurerm_key_vault_secret (полный)
Ресурсы по балансировке нагрузки
- azurerm_lb (полный)
- azurerm_lb_backend_address_pool (полный)
- azurerm_lb_rule (полный)
- azure_nat_rule (полная версия — требуется дополнительное тестирование)
- azurerm_lb_probe (полный)
- azure_nat_pool (полная версия — требуется дополнительное тестирование)
Ресурсы управления
- azurerm_management_lock (полный)
Ресурсы для обмена сообщениями
- azurerm_servicebus_namespace (полное)
- azurerm_servicebus_queue (частичный)
Мониторинг ресурсов
- azurerm_autoscale_setting
Сетевые ресурсы
- azurerm_application_gateway
- azurerm_application_security_group (полный)
- azurerm_express_route_circuit (полный)
- azurerm_express_route_circuit_authorization (полный)
- azurerm_express_route_circuit_peering (частичный)
- azurerm_local_network_gateway
- azurerm_network_interface (общий)
- azurerm_network_security_group (полная)
- azurerm_network_watcher
- azurerm_public_ip (общий)
- azurerm_route_table (полная)
- azurerm_subnet (полный)
- azurerm_subnet_network_security_group_association (полный)
- azurerm_subnet_route_table_group_association (полный)
- azurerm_traffic_manager_endpoint (частичный)
- azurerm_traffic_manager_profile (частичный)
- azurerm_virtual_network (полный)
- azurerm_virtual_network_gateway
- azurerm_virtual_network_gateway_connection
- azurerm_virtual_network_peering (полный)
Политические ресурсы
- azurerm_policy_definition (только пользовательские политики)
- azurerm_policy_assignment
Ресурсы ОМС
- azurerm_log_analytics_solution (частично)
- azurerm_log_analytics_workspace (полный)
Услуги восстановления
- azurerm_recovery_services_vault (полный)
Ресурсы хранения
- azurerm_storage_account (обычный — отсутствует полная поддержка)
(Полная) = полная поддержка всех атрибутов терраформа (Общая) = поддержка наиболее распространенных атрибутов терраформа (Частичная) = поддержка некоторых атрибутов терраформирования
Планируемые дополнения
- Базы данных и приложения PaaS
- Правила брандмауэра хранилища
- постоянное улучшение поддержки AKS по мере развития AKS
- Другие поставщики terraform, где terraform и Azure cli2 взаимно поддерживают друг друга.
Известные проблемы
Скорость
В больших подписках циклически все обходить довольно медленно, есть способы ускорить работу этого инструмента (сделать меньше вызовов команд az cli), но это также усложнит отладку. Возможно, я подумаю об этом после того, как закончу создание поддержки. для большего количества поставщиков.
Ключевое хранилище:
Может произойти сбой, если ваш логин/SPN не имеет доступа к KeyVault.
Виртуальные машины:
Эти атрибуты всегда сообщаются в плане terraform, для которого по умолчанию установлено значение false — возможно, потребуется переопределить их вручную.
- delete_data_disks_on_termination: "" => "false"
- delete_os_disk_on_termination: "" => "false"
Учетная запись хранения
ожидается поддержка terraform для конечных точек службы виртуальной сети/брандмауэра. Может произойти сбой, если у вашего имени входа или имени участника-службы нет доступа к KeyVault, используемому для шифрования. Может также произойти сбой, если установлены блокировки ресурсов.
ОМС
Если в именах решений есть символы «[» и «]», они будут игнорироваться.
ЭкспрессРоут
Нет поддержки пиринга MS (нет возможности протестировать!)
Ключевое хранилище
terraform не поддерживает разрешение «Все»
Виртуальный сетевой шлюз
если для шлюза виртуальной сети не указаны настройки BGP, terraform plan
сообщит о неопасном изменении, см. проблему в github
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>