az2tf
يتوفر الآن إصدار أحدث من هذه الأداة المكتوبة بلغة Python يدعم terraform v0.12. كما أنه يتيح التنفيذ من دفتر تشغيل Azure بالإضافة إلى سطر الأوامر https://github.com/andyt530/py-az2tf.
لقد توقف الآن تطوير هذا الإصدار (bash Shell) لصالح الإصدار الجديد
تقوم هذه الأداة المساعدة "Azure to Terraform" (az2tf) بقراءة اشتراك Azure وإنشاء جميع ملفات تكوين terraform المطلوبة (.tf) من كل مجموعة من مجموعات موارد Azure المركبة كما أنها تستورد حالة terraform باستخدام
أمر "استيراد Terraform...."
وأخيرا يدير أ
"خطة التضاريس." يأمر
من المفترض ألا يكون هناك أي إضافات أو عمليات حذف لاحقة يتم الإبلاغ عنها بواسطة أمر خطة 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) الخطوات التالية:
- قم بفك ضغط أو استنساخ git repo في دليل فارغ
- تسجيل الدخول إلى 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
لتصفية نوع مورد التضاريس: (على سبيل المثال: مجموعات التوفر فقط)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
التحلي بالصبر - يتم إعطاء الكثير من المخرجات كـ az2tf:
- حلقات لكل مزود من خلال مجموعات الموارد الخاصة بك &
- يقوم بإنشاء ملفات التكوين المطلوبة *.tf في الدليل "الذي تم إنشاؤه".
- ينفذ أوامر "استيراد Terraform" الضرورية
- وأخيرًا يدير "خطة التضاريس"
أنواع الموارد المدعومة
يتم دعم أنواع موارد 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 (مشترك)
موارد طوب البيانات
- 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_signment
موارد OMS
- azurerm_log_analytics_solution (جزئي)
- azurerm_log_analytics_workspace (كامل)
خدمات الاسترداد
- azurerm_recovery_services_vault (كامل)
موارد التخزين
- azurerm_storage_account (مشترك - لا يوجد دعم كامل لـ tf)
(كامل) = دعم كامل لجميع سمات التضاريس (مشترك) = دعم سمات التضاريس الأكثر شيوعًا (جزئي) = دعم بعض سمات التضاريس
الإضافات المخططة
- قواعد بيانات وتطبيقات PaaS
- قواعد جدار الحماية للتخزين
- دعم AKS أفضل ومستمر مع تطور AKS
- موفرو terraform الآخرون حيث يدعم terraform وAzure cli2 بعضهما البعض
المشاكل المعروفة
سرعة
إنها بطيئة جدًا في التكرار حول كل شيء في الاشتراكات الكبيرة، وهناك طرق لتسريع هذه الأداة (إجراء عدد أقل من استدعاءات أوامر az cli) ولكنها ستزيد أيضًا من صعوبة تصحيح الأخطاء، وقد أفكر في القيام بذلك بعد الانتهاء من بناء الدعم لمزيد من مقدمي الخدمات.
كي فولت:
يمكن أن يفشل إذا لم يكن لدى تسجيل الدخول/SPN الخاص بك حق الوصول إلى KeyVault
الأجهزة الافتراضية:
يتم دائمًا الإبلاغ عن هذه السمات في خطة Terraform المعينة على "خطأ" افتراضيًا - وقد تحتاج إلى التجاوز يدويًا
- حذف_بيانات_الأقراص_ون_إنهاء: "" => "خطأ"
- delete_os_disk_on_terminating: "" => "خطأ"
حساب التخزين
في انتظار دعم Terraform لنقاط النهاية/جدار الحماية لخدمة VNet يمكن أن يفشل إذا لم يكن تسجيل الدخول/SPN الخاص بك قادرًا على الوصول إلى KeyVault المستخدم للتشفير يمكن أن يفشل أيضًا وجود أقفال الموارد في مكانها
OMS
إذا كانت الحلول تحتوي على '[' & ']' في أسمائها، فسيتم تجاهلها.
الطريق السريع
لا يوجد دعم لـ MS Peering (ليس لديك واحد للاختبار!)
مفتاح المدفن
لا يدعم terraform إذن "الكل".
بوابة الشبكة الافتراضية
إذا لم يتم تحديد إعدادات bgp لبوابة VNet، فستبلغ terraform plan
عن تغيير حميد، راجع المشكلة في github
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>