az2tf
Python で書かれたこのツールの新しいバージョンが利用可能になり、terraform v0.12 をサポートします。また、コマンド ライン https://github.com/andyt530/py-az2tf だけでなく、Azure Runbook からの実行も可能になります。
この (bash シェル) バージョンの開発は現在停止されており、新しいバージョンが優先されます。
このユーティリティ「Azure to Terraform」(az2tf) は、Azure サブスクリプションを読み取り、各複合 Azure リソース グループから必要なすべての Terraform 構成ファイル (.tf) を生成します。また、
「terraform import ....」コマンド
そして最後に実行します
「テラフォーム計画」指示
適切な terraform 構成ファイルはすべて自動的に作成されているため、terraform plan コマンドによってその後の追加や削除が報告されることはないはずです。
要件と前提条件
- このツールは 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 イメージの使用
$ docker build --rm -f "Dockerfile" -t az2tf:latest
でビルドします。- まだ存在しない場合は、「生成された」ディレクトリを作成します (
$ mkdir generated
) -
$ ./runme.sh
で実行
(Docker のより良い使用方法についてのフィードバックをいただければ幸いです)
docker-compose での docker イメージの使用
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_diction (サブスクリプション レベル)
- azurerm_role_assignment (サブスクリプション レベル)
Active Directory リソース
App Service (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
Key Vault のリソース
- 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_diction (カスタム ポリシーのみ)
- azurerm_policy_assignment
OMS リソース
- azurerm_log_analytics_solution (部分的)
- azurerm_log_analytics_workspace (フル)
リカバリサービス
- azurerm_recovery_services_vault (フル)
ストレージリソース
- azurerm_storage_account (共通 - 完全なサポートが不足している)
(完全) = すべての Terraform 属性を完全にサポート (共通) = 最も一般的な Terraform 属性をサポート (部分) = 一部の Terraform 属性をサポート
予定されている追加
- PaaS データベースとアプリ
- ストレージファイアウォールルール
- AKS の進化に伴い、継続的に AKS サポートが改善されています
- terraform と Azure cli2 が相互サポートするその他の terraform プロバイダー
既知の問題
スピード
大規模なサブスクリプションですべてをループすると非常に時間がかかります。このツールを高速化する方法 (az cli コマンド呼び出しの回数を減らす) はありますが、デバッグも難しくなります。サポートの構築が完了したら、これを行うことを検討するかもしれません。より多くのプロバイダーのために。
KeyVault:
ログイン/SPN が KeyVault にアクセスできない場合は失敗する可能性があります
仮想マシン:
これらの属性は、デフォルトで false に設定された Terraform プランで常に報告されます。手動でオーバーライドする必要がある場合があります。
- delete_data_disks_on_termination: "" => "false"
- delete_os_disk_on_termination: "" => "false"
ストレージアカウント
VNet サービス エンドポイント/ファイアウォールの Terraform サポートを待っています ログイン/SPN が暗号化に使用される KeyVault にアクセスできない場合は失敗する可能性があります リソース ロックが設定されている場合も失敗する可能性があります
OMS
ソリューションの名前に「[」と「]」が含まれている場合、それらは無視されます。
エクスプレスルート
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>