AZ2TF
该工具用 Python 编写的新版本现已推出,支持 terraform v0.12。它还允许从 Azure Runbook 以及命令行 https://github.com/andyt530/py-az2tf 执行。
此(bash shell)版本的开发现已停止,取而代之的是新版本
此实用程序“Azure to Terraform”(az2tf) 读取 Azure 订阅并从每个复合 Azure 资源组生成所有必需的 terraform 配置文件 (.tf) 它还使用
“terraform import ....”命令
最后运行一个
“地形计划。”命令
希望 terraform plan 命令不会报告后续添加或删除,因为所有适当的 terraform 配置文件都将自动创建。
要求和先决条件
- 该工具是为 bash shell 脚本编写的,并已在 MAC 上进行了测试
- 需要安装 Azure cli2版本 2.0.55 或更高版本,并且您需要至少具有“读取”权限的登录名
- 需要安装terraform版本v0.11.11
- jq 请参阅:https://stedolan.github.io/jq/(在 macOS 上也可以通过 $brew install jq 获得)
使用该工具的快速入门指南
在本地 shell (bash) 中运行该工具需要执行以下步骤:
- 将此 git 存储库解压缩或克隆到空目录中
- 登录到Azure cli2(
az login
) - 运行该工具
实验:使用docker镜像
- 构建方式:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
。 - 如果它尚不存在,则创建一个“生成”目录(
$ mkdir generated
) - 使用
$ ./runme.sh
运行
(希望得到有关如何更好地使用 docker 的反馈)
将 docker 镜像与 docker-compose 一起使用
我们可以使用 docker-compose 来简化 docker 镜像的运行。简单执行docker-compose run shell bash
。
使用指南
要为整个 Azure 订阅生成 terraform 文件:
./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 import”命令
- 最后运行“地形计划”
支持的资源类型
该工具目前支持以下 terraform 资源类型:
基础资源
- azurerm_resource_group(完整)
授权资源
- azurerm_role_definition(订阅级别)
- azurerm_role_assignment(订阅级别)
活动目录资源
应用服务(Web 应用)资源
- 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_circle_authorization(完整)
- azurerm_express_route_circle_peering(部分)
- azurerm_local_network_gateway
- azurerm_network_interface(通用)
- azurerm_network_security_group(完整)
- azurerm_network_watcher
- azurerm_public_ip(通用)
- azurerm_route_table(完整)
- azurerm_子网(完整)
- azurerm_subnet_network_security_group_association(完整)
- azurerm_subnet_route_table_group_association(完整)
- azurerm_traffic_manager_endpoint(部分)
- azurerm_traffic_manager_profile(部分)
- azurerm_virtual_network(完整)
- azurerm_虚拟_网络_网关
- azurerm_virtual_network_gateway_connection
- azurerm_virtual_network_peering(完整)
政策资源
- azurerm_policy_definition(仅限自定义策略)
- azurerm_policy_分配
OMS 资源
- azurerm_log_analytics_solution(部分)
- azurerm_log_analytics_workspace(完整)
康复服务
- azurerm_recovery_services_vault(完整)
存储资源
- azurerm_storage_account(常见 - 缺乏 tf 完全支持)
(完全)= 完全支持所有 terraform 属性 (通用)= 支持最常见的 terraform 属性 (部分)= 支持部分 terraform 属性
计划增加
- PaaS 数据库和应用程序
- 存储防火墙规则
- 随着 AKS 的发展,持续提供更好的 AKS 支持
- terraform 和 Azure cli2 相互支持的其他 terraform 提供商
已知问题
速度
在大型订阅中循环所有内容的速度相当慢,有一些方法可以加快该工具的速度(减少 az cli 命令调用),但这也会使调试变得更加困难,我可能会在完成构建支持后考虑这样做为更多的供应商。
密钥库:
如果您的登录名/SPN 无权访问 KeyVault,则可能会失败
虚拟机:
这些属性始终在 terraform plan 中报告,默认情况下设置为 false - 可能需要手动覆盖
- delete_data_disks_on_termination:“”=>“假”
- delete_os_disk_on_termination:“”=>“假”
存储账户
正在等待 VNet 服务端点/防火墙的 terraform 支持 如果您的登录/SPN 无法访问用于加密的 KeyVault,则可能会失败 资源锁到位也可能会失败
有机管理系统
如果解决方案的名称中包含“[”和“]”,它们将被忽略。
快速路线
不支持 MS 对等互连(没有可测试的!)
密钥库
terraform 不支持“全部”权限
虚拟网络网关
如果没有为 VNet 网关指定 bgp 设置, terraform plan
将报告良性更改,请参阅 github 中的问题
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>