مشاركة عبر


حول NGroups (معاينة)

أصبحت الحاويات المعيار لتعبئة التطبيقات السحابية ونشرها وإدارتها، كما أن إدارة هذه الحاويات بفعالية أمر بالغ الأهمية مثل تشغيل التطبيقات نفسها. Azure Container Instances (ACI) هي خدمة حوسبة مرنة وقابلة للتطوير بلا خادم تسمح لك بتشغيل التطبيقات الحاوية دون إدارة البنية الأساسية.

توفر لك NGroups قدرات متقدمة لإدارة مجموعات حاويات متعددة ذات صلة. تتضمن الميزات المدعومة ما يلي:

  • الحفاظ على مثيلات متعددة
  • ترقيات متجددة
  • قابلية وصول عالية من خلال مناطق التوفر (AZs)
  • دعم الهوية المدارة
  • دعم الحاوية السرية
  • موازنة الأحمال
  • إعادة التوازن للمنطقة (المنطقة أي)

تعتمد ميزة NGroups على ACI، ما يضمن أن مجموعات الحاويات آمنة ومتاحة للغاية وتدعم مجموعة ميزات ACI.

للحصول على معلومات حول مثيلات حاوية Azure، راجع: ما هي مثيلات حاوية Azure؟

بنية NGroups عالية المستوى

رسم تخطيطي يظهر سير عمل NGroups عالي المستوى.

باستخدام Azure Container Instances، يحتاج العملاء إلى إنشاء كل مجموعة حاويات فردية وصيانتها يدويا. تقدم NGroups حلا أسهل لإنشاء مثيلات مجموعة حاويات N وتحديثها وإدارتها باستخدام استدعاء API واحد.

يعد إنشاء مورد NGroups عملية خطوتين.

  1. إنشاء ملف تعريف مجموعة حاويات (CGProfile)، والذي يعمل كقالب. في CGProfile، يحدد المستخدم خصائص CG التي يتم تطبيقها عبر جميع CGs التي تم إنشاؤها بواسطة NGroups.

  2. إنشاء مورد NGroups. يمكنك توفير العدد المطلوب (عدد CGs المطلوبة) ومرجع إلى ملف تعريف مجموعة الحاوية جنبا إلى جنب مع الخصائص الأخرى ذات الصلة.

تشير NGroups إلى ملف تعريف مجموعة الحاويات هذا ثم تستدعي واجهات برمجة تطبيقات ACI لإنشاء/تحديث CGs بالخصائص المذكورة في CGProfile.

المفاهيم

ملف تعريف مجموعة الحاويات (ملف تعريف CG)

قد يتطلب منك تطبيق سحابي واسع النطاق إدارة مجموعات حاويات متعددة. اعتبارا من اليوم، من أجل تشغيل مجموعات CGs متعددة (مجموعات الحاويات)، يحتاج العملاء إلى توفير خصائص ذات صلة مثل صور الحاوية ونهج إعادة التشغيل والخصائص الأخرى في كل مرة. يمكن أن يؤدي ذلك إلى التقييد والجهد المكرر والنفقات العامة للإدارة.

للتخفيف من هذا القلق، قدمت NGroups ملفات تعريف مجموعة الحاويات. يعمل ملف تعريف مجموعة الحاويات (CGProfile) كقالب لإنشاء مجموعات حاويات بنفس مجموعة الخصائص.

فيما يلي بعض الخصائص الشائعة التي يمكن تحديدها في ملف تعريف مجموعة الحاوية:

  • osType (مثال: Linux وWindows)
  • حاويات. اسم الصورة والذاكرة وCPU وما إلى ذلك.
  • restartPolicy
  • بروتوكول ipAddress والمنفذ الداخلي
  • إيقاف تشغيلGracePeriod
  • timeToLive

وإليك نموذج ملف تعريف CG:

