نشر تطبيقات .NET على الحاويات الموجودة على AWS

باعتبارك مطور .NET، قد لا تكون على علم بالالتزام الذي تعهدت به AWS تجاه .NET، بما في ذلك المدافعون عن المطورين، وواجهات برمجة التطبيقات المتخصصة لتطبيقات.
NET الخاصة بك للعمل بسهولة مع خدمات AWS، وحتى بعض الأدوات الرائعة لبيئات التطوير المتكاملة الخاصة بنا.
توفر مجموعة أدوات AWS لـ Visual Studio تفاعلاً مع عدد كبير من خدمات AWS، في حين تركز مجموعات أدوات AWS لـ Visual Studio Code وJetBrains Rider أدواتها على الميزات بدون خادم.
باستخدام مجموعة الأدوات هذه، يمكنك بسهولة نشر تطبيقات .NET على حاويات مُدارة بالكامل على AWS دون مغادرة Visual Studio.
لدى AWS عدد من الطرق لتشغيل الحاويات وإدارتها، بما في ذلك Elastic Container Repository (أو ECR، وهي خدمة لتخزين صور Docker) ومنسقي الحاويات Elastic Kubernetes Service (EKS) وخدمة Elastic Container Service (ECS)، وكلاهما يتكاملان مع إي سي آر.
ولكن إذا كنت لا تريد أن تفكر في كيفية عمل هؤلاء المنسقين، فإن AWS Fargate هي الخدمة المناسبة لك.
أنت تقدم بعض معلومات التكوين وتتولى دفع الصور وتدوير الحاويات وإنشاء موازنات التحميل وإدارة مثيلات الحاوية لتطبيقاتك. إنها حقًا طريقة بسيطة لإنجاز عبء العمل وتشغيله.
ستتعلم في هذه المقالة كيفية استخدام مجموعة أدوات AWS لـ Visual Studio لنشر تطبيق ASP.NET Core بسيط إلى Fargate.
سأبدأ بتطبيق ASP.NET Core Web من قالب وأضيف القليل من إخراج النص إلى الصفحة الافتراضية.
بعد ذلك، سنقوم بنشره على Fargate باستخدام مجموعة الأدوات وإلقاء نظرة على التطبيق الذي يعمل في زوج من الحاويات على AWS.
متطلبات
على الرغم من أن .NET 5 وASP.NET Core 5 وEF Core 5 على الأبواب (أو ربما هنا، بحلول الوقت الذي تقرأ فيه هذه المقالة)، سأستخدم Visual Studio 2019 والإصدارات 3.1 من أطر العمل هذه.
ستحتاج أيضًا إلى تثبيت Docker Desktop وتشغيله على جهاز الكمبيوتر الخاص بك، ويجب ضبطه لاستخدام حاويات Linux، وهو الإعداد الافتراضي.
يجب أن يحتوي تثبيت Visual Studio الخاص بك على مكون أدوات تطوير الحاوية مثبتًا كجزء من عبء عمل التطوير عبر الأنظمة الأساسية لـ .NET Core.
تحتاج أيضًا إلى تثبيت مجموعة أدوات AWS لبرنامج Visual Studio.
يمكنك العثور على ذلك في مدير الامتدادات في Visual Studio أو تنزيله هنا.
بعد تثبيت مجموعة الأدوات، إذا لم يكن لديك حساب على AWS حتى الآن، فيمكنك إنشاء حساب مجاني هنا، ثم سترشدك مجموعة الأدوات إلى إعداد دور مستخدم وربط مجموعة الأدوات بهذا الدور.
سيعطي هذا مجموعة الأدوات الإذن بتنفيذ مهام المطور الخاصة بك على AWS. يمكنك العثور على شرح تفصيلي لهذا الأمر كتابيًا في مقالتي في Code Magazine، أو إذا كنت تفضل الفيديو، في دورة Pluralsight التدريبية ” أساسيات إنشاء تطبيقات .NET على AWS”. “
الخطوة 1: إنشاء تطبيق ASP.NET Core
أولاً، سنبدأ بإنشاء مشروع ASP.NET Core Web Application جديد في Visual Studio. منجم اسمه ChocolateEatersAnon.
بعد ذلك، عليك اختيار نوع تطبيق الويب الذي تريده. تأكد من تحديد .NET Core وASP.NET Core 3.1 في القوائم المنسدلة العلوية، ثم اختر Web Application.
اترك الخيارين الافتراضيين “التكوين لـ HTTPS” و”تمكين دعم Docker” محددين، ثم انقر فوق “إنشاء” لإكمال إنشاء المشروع.
سيقوم القالب بإنشاء تطبيق ويب بسيط مكون من صفحتين: الفهرس والخصوصية.
نظرًا لأننا قمنا بتمكين دعم Docker، يوجد ملف docker يوفر تعليمات إلى Docker حول كيفية إنشاء صورة Docker من التعليمات البرمجية الخاصة بك ووقت تشغيل ASP.NET Core.
الخطوة 2: إضافة القليل من الذكاء إلى موقع الويب
دعونا نجري تعديلاً على صفحة الترحيب. تتكون صفحة Razor من ملف cshtml وملف cs. يتم تشغيل صفحة الترحيب بواسطة Index.cshtml وindex.cs. اسم الفئة في ملف Index.cs هو IndexModel.
سنضيف خاصية رسالة إلى IndexModel ونعرضها على الصفحة، ثم نضيف خاصية سلسلة عامة تسمى الرسالة، ثم نعدل طريقة OnGet لتعيين قيمة خاصية الرسالة.
هذا هو الفصل بعد أن أضفت هذا الرمز:
namespace ChocolateEaters.Pages{ public class IndexModel : PageModel { private readonly ILogger<IndexModel> _logger; public string Message { get; set; } public IndexModel(ILogger<IndexModel> logger) { _logger = logger; } public void OnGet() { Message= $"It's {DateTime.Now}! Time for some chocolate!"; } }
في ملف Index.cshtml، أضفت بعض التعليمات البرمجية البسيطة لعرض الرسالة بنص أحمر وضعته مباشرة فوق فقرة “معرفة حول البناء”.
<span style="color:red">@Html.DisplayFor(model => model.Message)</span>
الآن، عند تشغيل التطبيق، يمكنك رؤية الرسالة على صفحة الترحيب، وسيتم تحديثها في كل مرة تقوم فيها بتحديث الصفحة.
بالإضافة إلى خيارات التصحيح المعتادة في IIS أو Kestrel، يمكنك أيضًا تصحيح الأخطاء محليًا في Docker. تدير أدوات VS Container كل شيء لهذا الغرض والفرق الوحيد الذي ستلاحظه هو المنفذ المحلي الذي ترسل الحاوية مخرجاته إليه.

الخطوة 3: النشر كحاويات Docker في السحابة
الآن بعد أن أصبح التطبيق يتمتع بهذا المنطق الرائع، فقد حان الوقت لنشره على AWS Fargate كحاويات Docker – ونعم، هذا جمع؛ حتى مع وجود تطبيق صغير، من الجيد دائمًا أن يكون لديك مثيل إضافي واحد على الأقل للحاوية قيد التشغيل في حالة تسبب شيء ما في حدوث مشكلة في الحاوية.
سيتحول Fargate تلقائيًا إلى حاوية عاملة، ولن يعرف أحد الفرق.
تتيح لك مجموعة أدوات AWS نشر التطبيقات إما من قائمة سياق المشروع أو من قائمة المشروع في شريط الأدوات
. وفي كلتا الحالتين، يتعين عليك اختيار خيار “نشر الحاوية إلى AWS…”، والذي يتوفر عند وجود ملف إرساء في المشروع.
سيؤدي هذا إلى فتح معالج يحتوي على خمس صفحات للتكوين. تمت تعبئة بعض التفاصيل مسبقًا وستكون كافية للعرض التوضيحي الخاص بنا، بينما يحتاج البعض الآخر إلى القليل من التغيير والتبديل.
بشكل عام، ومع ذلك، حتى في المرة الأولى لي، لم أجد الأمر معقدًا ولا يتطلب أي خبرة في DevOps للتعديل. بمجرد أن تصبح على دراية بما هو موجود في كل صفحة، يجب أن يكون إعداد التكوين في عملية نشر لاحقة أمرًا سهلاً.
سأرشدك عبر الصفحات بسرعة حتى تتمكن من العمل. (للحصول على شرح تفصيلي لما هي جميع الخيارات، راجع دورة Pluralsight الخاصة بي المذكورة في قسم المتطلبات في هذه المقالة.)
الخطوة 4: تحديد مكان نشر التطبيق
الإعدادات الافتراضية في الصفحة الأولى صحيحة. يأتي إذن النشر من ملف تعريف مجموعة أدوات AWS الخاص بك وسيتم إنشاء كل شيء في المنطقة المحددة.
يحدد Docker Image Build نوع البنية التي تريدها واسم الصورة التي سيتم تخزينها في مستودع AWS (ECR). تم تعيين Deployment Target ليتم تشغيله كخدمة على مجموعة ECS، وهو الخيار الصحيح للتطبيقات طويلة التشغيل مثل موقع الويب هذا.

الخطوة 5: إعداد صفحة تكوين التشغيل
اختر “إنشاء مجموعة جديدة” وقم بتوفير اسم لمجموعة ECS حيث سيتم تشغيل الخدمة الخاصة بك. نظرًا لأننا نقوم بإنشاء مجموعة ECS جديدة، فقد تم بالفعل تعيين نوع التشغيل على Fargate.
يجب أن يكون كل شيء آخر صحيحًا، لكنني سأشرحه على أي حال:
- تعد الإعدادات الافتراضية لسعة الحوسبة المخصصة (.25 vCPU وذاكرة 512 ميجابايت) كافية للعرض التوضيحي ومدعومة بالطبقة المجانية.
- يتيح لك تكوين الشبكة تحديد الشبكات الفرعية ومجموعة الأمان الخاصة بـ VPC التي ستستضيف خدمة Fargate الخاصة بك. VPC (Virtual Private Cloud) عبارة عن شبكة افتراضية معزولة على AWS. الإعداد الافتراضي هو استخدام VPC الافتراضي لحسابك.
- الشبكة الفرعية هي مجموعة فرعية من شبكة VPC، وأي وصول إلى VPC يجب أن يمر عبر شبكتين فرعيتين أو أكثر. افتراضيًا، يحدد المعالج جميع الشبكات الفرعية الثلاثة من VPC الافتراضي.
مجموعة الأمان هي جدار الحماية الذي يحمي VPC الخاص بك. تم تحديد مجموعة الأمان الافتراضية لـ VPC بواسطة المعالج. يمكنك قراءة المزيد حول مجموعات أمان VPC هنا.

الخطوة 6: إعداد صفحة تكوين الخدمة
الإعدادات الافتراضية في هذه الصفحة التالية هي إنشاء خدمة جديدة وإعطائها اسم المشروع.
المهمة مسؤولة عن تشغيل حاوية Docker واحدة داخل الخدمة.
أحب أن يكون لدي حاويتين على الأقل، حتى بالنسبة للعرض التجريبي الصغير؛ إذا فشل أحدهما، فسوف ينقلب Fargate تلقائيًا إلى الآخر. هذا هو التغيير الوحيد الذي عليك القيام به.
يستخدم Fargate الحد الأدنى والحد الأقصى للنسبة المئوية لتحديد عدد الحاويات التي يجب تشغيلها في أي وقت محدد. اترك هؤلاء في إعداداتهم الافتراضية.

الخطوة 7: إعداد صفحة تكوين موازن تحميل التطبيق
تتمثل المهمتان الرئيسيتان لموازن تحميل التطبيق في العمل كنقطة اتصال واحدة لبوابة الحاويات قيد التشغيل والتأكد من أن العدد المناسب من الحاويات قيد التشغيل ومتوفر دائمًا.
إنها فكرة جيدة أن يكون لديك موازن تحميل لتطبيق الويب الخاص بك حتى لا تقلق بشأن التوفر.
حدد مربع الاختيار الأول لتكوين موازن التحميل. وبعد تحديد ذلك، تصبح الخيارات الأخرى نشطة. حدد إنشاء جديد في القائمة المنسدلة Load Balancer.
سيؤدي هذا إلى ملء جميع الخيارات المتبقية تلقائيًا، مما يؤدي إلى إنشاء الموارد الإضافية التي يتطلبها موازن التحميل الجديد، واستخدام اسم المشروع حيث يكون الاسم مطلوبًا.

الخطوة الثامنة: تحديد مهام التطبيق
صفحة التكوين الأخيرة هي إنشاء تعريف المهمة. يصف تعريف المهمة المعلمات الخاصة بكل حاوية سيقوم Fargate بتشغيلها لتطبيقك.
ابدأ بتحديد “إنشاء جديد” من القائمة المنسدلة “تعريف المهمة”. سيؤدي هذا أيضًا إلى ملء اسم تعريف المهمة تلقائيًا وتحديد أن المهمة يجب أن تنشئ حاويات جديدة.
تستخدم المهمة دور IAM للوصول إلى الخدمات الأخرى.
افتح القائمة المنسدلة واختر PowerUserAccess من “الدور الجديد المستند إلى سياسة المستخدم المُدارة في AWS”.
يعد هذا خيارًا مقبولاً للعرض التوضيحي الخاص بنا، ولكن ضع في اعتبارك أنه مبالغة في حالة الاستخدام هذه. بالنسبة لتطبيقاتك الحقيقية، ستحتاج إلى أن تكون أكثر انتقائية بشأن الأذونات الممنوحة للدور الذي تقوم بإنشائه.
سيسمح دور تنفيذ المهمة لـ Fargate بسحب صور Docker من ECR لإنشاء الحاويات. اختر إنشاء جديد وسيتم إنشاء الدور المناسب لك.
تعيين المنفذ (80) والإعدادات الافتراضية لمتغير ASP.NET Core Environment صحيحة.

مرحا: لقد حان الوقت للنقر على زر النشر!
سيؤدي هذا إلى تشغيل Docker لإنشاء الصور محليًا.
بمجرد إنشاء الصور، ستقوم مجموعة الأدوات بدفع هذه الصور إلى AWS ECR، ثم سيقوم Fargate بإنشاء جميع الموارد المطلوبة بناءً على التكوينات الخاصة بك. عندما يتم إعداد كل شيء، سيستخدم Fargate تعريف المهمة لتشغيل حاويتين من الصورة التي تم دفعها إلى ECR.
سيترك المعالج نافذة مفتوحة لمشاركة حالة النشر معك. عندما يكون كل شيء جاهزًا، يجب أن تعرض الحالة مهمتين من مهام Fargate قيد التشغيل، وسيكون عنوان URL الخاص بالتطبيق متاحًا كرابط.

تم تشغيل التطبيق، والأهم من ذلك، أنني أرى أن الوقت قد حان مرة أخرى لتناول المزيد من الشوكولاتة.

الخطوات التالية
قدمت هذه المقالة شرحًا سريعًا للحصول على تطبيق ويب ASP.NET Core يعمل في حاويات على AWS Fargate باستخدام حساب AWS مجاني.
المصدر: pluralsight
شاهد المزيد: