az2tf
Python으로 작성된 이 도구의 최신 버전이 이제 Terraform v0.12를 지원하는 데 사용 가능합니다. 또한 명령줄 https://github.com/andyt530/py-az2tf 뿐만 아니라 Azure Runbook에서도 실행할 수 있습니다.
이(bash 쉘) 버전의 개발은 이제 새 버전을 위해 중단되었습니다.
이 유틸리티 'Azure to Terraform'(az2tf)은 Azure 구독을 읽고 각 복합 Azure 리소스 그룹에서 필요한 모든 terraform 구성 파일(.tf)을 생성합니다. 또한
"테라폼 가져오기 ...." 명령
그리고 마지막으로 실행
"테라포밍 계획." 명령
모든 적절한 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 repo를 빈 디렉터리에 압축을 풀거나 복제합니다.
- Azure cli2에 로그인(
az login
) - 도구를 실행
실험적: 도커 이미지 사용
- 다음을 사용하여 빌드:
$ 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>
Terraform 파일에 Key Vault의 비밀을 포함하려면 다음을 수행합니다(비밀은 일반 텍스트로 표시됨).
./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_locationment(구독 수준)
Active Directory 리소스
App Service(웹 앱) 리소스
- azurerm_app_service
- azurerm_app_service_plan
자동화 리소스
- azurerm_automation_account
컴퓨팅 리소스
- azurerm_availability_set(전체)
- azurerm_이미지
- azurerm_managed_disk(공통)
- azurerm_virtual_machine(공통)
- azurerm_virtual_machine_scale_sets(공통)
컨테이너 리소스
- azurerm_container_registry(전체)
- azurerm_kubernetes_cluster
CosmosDB(DocumentDB) 리소스
- azurerm_cosmosdb_account(공통)
Databricks 리소스
- 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_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 명령 호출 수를 줄임) 디버깅도 더 어려워집니다. 지원 구축을 마친 후에 이 작업을 살펴볼 수도 있습니다. 더 많은 공급자를 위해.
KeyVault:
로그인/SPN이 KeyVault에 액세스할 수 없으면 실패할 수 있습니다.
가상 머신:
이러한 속성은 기본적으로 false로 설정된 Terraform 계획에서 항상 보고됩니다. 수동으로 재정의해야 할 수도 있습니다.
- delete_data_disks_on_termination: "" => "거짓"
- delete_os_disk_on_termination: "" => "거짓"
스토리지 계정
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>