مهام البرمجة السحابية
- 12 دقائق
كان مفهوم البرمجة النصية موجودًا تقريبًا منذ اختراع أجهزة الكمبيوتر. لعقود من الزمان، يتفاعل العاملون في مجال تكنولوجيا المعلومات مع أجهزة الكمبيوتر عن طريق كتابة الأوامر في وحدة التحكم. حتى يومنا هذا، يفضل بعض المستخدمين واجهة سطر الأوامر (CLI) على واجهة المستخدم الرسومية (GUI). تسمح البرمجة النصية بدمج الأوامر المستقلة في ملف نصي واحد أو أكثر ("البرامج النصية") وتنفيذها كمجموعة. تسمح لغات البرمجة النصية مثل Bash للنصوص بتنفيذ أكثر من تنفيذ تسلسل الأوامر تلقائيًا، يمكن أن تتضمن البرامج النصية عبارات مثل if وfor، التي تنفذ الأوامر بشروط أو بشكل متكرر، ويمكن أن تطلب مدخلات من المستخدمين، ويمكن أن تتضمن متغيرات رمزية.
إن أبسط طريقة لأتمتة عمليات النشر على السحابة هي تجميع الأوامر المطلوبة لإنشاء مجموعة من الموارد وتكوينها في برنامج نصي. تدعم الأنظمة الأساسية السحابية الشائعة واجهات سطر الأوامر (CLIs) وواجهات السحابة (CLIs التي يتم الوصول إليها من خلال مستعرض) والتي تحتوي على أوامر يمكن استخدامها في هذه البرامج النصية. يقدم Azure، على سبيل المثال، الأمر az، بينما تدعم AWS الأمر aws وتدعم Google gcloud.
لغات البرمجة النصية
لغة البرمجة هي لغة برمجة تستخدم لأتمتة تنفيذ المهام. لا يوجد نقص في لغات البرمجة النصية للاختيار من بينها؛ تسرد ويكيبيديا ما يقرب من 200 منهم1. لا تنطبق جميعها على الأنظمة الأساسية السحابية. من وجهة نظر المسؤول الذي يهدف إلى أتمتة الأنشطة التي تنطوي على موارد السحابة، تندرج لغات البرمجة النصية بصفة عامة ضمن فئتين:
- لغات البرمجة النصية متعددة الأغراض مثل Bash وPowerShell
- لغات برمجة مميزة تمامًا مثل Python التي يمكن استخدامها أيضًا في البرمجة النصية
توفر لغات البرمجة النصية للأغراض العامة قدرات على التفريع والتكرار الحلقي واتخاذ القرارات، لكنها تعتمد على أوامر نظام التشغيل أو الأوامر من الوظائف الإضافية مثل واجهات CLI السحابية للقيام بمعظم العمل. لا تتضمن Bash، على سبيل المثال، أوامر لإنشاء أجهزة ظاهرية في AWS أو Azure، ولكن يمكنه استدعاء أوامر CLI التي تفعل ذلك. ويمكن أن يتضمن نص Bash منفرد أي عدد من أوامر CLI. لا يختلف الأمر الموجود في برنامج Bash النصي عن الأمر الذي يكتبه المسؤول في سطر الأوامر.
برمجة Bash النصية
Bash، اختصار لـ "Bourne-again shell"، هي من أشهر لغات البرمجة النصية في العالم. إنها أداة لا يمكن الاستغناء عنها لمسؤولي النظام ومسؤولي السحابة على حد سواء. يتمتع بدعم أصلي في Linux وmac OS ومتاح لنظام Windows أيضًا. علاوة على ذلك، فهو مدعوم في واجهات السحابة مثل Azure Cloud Shell.
البرنامج النصي Bash التالي، على سبيل المثال، يستخدم أمر CLI Azure az لإنشاء مجموعة موارد في Azure وUbuntu VM داخل مجموعة الموارد:
az group create --name cmu-rg --location eastus
az vm create --resource-group cmu-rg \
--name cmu-vm --image Ubuntu2204 \
--admin-username cmu-admin \
--admin-password Micr0s0ft** \
--location eastus
البرمجة النصية PowerShell
أداة البرمجة النصية الأخرى الشائعة بين مسؤولي السحابة هي PowerShell. قامت Microsoft بتطوير PowerShell ليكون أحدث جيل من سطر أوامر Windows، وأيضًا بديلاً أكثر أمانًا لـ Windows Script Host (WSH) الذي تم تطويره في الأصل لـ Windows Server. أصبح منذ ذلك الحين مشروعًا مفتوح المصدر ويعمل على نظامي التشغيل Windows وLinux.
بدلاً من الاعتماد على أوامر نظام التشغيل، يوفر PowerShell أوامره الخاصة ومصطلحاته الخاصة. معظم أوامر PowerShell أو cmdlet (تُنطق "command-let"، والتي تُعرّف على أنها برنامج صغير في حد ذاته) هي فعل باللغة الإنجليزية مرتبط بعنصر بواصلة. على سبيل المثال، Get-Location لسرد محتويات الدليل الحالي وCopy-Item لنسخ ملف وStart-Process لتشغيل برنامج. تتجنب لغة PowerShell استخدام الاختصارات غير الواضحة مثل اختصار sudo في Linux لصالح عبارات يسهل قراءتها بشريًا، وإن كانت طويلة نوعًا ما.
ما يجعل PowerShell فريدًا هو أن اللغة التي كانت مخصصة في الأصل للاستخدام مع أجهزة الكمبيوتر الفردية والشبكات المحلية قد تم توسيعها للعمل مع الأنظمة الأساسية السحابية. على الرغم من أنه من الممكن ببساطة تضمين تعليمات Azure CLI في برنامج PowerShell النصي، تقدم Microsoft وحدة نمطية تسمى Azure PowerShell التي تمد PowerShell باستخدام أوامر cmdlets الخاصة بـ Azure. تقدم Amazon وحدة مماثلة تسمى AWS Tools for PowerShell. فيما يلي نص برمجي من PowerShell يعادل برنامج Bash النصي أعلاه:
$VMAdmin = "cmu-admin"
$VMPassword = ConvertTo-SecureString "Micr0s0ft**" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential `
($VMAdmin, $VMPassword)
New-AzResourceGroup -Name cmu-rg -Location EastUS
New-AzVm -ResourceGroupName "cmu-rg" `
-Name "cmu-vm" `
-Location "East US" `
-image Ubuntu2204 `
-Credential $Cred
تطوير Python
يمكن للمسؤولين أيضًا استخدام لغات البرمجة كاملة الميزات مثل Python لإنشاء موارد السحابة وإدارتها. لا تتضمن هذه اللغات ميزات خاصة بالسحابة الخاصة بها، ولكن يمكنها دمج المكتبات ومجموعات تطوير البرامج (SDKs) التي تفعل ذلك. يقدم معظم موفري خدمات السحابة الرئيسيين حزم SDK مجانية للتفاعل مع منصاتهم بلغات مختلفة. تقدم Microsoft، على سبيل المثال، حزم تطوير البرامج من Azure لـ C# وGo و Java وPython وNode.js ولغات البرمجة الشائعة الأخرى، كما تفعل AWS. حتى دون حزم SDK، يمكن للمبرمجين استخدام واجهات برمجة تطبيقات REST التي تقدمها الأنظمة الأساسية السحابية الرئيسية لاستدعاء خدمات السحابة. إن أدوات تطوير البرامج والمكتبات تجعل كتابة مثل هذه البرامج أسهل.
على سبيل المثال، تقدم AWS حزمة من برامج تطوير البرامج تسمى Boto تحتوي على وظائف Python تعكس إرشادات AWS CLI بشكل وثيق. يتم تكييف بناء الجملة لهذه الطرق لتتناسب مع النمط الأصلي من Python. يستخدم نص Python النصي التالي Boto لإنشاء مثيل EC2 في منطقة Amazon East 1:
import boto3
try:
ec2 = boto3.client('ec2', region_name='us-east-1')
key_pair = ec2.create_key_pair(KeyName='ec2-key-pair')
ec2.run_instances(
ImageId='ami-00b6a8a2bd28daf19',
InstanceType='t2.micro',
KeyName='ec2-key-pair',
Placement='AvailabilityZone=us-east-1d',
MinCount=1,
MaxCount=1)
except ClientError as e:
print(e)
تتمثل إحدى فوائد استخدام لغة البرمجة في البرمجة النصية في الدعم القوي لمعالجة الأخطاء وتصحيح الأخطاء. الجانب السلبي، بالطبع، هو أنك بحاجة إلى مبرمجين على دراية جيدة باللغة التي تختارها وعلى دراية بالمنصات السحابية ومجموعات SDK السحابية.
توسيع البرنامج النصي
تُنشئ أوامر Bash التالية، التي تكتب واحدة تلو الأخرى في Azure CLI أو Cloud Shell، مجموعة موارد في منطقة شرق الولايات المتحدة في Azure وUbuntu VM للانتقال إليها. هذه متطابقة مع أوامر az المذكورة أعلاه باستثناء المفتاح --generate-ssh-keys، الذي يستبدل كلمات مرور تسجيل الدخول بأزواج مفاتيح عامة/خاصة لمزيد من الأمان:
az group create --name cmu-rg --location eastus
az vm create --resource-group cmu-rg \
--name cmu-lamp-vm --image Ubuntu2204 \
--admin-username lamp-admin \
--generate-ssh-keys \
--location eastus
بعد إنشاء الجهاز الظاهري، يمكن للمسؤول الاتصال به بشكل آمن عبر Secure Shell (SSH) باستخدام هذا الأمر، حيث IP_ADDRESS هو عنوان IP العام المعيّن للجهاز الظاهري والإخراج من الأمر az vm create:
ssh lamp-admin@IP_ADDRESS
داخل جلسة SSH، يمكن للمسؤول استخدام الأوامر التالية لتثبيت حزمة LAMP (Linux/Apache/MySQL/PHP) في الجهاز الظاهري ثم إنهاء جلسة SSH:
sudo apt update
sudo apt install lamp-server^
exit
هذه خطوات كثيرة، خاصة إذا كنت بحاجة إلى تنفيذها ليس مرة واحدة فقط، ولكن عدة مرات. كبديل لإدخال هذه الأوامر يدويًا، قد يختار المسؤول كتابتها عن طريق إنشاء ملف نصي باسم ccvm.sh (اختصار لـ "create and configure VM (إنشاء وتكوين VM)") يحتوي على العبارات في الشكل 2.
لا يكتفي النص البرمجي بقراءة الأوامر التي قد يكتبها المشغل في وحدة التحكم. لاحظ استدعاء الأمر az vm show للحصول على عنوان IP العام لجهاز VM وتخصيصه للمتغير المسمى $IP_ADDRESS، واستخدام إعادة التوجيه إلى (<<) لإدخال الأوامر في جلسة SSH، وإضافة محولات سطر الأوامر (على سبيل المثال، -y في sudo apt -y install) لمنع مطالبات التأكيد بحيث يمكن تشغيل البرنامج النصي من البداية إلى النهاية دون تدخل بشري:
az group create --name cmu-rg --location eastus
az vm create --resource-group cmu-rg \
--name cmu-lamp-vm --image Ubuntu2204 \
--admin-username lamp-admin \
--generate-ssh-keys
IP_ADDRESS=$(az vm show --show-details \
--resource-group cmu-rg --name cmu-lamp-vm \
--query publicIps -o tsv)
ssh -o 'StrictHostKeyChecking no' lamp-admin@$IP_ADDRESS << EOF
sudo apt update
sudo apt -y install lamp-server^
exit
EOF
الشكل 2: برنامج Bash النصي لإنشاء Azure VM وتثبيت حزمة LAMP.
مع وجود هذا البرنامج النصي في متناول اليد، يمكن للمسؤول إنشاء VM وتثبيت حزمة LAMP بأمر واحد:
bash ccvm.sh
وتتمثل فائدة هذا الأسلوب في أنه يتم تقليل العديد من الأوامر إلى أمر واحد، مع القضاء على أي فرصة للخطأ البشري. لكنها بعيدة عن الكمال. في كل مرة يتم تنفيذها، يحاول البرنامج النصي إنشاء نفس الجهاز الظاهري ونفس مجموعة الموارد في نفس منطقة Azure (شرق الولايات المتحدة). إذا كان الهدف هو أن تكون قادرًا على إنشاء أجهزة ظاهرية متطابقة بسرعة وسهولة في مناطق n مختلفة، فإنه يجب أن يكون البرنامج النصي أكثر ذكاءً.
يمكننا معالجة تعديل البرنامج النصي ليشمل متغيرًا يحدد منطقة Azure وتعديل المتغير في كل مرة نقوم فيها بتشغيل البرنامج النصي لاستهداف منطقة مختلفة. بدلاً من ذلك، يمكننا وضع اسم المنطقة في متغير بيئة والإشارة إلى متغير البيئة في البرنامج النصي، أو الأفضل من ذلك، تمرير اسم المنطقة في معلمة سطر الأوامر. لكننا سنواجه مشكلات أخرى على الفور، مثل حقيقة أنه لا يمكنك إنشاء جهازين ظاهريين أو مجموعتين من الموارد بنفس الاسم في منطقتين مختلفتين. هذا قابل للحل أيضًا. يمكننا، على سبيل المثال، إلحاق اسم المنطقة باسم VM واسم مجموعة الموارد لإنشاء أسماء فريدة لكل منطقة.
التحديات في استخدام البرمجة النصية لأتمتة موارد السحابة
النقطة المهمة هي أن البرمجة النصية لأوامر CLI السحابية توفر درجة من الأتمتة، ولكن في الممارسة العملية، يمكن أن تزداد البرامج النصية بسرعة معقدة وتصبح تمرينًا في البرمجة أكثر من الإدارة. فيما يلي أربعة أسباب تجعل البرمجة النصية وحدها ليست حلاً مثالياً لأتمتة إدارة موارد السحابة.
تعقيد
تُعدّ البرامج النصية دوماً أكثر تعقيداً من الأوامر المكافئة المكتوبة في وحدة التحكم، ويرجع ذلك في المقام الأول إلى أنها يجب أن تؤدي جميع المهام التي سيقوم بها المُشغِّل البشري وتتوقع كل حالة قد يواجهها الإنسان. بالإضافة إلى ذلك، تحتاج البرامج النصية إلى معلمات بحيث يمكن لبرنامج نصي واحد، على سبيل المثال، نشر نفس الحل لمناطق مختلفة، أو حتى يتمكن المسؤول الذي يقوم بتشغيل البرنامج النصي من تحديد أسماء الموارد والتأكد من أنها فريدة.
التكرار
تتطلّب البرامج النصية قواعد منطقية إضافية إذا كان من المفترض أن تكون مكررة، ما يعني أن تشغيل البرنامج النصي مرتين سيؤدي إلى النتيجة نفسها. ما الذي يجب أن يحدث، على سبيل المثال، إذا حاول أحد البرامج النصية إنشاء مجموعة موارد ولكن مجموعة الموارد هذه موجودة بالفعل؟ يمكن (ويجب) أن تكون النصوص البرمجية قوية بما يكفي لمراعاة ظروف مثل هذه، لكن القوة تأتي على حساب زيادة الطول والتعقيد. يعتبر التكرار مطلبًا مهمًا إذا كانت البرامج النصية لتحديث موارد السحابة الحالية بالإضافة إلى توفير موارد جديدة.
خاصية السحابة
يتطلب البرنامج النصي الموضّح في الشكل 2 تعديلاً كبيراً - في الواقع، يتطلب إعادة كتابته - للعمل مع منصات سحابية أخرى مثل AWS وGCP. يمكن كتابة البرنامج النصي لتشغيل طريقة واحدة لـ Azure، وطريقة أخرى لـ AWS، وطريقة أخرى لـ GCP (ربما تكون مدفوعة بمتغير بيئة أو معلمة سطر أوامر)، ولكن النص سيصبح بالضرورة أكثر تعقيدًا.
التحكم بالإصدار
البرامج النصية عبارة عن برامج ويجب إرسالها إلى التحكم بالإصدار تماماً مثل رمز التطبيق. بخلاف ذلك، كيف تعرف متى تم تعديل برنامج نصي، وسبب التعديل، والعودة إلى إصدار سابق إذا تعطل الإصدار الحالي؟ هذا يضيف طبقة من التعقيد الإداري بالإضافة إلى التكلفة.
التفاعل مع الأتمتة الأخرى
ومن المضاعفات الإضافية أن فائدة مثل هذه البرامج النصية تعتمد على مدى توافقها مع بعضها، وكيف تتصرف في بيئة قد تعمل فيها في نفس الوقت. عندما تتم كتابة البرامج النصية ونشرها على أساس مخصص (كما هو الحال غالبًا) دون تخطيط وتدبر مناسبين، غالبًا ما لا يكون هناك وقت أو فرصة لاختبارها في بيئة آمنة حيث لا تؤثر على الخدمات قيد الإنتاج بالفعل. هذا عندما بدأ يتضح أن التنسيق مطلوب على مستوى أعلى بكثير، لا يشمل فقط الأنظمة الأساسية لتكنولوجيا المعلومات والبنية الأساسية ولكن الأشخاص الذين يقومون بصيانتها وإدارتها.
لذا، فإن ما يُفترض أن يوفر التبسيط ينتهي في كثير من الأحيان بتوليد تعقيد أكبر. الخبر السار هو أن هذه ليست نهاية القصة. في الدرس التالي، نقدم مفهوم بيئة مركز البيانات حيث يتم التنسيق كمسألة مبدأ، ويتم توفير البنية الأساسية وتحديثها بناءً على متطلبات محددة بوضوح.
المراجع
- ويكيبيديا. لغات البرمجة النصية. https://en.wikipedia.org/wiki/Category:Scripting_languages.
اختبر معلوماتك
الملاحظات
هل كانت هذه الصفحة مفيدة؟
لا
هل تحتاج إلى مساعدة مع هذا الموضوع؟
هل تريد محاولة استخدام Ask Learn لتوضيح هذا الموضوع أو إرشادك خلاله؟