غراء AWS هي خدمة تكامل بيانات بدون خادم تجعل من السهل اكتشاف وإعداد ونقل ودمج البيانات من مصادر متعددة للتحليلات والتعلم الآلي (ML) وتطوير التطبيقات.
غالبًا ما يتعين على عملاء AWS Glue تلبية متطلبات الأمان الصارمة، والتي تتضمن أحيانًا تأمين اتصال الشبكة المسموح به للمهمة، أو التشغيل داخل VPC محدد للوصول إلى خدمة أخرى. للتشغيل داخل VPC، يجب تعيين المهام إلى شبكة فرعية واحدة، ولكن الشبكة الفرعية الأكثر ملاءمة يمكن أن تتغير بمرور الوقت (على سبيل المثال، بناءً على الاستخدام والتوفر)، لذلك قد تفضل اتخاذ هذا القرار في وقت التشغيل، بناءً على على استراتيجيتك الخاصة.
تدفقات عمل أمازون المدارة لتدفق أباتشي (Amazon MWAA) هي خدمة AWS لتشغيل مسارات عمل Airflow المُدارة، والتي تسمح بكتابة منطق مخصص لتنسيق كيفية تشغيل المهام مثل وظائف AWS Glue.
في هذا المنشور، نعرض كيفية تشغيل مهمة AWS Glue كجزء من سير عمل Airflow، مع تحديد ديناميكي قابل للتكوين لشبكة VPC الفرعية المعينة للمهمة في وقت التشغيل.
حل نظرة عامة
للتشغيل داخل VPC، يجب تعيين مهمة AWS Glue على الأقل لاتصال يتضمن تكوين الشبكة. يسمح أي اتصال بتحديد VPC، والشبكة الفرعية، ومجموعة الأمان، ولكن للتبسيط، يستخدم هذا المنشور اتصالات من النوع: NETWORK، والتي تحدد فقط تكوين الشبكة ولا تتضمن أنظمة خارجية.
إذا كانت المهمة تحتوي على شبكة فرعية ثابتة تم تعيينها بواسطة اتصال واحد، في حالة انقطاع الخدمة على مناطق التوفر أو إذا لم تكن الشبكة الفرعية متوفرة لأسباب أخرى، فلا يمكن تشغيل المهمة. علاوة على ذلك، تتطلب كل عقدة (سائق أو عامل) في مهمة AWS Glue عنوان IP معينًا من الشبكة الفرعية. عند تشغيل العديد من المهام الكبيرة بشكل متزامن، قد يؤدي ذلك إلى نقص في عنوان IP وتشغيل المهمة بعدد أقل من العقد عما هو مقصود أو عدم تشغيلها على الإطلاق.
تسمح مهام استخراج وتحويل وتحميل AWS Glue (ETL) بتحديد اتصالات متعددة باستخدام تكوينات شبكة متعددة. ومع ذلك، ستحاول المهمة دائمًا استخدام تكوين شبكة الاتصالات بالترتيب المدرج واختيار أول تكوين يجتاز فحوصات طبية ولديه عنواني IP على الأقل لبدء المهمة، وهو ما قد لا يكون الخيار الأمثل.
باستخدام هذا الحل، يمكنك تحسين هذا السلوك وتخصيصه عن طريق إعادة ترتيب الاتصالات ديناميكيًا وتحديد أولوية التحديد. إذا كانت هناك حاجة إلى إعادة المحاولة، فسيتم إعادة ترتيب أولويات الاتصالات مرة أخرى بناءً على الإستراتيجية، لأن الظروف ربما تكون قد تغيرت منذ آخر تشغيل.
ونتيجة لذلك، فهو يساعد على منع فشل المهمة في التشغيل أو التشغيل تحت السعة بسبب نقص عنوان IP للشبكة الفرعية أو حتى انقطاع الخدمة، مع تلبية متطلبات أمان الشبكة والاتصال.
يوضح الرسم البياني التالي بنية الحل.
المتطلبات الأساسية المسبقة
لاتباع خطوات المنشور، تحتاج إلى مستخدم يمكنه تسجيل الدخول إلى وحدة تحكم إدارة AWS ولديه إذن للوصول إلى Amazon MWAA، سحابة أمازون الافتراضية الخاصة (Amazon VPC)، وAWS Glue. تحتاج منطقة AWS التي تختار نشر الحل فيها إلى القدرة على إنشاء VPC وعناوين IP مرنة. الحصة الإقليمية الافتراضية لكلا النوعين من الموارد هي خمسة، لذا قد تحتاج إلى طلب زيادة عبر وحدة التحكم.
أنت أيضًا بحاجة إلى ملف إدارة الهوية والوصول AWS دور (IAM) مناسب لتشغيل وظائف AWS Glue إذا لم يكن لديك واحدة بالفعل. للحصول على التعليمات، راجع أنشئ دور IAM لـ AWS Glue.
نشر بيئة Airflow وVPC
أولاً، ستنشر بيئة Airflow جديدة، بما في ذلك إنشاء VPC جديد مع شبكتين فرعيتين عامتين وشبكتين خاصتين. وذلك لأن Amazon MWAA تتطلب التسامح مع فشل منطقة توافر الخدمات، لذلك يجب تشغيلها على شبكتين فرعيتين في منطقتي توافر خدمات مختلفتين في المنطقة. يتم استخدام الشبكات الفرعية العامة حتى تتمكن بوابة NAT من توفير الوصول إلى الإنترنت للشبكات الفرعية الخاصة.
أكمل الخطوات التالية:
- خلق تكوين سحابة AWS القالب في جهاز الكمبيوتر الخاص بك عن طريق نسخ القالب مما يلي دليل البدء السريع في ملف نصي محلي.
- في وحدة تحكم AWS CloudFormation ، اختر كومات في جزء التنقل.
- اختار إنشاء مكدس مع الخيار بموارد جديدة (قياسي).
- اختار قم بتحميل ملف قالب واختر ملف القالب المحلي.
- اختار التالى.
- أكمل خطوات الإعداد، وأدخل اسمًا للبيئة، واترك باقي المعلمات كإعداد افتراضي.
- في الخطوة الأخيرة، أقر بأنه سيتم إنشاء الموارد واختيارها تقدم.
يمكن أن يستغرق الإنشاء من 20 إلى 30 دقيقة، حتى تتغير حالة المكدس إلى CREATE_COMPLETE
.
المورد الذي سيستغرق معظم الوقت هو بيئة Airflow. أثناء إنشائه، يمكنك متابعة الخطوات التالية، حتى تتم مطالبتك بفتح واجهة مستخدم Airflow.
- على المكدس الموارد علامة التبويب، لاحظ معرفات VPC والشبكتين الفرعيتين الخاصتين (
PrivateSubnet1
وPrivateSubnet2
)، لاستخدامه في الخطوة التالية.
إنشاء اتصالات AWS Glue
ينشر قالب CloudFormation شبكتين فرعيتين خاصتين. في هذه الخطوة، يمكنك إنشاء اتصال AWS Glue بكل منها حتى يمكن تشغيل مهام AWS Glue فيها. أضافت Amazon MWAA مؤخرًا القدرة على تشغيل مجموعة Airflow على VPCs المشتركة، مما يقلل التكلفة ويبسط إدارة الشبكة. لمزيد من المعلومات، راجع تقديم دعم VPC المشترك على Amazon MWAA.
أكمل الخطوات التالية لإنشاء الاتصالات:
- في وحدة تحكم AWS Glue ، اختر اتصالات البيانات في جزء التنقل.
- اختار إنشاء اتصال.
- اختار شبكة كمصدر للبيانات.
- اختر VPC والشبكة الفرعية الخاصة (
PrivateSubnet1
) تم إنشاؤها بواسطة مكدس CloudFormation. - استخدم مجموعة الأمان الافتراضية.
- اختار التالى.
- للحصول على اسم الاتصال، أدخل
MWAA-Glue-Blog-Subnet1
. - راجع التفاصيل وأكمل الإنشاء.
- كرر هذه الخطوات باستخدام
PrivateSubnet2
وتسمية الاتصالMWAA-Glue-Blog-Subnet2
.
قم بإنشاء مهمة AWS Glue
الآن يمكنك إنشاء مهمة AWS Glue التي سيتم تشغيلها لاحقًا بواسطة سير عمل Airflow. تستخدم المهمة الاتصالات التي تم إنشاؤها في القسم السابق، ولكن بدلاً من تعيينها مباشرةً على الوظيفة، كما تفعل عادةً، في هذا السيناريو تترك قائمة اتصالات المهمة فارغة وتسمح لسير العمل بتحديد أي منها سيتم استخدامه في وقت التشغيل.
البرنامج النصي للمهمة في هذه الحالة ليس مهمًا، والغرض منه فقط هو توضيح المهمة التي تم تشغيلها في إحدى الشبكات الفرعية، اعتمادًا على الاتصال.
- في وحدة تحكم AWS Glue ، اختر وظائف ETL في جزء التنقل ، ثم اختر محرر النص.
- اترك الخيارات الافتراضية (Spark Engine و ابدأ بانتعاش) و اختار إنشاء البرنامج النصي.
- استبدل البرنامج النصي للعنصر النائب بكود Python التالي:
- إعادة تسمية المهمة إلى
AirflowBlogJob
. - على تفاصيل الوظيفة علامة التبويب ، لـ دور IAM، اختر أي دور وأدخل 2 لعدد العمال (للتوفير فقط).
- احفظ هذه التغييرات حتى يتم إنشاء الوظيفة.
امنح أذونات AWS Glue لدور بيئة Airflow
يوفر الدور الذي تم إنشاؤه لـ Airflow بواسطة قالب CloudFormation الأذونات الأساسية لتشغيل مهام سير العمل ولكن ليس للتفاعل مع الخدمات الأخرى مثل AWS Glue. في مشروع الإنتاج، يمكنك تحديد القوالب الخاصة بك باستخدام هذه الأذونات الإضافية، ولكن في هذا المنشور، وللتبسيط، يمكنك إضافة الأذونات الإضافية كسياسة مضمنة. أكمل الخطوات التالية:
- في وحدة تحكم IAM ، اختر الأدوار في جزء التنقل.
- حدد الدور الذي أنشأه القالب؛ سيبدأ بالاسم الذي قمت بتعيينه لمكدس CloudFormation ثم
-MwaaExecutionRole-
. - في صفحة تفاصيل الدور، على أضف أذونات القائمة، اختر إنشاء سياسة مضمنة.
- قم بالتبديل من الوضع المرئي إلى الوضع JSON وأدخل JSON التالي في مربع النص. يفترض أن دور AWS Glue الذي قمت به يتبع التقليد الذي بدأت به
AWSGlueServiceRole
. لتعزيز الأمان، يمكنك استبدال مورد حرف البدل علىec2:DescribeSubnets
إذن باستخدام ARNs للشبكتين الفرعيتين الخاصتين من مكدس CloudFormation. - اختار التالى.
- أدخل
GlueRelatedPermissions
كاسم السياسة وإكمال الإنشاء.
في هذا المثال، نستخدم مهمة البرنامج النصي ETL؛ بالنسبة للمهمة المرئية، نظرًا لأنها تنشئ البرنامج النصي تلقائيًا عند الحفظ، فإن دور Airflow سيحتاج إلى إذن للكتابة إلى مسار البرنامج النصي الذي تم تكوينه على خدمة تخزين أمازون البسيطة (أمازون S3).
إنشاء تدفق الهواء DAG
يعتمد سير عمل Airflow على الرسم البياني الدائري المباشر (DAG)، والذي يتم تعريفه بواسطة ملف Python الذي يحدد برمجيًا المهام المختلفة المعنية وترابطاتها المتبادلة. أكمل البرامج النصية التالية لإنشاء DAG:
- قم بإنشاء ملف محلي باسم
glue_job_dag.py
باستخدام محرر نصوص.
في كل خطوة من الخطوات التالية، نقدم مقتطفًا برمجيًا لإدخاله في الملف وشرحًا لما يحدث.
- يضيف المقتطف التالي استيرادات وحدات Python المطلوبة. تم بالفعل تثبيت الوحدات على Airflow؛ إذا لم يكن الأمر كذلك، فستحتاج إلى استخدام ملف
requirements.txt
ملف للإشارة إلى Airflow التي سيتم تثبيت الوحدات. كما أنه يحدد أيضًا عملاء Boto3 الذين سيستخدمهم الكود لاحقًا. افتراضيًا، سيستخدمون نفس الدور والمنطقة مثل Airflow، ولهذا السبب قمت بالإعداد قبل الدور بالأذونات الإضافية المطلوبة. - يضيف المقتطف التالي ثلاث وظائف لتنفيذ استراتيجية ترتيب الاتصال، والتي تحدد كيفية إعادة ترتيب الاتصالات المعطاة لتحديد أولويتها. هذا مجرد مثال؛ يمكنك إنشاء التعليمات البرمجية المخصصة الخاصة بك لتنفيذ المنطق الخاص بك، وفقًا لاحتياجاتك. يتحقق الكود أولاً من عناوين IP المتاحة على كل شبكة اتصال فرعية ويفصل بين العناوين التي تحتوي على عدد كافٍ من عناوين IP المتاحة لتشغيل المهمة بكامل طاقتها وتلك التي يمكن استخدامها لأن لديها عنواني IP متاحين على الأقل، وهو الحد الأدنى الذي تحتاجه المهمة يبدأ. إذا تم تعيين الإستراتيجية على
random
، سيتم ترتيب الترتيب بشكل عشوائي داخل كل مجموعة من مجموعات الاتصال الموصوفة مسبقًا وإضافة أي اتصالات أخرى. إذا كانت الإستراتيجيةcapacity
، سيتم ترتيبها من معظم عناوين IP المجانية إلى الأقل. - يقوم التعليمة البرمجية التالية بإنشاء DAG نفسها باستخدام مهمة تشغيل التشغيل، والتي تقوم بتحديث الوظيفة بأمر الاتصال المحدد بواسطة الإستراتيجية، وتشغيلها، وانتظار النتائج. يأتي اسم الوظيفة والاتصالات والاستراتيجية من متغيرات Airflow، لذلك يمكن تهيئتها وتحديثها بسهولة. يحتوي على محاولتين مع تكوين التراجع الأسي، لذلك إذا فشلت المهام، فسيتم تكرار المهمة بأكملها بما في ذلك اختيار الاتصال. ربما يكون الخيار الأفضل الآن هو اتصال آخر، أو أن الشبكة الفرعية التي تم اختيارها عشوائيًا مسبقًا موجودة في منطقة توافر الخدمات التي تعاني حاليًا من انقطاع الخدمة، ومن خلال اختيار شبكة مختلفة، يمكنها التعافي.
إنشاء سير عمل تدفق الهواء
يمكنك الآن إنشاء سير عمل يستدعي مهمة AWS Glue التي أنشأتها للتو:
- في وحدة تحكم Amazon S3، حدد موقع الحاوية التي تم إنشاؤها بواسطة قالب CloudFormation، والتي سيكون لها اسم يبدأ باسم المكدس ثم
-environmentbucket-
(فمثلا،myairflowstack-environmentbucket-ap1qks3nvvr4
). - داخل هذا الدلو، قم بإنشاء مجلد يسمى
dags
وداخل هذا المجلد، قم بتحميل ملف DAGglue_job_dag.py
التي قمت بإنشائها في القسم السابق. - في وحدة تحكم Amazon MWAA، انتقل إلى البيئة التي قمت بنشرها باستخدام حزمة CloudFormation.
إذا لم تكن الحالة بعد متوفرة ، انتظر حتى يصل إلى تلك الحالة. لن يستغرق الأمر أكثر من 30 دقيقة منذ نشر مكدس CloudFormation.
- اختر رابط البيئة الموجود في الجدول لرؤية تفاصيل البيئة.
تم تكوينه لالتقاط DAGs من المجموعة والمجلد الذي استخدمته في الخطوات السابقة. سوف يقوم Airflow بمراقبة هذا المجلد لإجراء التغييرات.
- اختار افتح واجهة مستخدم تدفق الهواء لفتح علامة تبويب جديدة للوصول إلى واجهة مستخدم Airflow، باستخدام أمان IAM المدمج لتسجيل دخولك.
إذا كانت هناك أي مشكلة في ملف DAG الذي قمت بإنشائه، فسيعرض خطأ في أعلى الصفحة يشير إلى الأسطر المتأثرة. وفي هذه الحالة، راجع الخطوات وقم بالتحميل مرة أخرى. وبعد بضع ثوانٍ، سيتم تحليله وتحديث شعار الخطأ أو إزالته.
- على إداري القائمة، اختر المتغيرات.
- أضف ثلاثة متغيرات بالمفاتيح والقيم التالية:
- القفل
glue_job_dag.glue_connections
مع القيمةMWAA-Glue-Blog-Subnet1,MWAA-Glue-Blog-Subnet2
. - القفل
glue_job_dag.glue_job_name
مع القيمةAirflowBlogJob
. - القفل
glue_job_dag.strategy
مع القيمةcapacity
.
- القفل
قم بتشغيل المهمة باستخدام تعيين شبكة فرعية ديناميكية
أنت الآن جاهز لتشغيل سير العمل ورؤية الإستراتيجية تعيد ترتيب الاتصالات ديناميكيًا.
- في واجهة مستخدم Airflow ، اختر DAGsوعلى الصف
glue_job_dag
، اختر أيقونة التشغيل. - على تصفح القائمة، اختر حالات المهمة.
- في جدول المثيلات، قم بالتمرير لليمين لعرض
Log Url
واختر الأيقونة الموجودة عليه لفتح السجل.
سيتم تحديث السجل أثناء تشغيل المهمة؛ يمكنك تحديد موقع السطر الذي يبدأ بـ "تشغيل مهمة اللصق مع أمر الاتصال:" والسطور السابقة التي توضح تفاصيل عناوين IP الخاصة بالاتصال والفئة المخصصة. في حالة حدوث خطأ، سترى التفاصيل في هذا السجل.
- في وحدة تحكم AWS Glue ، اختر وظائف ETL في جزء التنقل، ثم اختر الوظيفة
AirflowBlogJob
. - على أشواط علامة التبويب، اختر مثيل التشغيل، ثم سجلات الإخراج الرابط، والذي سيفتح علامة تبويب جديدة.
- في علامة التبويب الجديدة، استخدم رابط دفق السجل لفتحه.
سيعرض عنوان IP الذي تم تعيينه للسائق والشبكة الفرعية التي ينتمي إليها، والتي يجب أن تتطابق مع الاتصال المشار إليه بواسطة Airflow (إذا لم يتم عرض السجل، فاختر سيرة ذاتية لذلك يتم تحديثه بمجرد توفره).
- في واجهة مستخدم Airflow، قم بتحرير متغير Airflow
glue_job_dag.strategy
لتعيينه علىrandom
. - قم بتشغيل DAG عدة مرات وشاهد كيف يتغير الترتيب.
تنظيف
إذا لم تعد بحاجة إلى النشر، فاحذف الموارد لتجنب أي رسوم إضافية:
- احذف نص Python الذي قمت بتحميله، بحيث يمكن حذف حاوية S3 تلقائيًا في الخطوة التالية.
- احذف مكدس CloudFormation.
- احذف مهمة AWS Glue.
- احذف البرنامج النصي الذي حفظته المهمة في Amazon S3.
- احذف الاتصالات التي قمت بإنشائها كجزء من هذا المنشور.
وفي الختام
في هذا المنشور، أظهرنا كيف يمكن لـ AWS Glue وAmazon MWAA العمل معًا لإنشاء مسارات عمل مخصصة أكثر تقدمًا، مع تقليل النفقات التشغيلية والإدارية. يمنحك هذا الحل مزيدًا من التحكم في كيفية تشغيل مهمة AWS Glue لتلبية متطلبات التشغيل أو الشبكة أو الأمان الخاصة.
يمكنك نشر بيئة Amazon MWAA الخاصة بك بطرق متعددة، مثل قالب المستخدمة في هذا المنشور، على وحدة تحكم Amazon MWAA، أو باستخدام AWS CLI. يمكنك أيضًا تنفيذ إستراتيجياتك الخاصة لتنسيق مهام AWS Glue، استنادًا إلى بنية الشبكة ومتطلباتها (على سبيل المثال، لتشغيل المهمة بشكل أقرب إلى البيانات عندما يكون ذلك ممكنًا).
عن المؤلفين
مايكل جرينشتاين هو مهندس حلول متخصص في التحليلات للقطاع العام.
جونزالو هيريروس هو كبير مهندسي البيانات الضخمة في فريق AWS Glue.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- PlatoData.Network Vertical Generative Ai. تمكين نفسك. الوصول هنا.
- أفلاطونايستريم. ذكاء Web3. تضخيم المعرفة. الوصول هنا.
- أفلاطون كربون، كلينتك ، الطاقة، بيئة، شمسي، إدارة المخلفات. الوصول هنا.
- أفلاطون هيلث. التكنولوجيا الحيوية وذكاء التجارب السريرية. الوصول هنا.
- المصدر https://aws.amazon.com/blogs/big-data/combine-aws-glue-and-amazon-mwaa-to-build-advanced-vpc-selection-and-failover-strategies/