{ 
    "location": "{{location}}", 
    "properties": { 
        "sku": "Standard", 
        "containers": [ 
            { 
                "name": "container1", 
                "properties": { 
                    "image": "nginx", 
                    "ports": [ 
                        { 
                            "protocol": "TCP", 
                            "port": 80 
                        } 
                    ], 
                    "resources": { 
                        "requests": { 
                            "memoryInGB": 2.0, 
                            "cpu": 1.0 
                        } 
                    } 
                } 
            } 
        ], 
        "restartPolicy": "Always", 
        "shutdownGracePeriod": "PT1H", 
        "ipAddress": { 
            "ports": [ 
                { 
                    "protocol": "TCP", 
                    "port": 80 
                } 
            ], 
            "type": "Public",
        }, 
        "timeToLive": "PT1H", 
        "osType": "Linux" 
    }     
}

مجموعات NGroup

يوفر مورد NGroups طريقة لإنشاء مجموعات حاويات 'n' وإدارتها بمجموعة غنية من العمليات. يشير مورد NGroups إلى مورد ملف تعريف مجموعة حاويات ويستخدم ذلك لإنشاء مثيلات N من مجموعات CGs مشابهة المظهر. ضمن مورد NGroups، يمكن للعملاء أيضا تحديد خصائص أخرى بما في ذلك على سبيل المثال لا الحصر عدد CGs وتفضيلات التحديث (التحديث اليدوي أو المتداول) وموازنات التحميل والشبكات الفرعية والخصائص الأخرى ذات الصلة التي يريدون إقرانها ب CGs ضمن مورد NGroups.

إشعار

يجب إنشاء ملف تعريف CG قبل إنشاء مورد NGroups. نظرا لأن ملف تعريف CG هو مورد ARM، فإنه يحتوي على واجهات برمجة تطبيقات ARM الخاصة به. يجب إنشاء ملف تعريف CG قبل إنشاء مورد NGroups.

فوائد الرجوع إلى ملف تعريف مجموعة الحاويات

  • ملف تعريف مجموعة الحاوية هو مورد منفصل عن NGroups. يمكن للعملاء إنشاء مجموعات NGroup متعددة يمكنها الرجوع إلى نفس ملف تعريف مجموعة الحاوية. كما أنه يضمن التناسق عبر جميع مجموعات NGroup التي تشير إلى ملف تعريف مجموعة حاويات واحد ويتجنب التكرار.

  • يمكن أيضا إنشاء ACI CG واحد من ملف تعريف CG. يسمح لك بالانتقال بسرعة من النموذج الأولي إلى وضع الإنتاج.

فيما يلي عينة من مورد NGroups مع هوية ومناطق مدارة تشير إلى ملف تعريف مجموعة حاويات وتنشئ ثلاث مجموعات حاويات:

{ 
    "location": "{{location}}", 
    "properties": { 
        "elasticProfile": { 
            "desiredCount": 100 // specifies how many CGs to create
        }, 
        "containerGroupProfiles": [ 
            { 
                "resource": { 
                    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}" 
                } 
            } 
        ] 
    } 
}

أهم ميزات NGroups

  • يقدم كلا من التحديث المتداول والتحديث اليدوي
  • إدارة مجموعات الحاويات عبر المناطق
  • يدعم الهويات المدارة
  • إضافة موازن التحميل وبوابة التطبيق لإدارة نسبة استخدام الشبكة عبر مجموعات الحاويات
  • إدارة مجموعات الحاويات باستخدام ملفات تعريف مختلفة لمجموعة الحاويات
  • إرفاق مجموعات الحاويات وفصلها

واجهة برمجة تطبيقات NGroups

تشير NGroups إلى ملف تعريف CG وتضيف خصائص وقدرات أخرى ذات صلة. مثال:

  • العدد المطلوب من CGs لإنشاء أو توسيع نطاق
  • الشبكة الفرعية التي يتم نشر CGs فيها عند استخدام شبكة ظاهرية
  • موازن التحميل أو بوابة التطبيق لتوفير دخول الشبكة إلى CGs

تستدعي NGroups بدورها واجهات برمجة تطبيقات ACI ARM لإنشاء كل CG وإدارتها. نظرا لأنه يستخدم نفس واجهات برمجة تطبيقات ARM، فلا يوجد فرق بين مجموعات CGs التي تم إنشاؤها بواسطة NGroups وCGs التي أنشأها العميل مباشرة. لديهم نفس تجربة واجهة برمجة التطبيقات بالضبط.

تحديث مورد NGroups

