az2tf
เครื่องมือเวอร์ชันใหม่กว่าที่เขียนด้วย Python พร้อมรองรับ Terraform v0.12 แล้ว นอกจากนี้ยังเปิดใช้งานการดำเนินการจาก Azure runbook เช่นเดียวกับบรรทัดคำสั่ง https://github.com/andyt530/py-az2tf
การพัฒนาเวอร์ชันนี้ (bash shell) ได้หยุดลงแล้วและหันไปใช้เวอร์ชันใหม่แทน
ยูทิลิตี้ 'Azure to Terraform' (az2tf) นี้อ่านการสมัครใช้งาน Azure และสร้างไฟล์การกำหนดค่า Terraform ที่จำเป็นทั้งหมด (.tf) จากกลุ่มทรัพยากร Azure คอมโพสิตแต่ละกลุ่ม นอกจากนี้ยังนำเข้าสถานะ Terraform โดยใช้
คำสั่ง "นำเข้าภูมิประเทศ .... "
และในที่สุดก็รัน a
"แผนพื้นผิว" สั่งการ
หวังว่าจะไม่มีการรายงานเพิ่มเติมหรือการลบในภายหลังโดยคำสั่งแผน terraform เนื่องจากไฟล์การกำหนดค่า terraform ที่เหมาะสมทั้งหมดจะถูกสร้างขึ้นโดยอัตโนมัติ
ข้อกำหนดและข้อกำหนดเบื้องต้น
- เครื่องมือนี้เขียนขึ้นสำหรับสคริปต์ bash shell และได้รับการทดสอบบน MAC
- จำเป็นต้องติดตั้ง Azure cli2 เวอร์ชัน 2.0.55 หรือสูงกว่า และคุณต้องเข้าสู่ระบบด้วยสิทธิ์ "อ่าน" เป็นอย่างน้อย
- จำเป็นต้องติดตั้ง Terraform เวอร์ชัน v0.11.11
- jq ดู: https://stedolan.github.io/jq/ (บน macOS ก็มีให้ใช้งานผ่าน $ brew install jq)
คู่มือการเริ่มต้นใช้งานเครื่องมืออย่างรวดเร็ว
การเรียกใช้เครื่องมือในเชลล์ในเครื่องของคุณ (bash) จำเป็นต้องมีขั้นตอนเหล่านี้:
- แตกไฟล์หรือโคลน repo git นี้ลงในไดเร็กทอรีว่าง
- เข้าสู่ระบบ Azure cli2 (
az login
) - เรียกใช้เครื่องมือ
การทดลอง: การใช้อิมเมจนักเทียบท่า
- สร้างด้วย:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
- หากไม่มีอยู่แล้วให้สร้างไดเร็กทอรี "สร้าง" (
$ mkdir generated
) - วิ่งด้วย
$ ./runme.sh
(ขอขอบคุณข้อเสนอแนะเกี่ยวกับวิธีใช้นักเทียบท่าให้ดีขึ้น)
การใช้อิมเมจนักเทียบท่ากับนักเทียบท่าเขียน
เราสามารถใช้ 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 ต่อไปนี้:
ทรัพยากรฐาน
- azurerm_resource_group (เต็ม)
ทรัพยากรการอนุญาต
- azurerm_role_definition (ระดับการสมัครสมาชิก)
- azurerm_role_signment (ระดับการสมัครสมาชิก)
ทรัพยากรไดเรกทอรีที่ใช้งานอยู่
ทรัพยากรบริการแอป (เว็บแอป)
- 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 (ทั่วไป)
ทรัพยากร 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_peeering (บางส่วน)
- 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 (poicies ที่กำหนดเองเท่านั้น)
- azurerm_policy_มอบหมาย
ทรัพยากรโอเอ็มเอส
- azurerm_log_analytics_solution (บางส่วน)
- azurerm_log_analytics_workspace (เต็ม)
บริการกู้คืน
- azurerm_recovery_services_vault (เต็ม)
ทรัพยากรการจัดเก็บข้อมูล
- azurerm_storage_account (ทั่วไป - ขาดการสนับสนุนเต็มรูปแบบ)
(เต็ม) = การสนับสนุนอย่างเต็มที่สำหรับแอตทริบิวต์ Terraform ทั้งหมด (ทั่วไป) = การสนับสนุนสำหรับคุณลักษณะ Terraform ที่พบบ่อยที่สุด (บางส่วน) = การสนับสนุนสำหรับแอตทริบิวต์ Terraform บางส่วน
การเพิ่มตามแผน
- ฐานข้อมูลและแอป PaaS
- กฎไฟร์วอลล์การจัดเก็บข้อมูล
- การสนับสนุน AKS ที่ดีขึ้นอย่างต่อเนื่องเมื่อ AKS พัฒนาขึ้น
- ผู้ให้บริการ terraform อื่นๆ ที่ terraform และ Azure cli2 รองรับร่วมกัน
ปัญหาที่ทราบ
ความเร็ว
มันค่อนข้างช้าในการวนซ้ำทุกสิ่งในการสมัครสมาชิกขนาดใหญ่ มีวิธีเร่งความเร็วเครื่องมือนี้ (ทำการเรียกคำสั่ง az cli น้อยลง) แต่มันก็จะทำให้การดีบักยากขึ้นด้วย ฉันอาจดูการดำเนินการนี้หลังจากที่ฉันสร้างการสนับสนุนเสร็จแล้ว สำหรับผู้ให้บริการเพิ่มเติม
คีย์วอลท์:
อาจล้มเหลวได้หากการเข้าสู่ระบบ/SPN ของคุณไม่สามารถเข้าถึง KeyVault
เครื่องเสมือน:
คุณลักษณะเหล่านี้จะได้รับการรายงานเสมอในแผนภูมิประเทศที่ตั้งค่าเป็นเท็จตามค่าเริ่มต้น - อาจจำเป็นต้องแทนที่ด้วยตนเอง
- Delete_data_disks_on_termination: "" => "เท็จ"
- Delete_os_disk_on_termination: "" => "เท็จ"
บัญชีการจัดเก็บ
กำลังรอการสนับสนุน Terraform สำหรับจุดสิ้นสุดบริการ / ไฟร์วอลล์ของ VNet อาจล้มเหลวได้หากการเข้าสู่ระบบ / SPN ของคุณไม่สามารถเข้าถึง KeyVault ที่ใช้สำหรับการเข้ารหัส อาจล้มเหลวในการล็อคทรัพยากรด้วย
โอเอ็มเอส
หากวิธีแก้ปัญหามี '[' & ']' อยู่ในชื่อ ก็จะถูกละเว้น
เอ็กซ์เพรสรูท
ไม่รองรับการเพียร์ MS (ไม่มีให้ทดสอบ!)
กุญแจห้องนิรภัย
Terraform ไม่รองรับการอนุญาต "ทั้งหมด"
เกตเวย์เครือข่ายเสมือน
หากไม่มีการระบุการตั้งค่า bgp สำหรับ VNet Gateway terraform plan
จะรายงานการเปลี่ยนแปลงที่ไม่เป็นอันตราย ดูปัญหาใน github
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>