Architectural Diagram
- هذا المقال بالتعاون مع موقع أبنية
نسعى في أبنية إلى جعل تجربة بناء و إطلاق برامجنا سريعة وسلسة من خلال استخدام تقنيات وطرق تمكننا من أتمتة بناء وتطوير برامجنا بأسرع طريقة وإلغاء أي تدخل بشري. سأذكر في هذه المدونة كيفية استخدامنا لخدمات أمازون السحابية (AWS) في بناء code pipeline لأتمتة تحديث موقع وتطبيق منصة أبنية. على الرغم من أن التفاصيل التي سوف أذكرها خاصة بتحديث الموقع، إلا أن طريقة عمل تحديث التطبيق مشابه إلى حد كبير لطريقة تحديث الموقع وقد نذكر طريقة تحديثنا للتطبيق في مدونة لاحقة.
aws CodeBuild
AWS CodeBuild
يبدأ AWS CodePipeline بالعمل بواسطة webhook ترسل له عن طريق GitHub في كل مرة نقوم بعمل تغييرات جديدة للبرامج. عند تشغيل الـ pipeline الخاص بالبرنامج الذي تم تحديثه، تقوم الخدمة بتشغيل خدمة AWS CodeBuild المسؤولة عن أتمتة بناء الأكواد. تقوم خدمة AWS CodeBuild بتشغيل container يقوم بتحميل الأكواد الموجودة في GitHub وبنائها ثم حفظ ناتج البناء في S3 Bucket كما هو موضح في المخطط. خطوات بناء البرنامج من خلال الأكواد تكون موضحة في ملف buildspec.yaml. يمكننا هذا الملف من تحديد الخطوات التسلسلية التي نطلب من AWS CodeBuild اتباعها لبناء البرنامج مثل متغيرات البيئة أو environment variables، أوامر ما قبل البناء، أثناء البناء أو بعد البناء بالإضافة لعدد من الخيارات التي قد يحتاجها المطور لبناء البرنامج.
IAM
AWS Identity and Access Management (IAM)
لكي يتمكن أي شخص أو خدمة باستخدام خدمة أخرى يجب أن تكون له أو لها صلاحية لاستخدام الخدمة ويتم ذلك من خلال خدمة IAM. هناك نوعين أساسيين من المستخدمين الذين توفرهم IAM للأشخاص أو الخدمات لغرض استخدام خدمات AWS وهما IAM User وIAM User. IAM Role نوع من المستخدمين الذي يتم استخدام صلاحياته بواسطة كلمات سرية Access and Secret keys طويلة الأمد. IAM Role هي وظيفة بإمكان المستخدم أو الخدمة تقمصها لاستخدام الخدمات ويتم ذلك عن طريق قيام AWS بعمل Access key، Secret key، Session Token مؤقتاً نيابة عنا لأداء الخدمة التي نرغب بتنفيذها وتعطيل المفاتيح بعد الانتهاء. استخدام IAM Role بدلاً من IAM User يعتبر الخيار الأسلم والآمن في كل الأوقات متى كان ذلك ممكنا. يتم تحديد صلاحيات الـ IAM User أو IAM Role باستخدام IAM Policies. المثال التالي هو نموذج لـ IAM Policy يتم إضافته لـIAM Role أو IAM User لتحديد صلاحياته. المهم في هذا المثال ٣ أشياء أساسية وهي Effect، Action، Resource
Action: تحديد نوع الفعل و هنا نحدد أن الهدف هو تشغيل codebuild بواسطة StartBuild
Effect: نوع الصلاحية إما إعطاء صلاحية بـAllow أو تعطيل صلاحية بـDeny
Resource: الـresource التي يطبق عليه الصلاحية. بإمكاننا تحديد resource واحد أو مجموعة باستخدام array أو regex
لكل resource في AWS اسم خاص يتفرد به ويميزه عن أي resource في كل حسابات AWS الأخرى. يطلق على هذا الإسم Amazon Resource Name أو ARN ويحتوي بشكل أساسي اسم المنطقة الجغرافية التي يتواجد فيها الـ resource. رقم حساب و اسم الـresource نفسه.
لكي يقوم AWS CodeBuild بنقل البرنامج الذي تم الانتهاء منه إلى S3 Bucket، قمنا بإعطائه IAM Role ذو صلاحيات لنقل البرنامج إلى S3 Bucket. S3 هي الخدمة التي نستخدمها لإستضافة موقع أبنية و بإمكانكم التعرف على تفاصيل استضافتنا لموقع أبنية من خلال هذا الرابط
Lambda & Abneyah Bot
نستخدم Slack للتواصل بيننا. فالإضافة إلى سهولة استخدامه، يدعم Slack عدداً من البرامج التي نستخدمها لإدارة المنصة ومواقعنا الإلكترونية. قمنا بإنشاء Abneyah Bot فيSlack لإرسال تنبيهات لنا من ضمنها تنبيهنا حال انتهاء AWS CodeBuild من تحديث مواقعنا الإلكترونية أو التطبيق. نرسل طلب Slack webhook باستخدام AWS Lambda Function و التي تمكننا من تنفيذ - invoke -الطلب دون الحاجة لاستخدام خوادم خاصة بنا. إذ تقوم AWS بتفيذ أكواد البرمجة باستخدام خوادمها الخاصة ونقوم بدفع تكلفة تشغيل الـFunction لحين انتهائها من تنفيذ الطلب. لكي نقوم بعمل – invocation – للـ Lambda Function، أضفنا IAM policy لـIAM Role الخاص بالـ AWS CodePipeline.
حفظ المفاتيح السرية
يتطلب استخدام Slack webhook إلى إصدار Slack webhook URL خاص بنا لإرسال الرسائل والتنبيهات. ولكي نتأكد من حفظه في مكان آمن، قمنا باستخدام خدمة AWS Systems Manager Parameter Store لحفظ Slack webhook URL بطريقة مشفرة. توفر هذه الخدمة إمكانية حفظ الكلمات - strings - على هيئة key-value pair ويستطيع المستخدم تحديد ما إذا كان يريد حفظ الـكلمات مشفرة أو غير مشفرة. تعتمد خدمة AWS Systems Manager Parameter Store في تشفير البيانات على خدمة AWS Key-Management Service المسؤولة عن إصدار وإدارة مفاتيح التشفير والتي تدعم تشفير عدد كبير من خدمات أمازون السحابية.
خدمة AWS Systems Manager Parameter Store ليست الخدمة الوحيدة التي تقدمها AWS لحماية الكلمات السرية الخاصة بالمستخدمين إذ أن خدمة AWS Secret Manager تقوم بنفس الوظيفة بالإضافة إلى وظائف متخصصة أكثر مثل إنشاء كلمات سرية بالنيابة عن المستخدم و أتمتة تدوير الكلمات السرية والتي قد تكون من متطلبات الإمتثال الأمني - Security Compliance – بالقيام بتدوير الكلمات السرية بشكل دوري. تدعم هذه الخدمة أتمتة تدوير الكلمات السرية لبعض من قواعد البيانات التي توفرها AWS مثل AWS RDS، AWS RedShift.
فضلنا استخدام AWS Systems Manager Parameter Store على AWS Secret Manager لسبب إقتصادي بحت حيث AWS Systems Manager Parameter Store خدمة مجانية في المقابل استخدام خدمة AWS Secret Manager تكون بمقابل بسيط جداً لكل كلمة سرية تديرها AWS.
! عن أبنية
- هذا المقال بالتعاون مع موقع أبنية
أبنية هي منصة رقمية تجمع كل المختصين في قطاع البناء و العمارة
رابط المنصة
abneyah.com