مع تغير المتطلبات، سنحتاج إلى الاستمرار في تحديث NGroups ومجموعات CGs الخاصة بها. هناك وضعان للتحديث يمكننا من خلالهما تحديث NGroups – Manual (الخيار الافتراضي) و Roll .

ضع في اعتبارك مثالا أساسيا لتحديث مرجع ملف تعريف CG من cgprofile1 إلى cgprofile2:

  • في الوضع اليدوي، نقوم بتحديث المرجع إلى cgprofile2 وإرسال طلب UPDATE PUT إلى NGroups:

تخزن NGroups مرجع ملف تعريف CG الجديد هذا. ولكنه لا يحدث CGs الموجودة بهذا المرجع. تعمل مجموعات CGs الحالية حاليا ولا يوجد أي تأثير عليها. ومع ذلك، عند توسيع نطاق NGroups، يتم إنشاء CGs باستخدام cgprofile2.

  • كيف يمكننا تحديث CGs الحالية باستخدام cgprofile2؟

لتحديث CGs الحالية باستخدام CGProfile جديد، نصدر أمر تحديث يدوي بقائمة صريحة من CGs التي نريد تحديثها. يقوم هذا الأمر بتحديث مجموعات CGs المحددة في قائمته فقط. يتضمن تحديث CG استدعاء واجهة برمجة تطبيقات PUT CG الخاصة ب ACI. تستمر CGs غير المحددة في هذه القائمة في التشغيل باستخدام cgprofile1.

يمنحنا هذا الوضع المرونة لتحديث CGs بشكل انتقائي ويوفر التحكم الكامل في التأثير على أحمال عمل الإنتاج.

في وضع Roll ، عندما نقوم بتحديث المرجع إلى cgprofile2 وإصدار أمر UPDATE NGroups، يتم تحديث CGs الموجودة باستخدام cgprofile2. يحدث التحديث إلى CGs الموجودة على دفعات صغيرة (وليس كل ذلك في وقت واحد). يضمن هذا وجود تأثير ضئيل على حمل العمل الخاص بك نظرا لأن نسبة صغيرة فقط من CGs قد تكون غير متوفرة أثناء التحديث.

يمكننا تكوين حجم الدفعة وإعدادات وضع التحديث المتداول الأخرى ذات الصلة باستخدام واجهة برمجة تطبيقات NGroups.

تجربة NGroups

المتطلبات الأساسية للعمل على NGroups

إصدار واجهة برمجة التطبيقات المدعوم حاليا هو 2024-09-01-preview.

  1. تسجيل الميزة Microsoft.ContainerInstace/NGroupsPreview على اشتراكاتك.

  2. بمجرد تطبيق علامات الميزة على الاشتراك، قم بتسجيل موفر Microsoft.ContainerInstance الموارد على اشتراكاتك.

إشعار

استخدم إصدار api - 2024-09-01-preview وما بعده للمعاينة.

تلميح

اتبع Azure Container Instance Swagger للحصول على معلومات محدثة حول واجهات برمجة تطبيقات NGroups. Container Instance NGroups Swagger - 2024-11-01-preview

إذا لم يتم استيفاء هذه المتطلبات الأساسية، تفشل الطلبات، ولا يتم التعرف على نوع مورد NGroups.

عينات قالب ARM

إنشاء ملف تعريف CG: ContainerGroupProfile-Sample.json إنشاء مجموعات NGroup نطاقية باستخدام CGProfile: NGroups-Zonal-Sample.json

يمكن للعملاء معرفة ما إذا كانت مجموعة حاويات مقترنة بمورد NGroups عن طريق التحقق من خاصية container group orchestratorId ضمن طريقة عرض JSON. يمثل orchestratorId معرف مورد NGroups ARM المقترن.

لقطة شاشة ل NGroups CG ARM JSON تعرض خاصية OrchestratorId.

دليل الطريقة

تنفيذ تحديث متجدد

يمكننا استخدام ميزة Rolling Update لتحديث جميع CGs تلقائيا إلى إصدار أحدث دون وقت تعطل NGroups. راجع وثائق التحديث المتداول: تحديث NGroups Rolling.

إنشاء مجموعات NGroup إقليمية (نطاقية/غير نطاقية)

قم أولا بإنشاء ملف تعريف CG. فيما يلي نموذج لملف تعريف CG. إصدار واجهة برمجة التطبيقات المدعوم حاليا هو 2024-09-01-preview.

{ 
    "properties": { 
        "sku": "Standard", 
        "containers": [ 
            { 
                "name": "container1", 
                "properties": { 
                    "image": "nginx", 
                    "ports": [ 
                    { 
                        "protocol": "TCP", 
                        "port": 80 
                    }], 
                    "resources": { 
                        "requests": { 
                            "memoryInGB": 2.0, 
                            "cpu": 1.0 
                        } 
                    } 
                } 
            } 
        ], 
        "restartPolicy": "Always", 
        "shutdownGracePeriod": "PT1H", 
        "ipAddress": { 
            "ports": [ 
            { 
                "protocol": "TCP", 
                "port": 80 
            }], 
            "type": "Public"
        }, 
        "timeToLive": "PT1H", 
        "osType": "Linux" 
    }

بعد ذلك، يمكنك إنشاء مجموعات NGroup نطاقية/غير نطاقية عن طريق إضافة مناطق خارج الخصائص أو ترك صفيف المناطق فارغا.

{ 
    "properties": { 
        "elasticProfile": { 
            "desiredCount": 5 
        }, 
        "containerGroupProfiles": [ 
            { 
                "resource": { 
                    "id": "[resourceId('Microsoft.ContainerInstance/containerGroupProfiles', parameters('cgProfileName'))]" 
                } 
            } 
        ] 
    }, 
    "zones": [ "1", "2", "3" ] 
}

عند توسيع NGroups عن طريق تعيين الخاصية desiredCount الخاصة بها، يتم توزيع CGs بالتساوي عبر جميع المناطق المحددة. إذا تعطل أحد المناطق، يبقى التطبيق متوفرا لأن مجموعات CGs المتبقية من NGroups تستمر في العمل في مناطق أخرى.

هل يمكنني تحديث CG الذي تم إنشاؤه بواسطة مورد NGroups مباشرة من خلال ACI CG APIs؟

نعم، يتمتع العملاء بالمرونة لتحديث مجموعات الحاويات (CGs) مباشرة باستخدام واجهات برمجة تطبيقات مثيلات حاوية Azure (ACI). للحصول على فهم أعمق لمجموعات حاويات ACI واستكشاف خيارات واجهة برمجة التطبيقات ذات الصلة، تحقق من هذا المورد: مجموعات الحاويات في مثيلات حاوية Azure

أثناء إنشاء مجموعات الحاويات أو تحديثها، تعتمد NGroups على واجهات برمجة تطبيقات ACI نفسها. وهذا يعني أنه يمكن للعملاء استخدام واجهات برمجة التطبيقات هذه لتحديث مجموعات حاويات معينة حسب الحاجة، دون أي تكوينات إضافية.

القدرات والقيود التقنية
  • بمجرد إنشاء مورد NGroups مع مجموعة من المناطق (على سبيل المثال، { "1"، "2" })، لا يمكن إزالة المناطق. ومع ذلك، يمكن إضافة منطقة جديدة إلى القائمة. على سبيل المثال، { "1"، "2"، "3" }

  • إذا كانت منطقة محددة معطلة، فستفشل عملية NGroups الإجمالية لإنشاء CGs. أعد محاولة الطلب بمجرد نسخ المنطقة احتياطيا. خيار آخر هو حذف CGs الفاشلة.

  • أثناء تقليص الحجم، تحذف NGroups المثيلات عشوائيا، والتي قد لا تحافظ دائما على انتشار AZ. ومع ذلك، تحاول عمليات التوسيع اللاحقة دائما إعادة توازن انتشار AZ.

  • لا يتم دعم انتشار AZ مع حاويات Spot. إذا كان لديك مثل هذا المطلب، فتواصل مع فريق ACI.

  • راجع أيضا: تأثير التوفر بسبب تحديثات البنية الأساسية/النظام الأساسي.

إنشاء NGroups CGs مع بادئة

يمكن للعملاء إنشاء NGroups CGs ببادئة بدلا من أسماء GUID فقط:

"properties": { 
    "elasticProfile": { 
        "desiredCount": 2,             
        "containerGroupNamingPolicy": { 
            "guidNamingPolicy": { 
                "prefix": "cg-" 
            } 
        } 
    },

يمكن أن يكون هذا مفيدا عندما يكون لديك عدة مجموعات NGroup في مجموعة موارد واحدة وتريد تمييز CGs التي تنتمي إلى كل NGroup (على سبيل المثال، في طريقة عرض مدخل Microsoft Azure). يمكنك أيضا تغييره لكل عملية توسيع لتحديد CGs التي تم توسيع نطاقها معا في عملية واحدة.

إنشاء NGroups مع كل من الهويات المدارة المعينة من قبل النظام والمخصصة من قبل المستخدم

“location”: “{{location}}” 
"identity": { 
    "type": "SystemAssigned, UserAssigned", 
    "userAssignedIdentities": { 
        "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{{userAssignedIdentity1}}": {},  
        "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{{userAssignedIdentity2}}": {} 
    }

إذا حذفت بعض CGs من NGroups، هل يمكن لمجموعة NGroups إعادة بناء نفسها باستخدام مجموعات CGs جديدة للحفاظ على العدد المطلوب؟

نعم، يمكنك تعيين الخاصية properties.elasticProfile.maintainDesiredCount bool إلى true.

يقوم بإنشاء CG جديد لكل CG يتم حذفه/فصله من NGroups. يحاول الاحتفاظ بخاصية desiredCount الخاصة ب NGroups إلى قيمة المجموعة الخاصة به.

يكون هذا مفيدا عندما تريد استخدام NGroups كتجمع يتم تجديده تلقائيا عند إزالة CGs من التجمع لسيناريوهات حمل العمل الخاص بك.

وهي خاصية منطقية تقبل القيم الخالية. إذا حذفته لمكالمات NGroups PUT/update اللاحقة، فلن يتم إعادة تعيينه إلى خطأ. لإعادة التعيين، يجب تعيينه بشكل صريح إلى خطأ. عندما يكون فارغا/خاطئا، وعندما يتم حذف/فصل CG من NGroups، يتم تقليل الخاصية desiredCount ل NGroups وفقا لذلك.

كيف أعمل الحصول على اسم CG ومعرف NGroups وبيانات التعريف الأخرى التي تم نشرها في الحاوية؟

حاليا، نكشف فقط اسم CG ومعرف المنسق (معرف مورد ARM). وفي المستقبل، يمكن النظر في خصائص أخرى ذات صلة. تظهر هاتين الخاصيتين كمتغيرات بيئة الحاوية.

للحصول على متغيرات البيئة هذه على الحاوية، حدد هذه العلامات على مستوى NGroups:

tags: { 
    “metadata.container.environmentVariable.containerGroupName”: true, 
    “metadata.container.environmentVariable.orchestratorId”: true, 
    : 
    : // other NGroups tags you may have 
    : 
}

تفهم NGroups هذه العلامات على أنها خاصة وتنشر متغيرات البيئة المطلوبة وصولا إلى كل حاوية كما هو موضح هنا.

لقطة شاشة لمورد حاوية على مدخل Microsoft Azure تعرض متغيرات البيئة التي تحتوي على خصائص

ما هو تأثير التوفر بسبب تحديثات البنية الأساسية/النظام الأساسي؟

بالنسبة لأحمال العمل التي توفر قابلية وصول أعلى (على سبيل المثال، مجموعات NGroup المنتشرة عبر مناطق AZ متعددة)، لا يزال هناك احتمال منخفض لحدوث CGs في أكثر من AZ واحد في نفس الوقت. يمكن أن يحدث ذلك عندما تمر البنية الأساسية ل Azure (الأجهزة المضيفة ومجموعات مقياس الجهاز الظاهري وما إلى ذلك) بتحديث (يسمى تحديث البنية الأساسية أو تحديث النظام الأساسي).

يتم إجراء هذا التحديث من AZ بواسطة AZ مع عدم وجود الكثير من التنسيق التلقائي عبر AZs. ويتعقب التنسيق يدويا ويبذل قصارى جهده.

لذلك، إذا حدث تحديث النظام الأساسي بالصدفة في وقت واحد عبر 2 AZs أو أكثر، فيمكن أن تنخفض مجموعات CGs عبر AZs هذه في نفس الوقت، مما يتسبب في عدم توفر مجموعات NGroup الخاصة بك.

كيفية استخدام الحاويات السرية مع NGroups

تدعم NGroups مجموعات حاويات ACI السرية. يتم تعريف المثيلات السرية باستخدام الخصائص التالية داخل ملف تعريف مجموعة الحاوية.

{ 
    "location": "{{location}}", 
    "properties": { 
        "sku": "Confidential",
        "confidentialComputeProperties": { 
            "ccePolicy": "<base 64 encoded policy>" 
          }, 
        "containers": [ ... ], 
        "restartPolicy": "Always", 
        "shutdownGracePeriod": "PT1H", 
        "ipAddress": { ... }, 
        "timeToLive": "PT1H", 
        "osType": "Linux" 
    }     
} 

راجع وثائق ACI للحاويات السرية هنا: البرنامج التعليمي: إعداد نشر لحاوية سرية على مثيلات حاوية Azure

العينات

نموذج ملف تعريف مجموعة الحاويات

{
    "properties": {
        "sku": "Standard",
        "containers": [
            {
                "name": "web",
                "properties": {
                    "image": "mcr.microsoft.com/azuredocs/aci-helloworld",
                    "ports": [
                        {
                            "protocol": "TCP",
                            "port": 80
                        }
                    ],
                    "targetState": "Running",
                    "resources": {
                        "requests": {
                            "memoryInGB": 1,
                            "cpu": 1
                        }
                    }
                }
            }
        ],
        "restartPolicy": "Always",
        "shutdownGracePeriod": "PT2H",
        "ipAddress": {
            "ports": [
                {
                    "protocol": "TCP",
                    "port": 80
                }
            ],
            "type": "Public"
        },
        "osType": "Linux",
        "revision": 1
    },
    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}",
    "name": "{{cgProfile1}}",
    "type": "Microsoft.ContainerInstance/containerGroupProfiles",
    "location": "{{location}}"
}

NGroups مع عينة المناطق

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "apiVersion": {
      "type": "string",
      "maxLength": 32
    },
    "NGroupsName": {
      "type": "string",
      "maxLength": 64
    },
    "containerGroupProfileName": {
      "type": "string",
      "maxLength": 64
    },
    "resourceTags": {
      "type": "object"
    },
    "desiredCount": {
      "type": "int"
    }
  },
  "variables": {
    "description": "This ARM template can be parameterized for a basic CRUD scenario for NGroups. It is self contained with cgProfile and NGroups resource",
    "cgProfileName": "[parameters('containerGroupProfileName')]",
    "NGroupsName": "[parameters('NGroupsName')]",
    "resourcePrefix": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/')]"
  },
  "resources": [
    {
      "apiVersion": "[parameters('apiVersion')]",
      "type": "Microsoft.ContainerInstance/containerGroupProfiles",
      "name": "[variables('cgProfileName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "sku": "Standard",
        "containers": [
          {
            "name": "web",
            "properties": {
              "image": "mcr.microsoft.com/azuredocs/aci-helloworld",
              "ports": [
                {
                  "protocol": "TCP",
                  "port": 80
                }
              ],
              "resources": {
                "requests": {
                  "memoryInGB": 1.0,
                  "cpu": 1.0
                }
              }
            }
          }
        ],
        "restartPolicy": "Always",
        "ipAddress": {
          "ports": [
            {
              "protocol": "TCP",
              "port": 80
            }
          ],
          "type": "Public"
        },
        "osType": "Linux"
      }
    },
    {
      "apiVersion": "[parameters('apiVersion')]",
      "type": "Microsoft.ContainerInstance/NGroups",
      "name": "[variables('NGroupsName')]",
      "tags": "[parameters('resourceTags')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.ContainerInstance/containerGroupProfiles/', variables('cgProfileName'))]"
      ],
      "identity": {
        "type": "systemAssigned"
      },
      "properties": {
        "elasticProfile": {
          "desiredCount": "[parameters('desiredCount')]",
          "maintainDesiredCount": true
        },
        "containerGroupProfiles": [
          {
            "resource": {
              "id": "[concat(variables('resourcePrefix'), 'Microsoft.ContainerInstance/containerGroupProfiles/', variables('cgProfileName'))]"
            }
          }
        ]
      },
      "zones": [ "1", "2", "3" ]
    }
  ]
}