دينامو دي بي تيارات مع لامدا

Dynamw Dy By Tyarat M Lamda



DynamoDB Streams هي ميزة في Amazon DynamoDB تتيح لك الحصول على تدفق فوري للتغييرات أو تغييرات البيانات التي يتم إجراؤها على جداول DynamoDB الخاصة بك. يمكنك استخدام هذه الميزة لإنشاء التطبيقات التي تتفاعل مع تغييرات البيانات في جداول DynamoDB مثل تحديث ذاكرات التخزين المؤقت وإرسال الإشعارات.

بالطبع ، يمكنك أيضًا استخدام DynamoDB Streams لتشغيل العمليات النهائية ووظائف AWS Lambda. Lambda ، بحكم تعريفها ، هي خدمة حوسبة بدون خادم تقوم بتشغيل التعليمات البرمجية الخاصة بك استجابة للأحداث وتدير موارد الحوسبة تلقائيًا نيابة عنك.

يمكنك استخدام Lambda لكتابة الكود في Node.js أو Python أو Java أو C # لمعالجة سجلات الدفق واتخاذ الإجراءات المناسبة. تتمثل الميزة الرئيسية لدمج DynamoDB Streams مع Lambda في أن Lambda يسمح لك بتشغيل الخدمات المدعومة أو أكواد التطبيق دون الحاجة إلى الإدارة.







كيفية استخدام AWS DynamoDB Streams مع Lambda

في حين أنه من الممكن إنشاء وظيفة Lambda التي تستهلك الأحداث والأحداث من DynamoDB Stream ، إلا أن العملية يمكن أن تكون مهمة للغاية ، خاصة في محاولتك الأولى. الخطوات التالية ستساعد:



الخطوة 1: تأكد من أن نظامك يلبي المتطلبات الأساسية

لن ينجح هذا الإجراء إلا إذا كنت تعرف عمليات وعمليات Lambda الأساسية. وبالتالي ، يجب أن يكون هذا هو أول ما عليك التأكد من أن فهمك لـ Lambda أعلى من المتوسط.



الشرط الثاني الذي يستحق النظر هو تأكيد إصدار AWS لنظامك. يمكنك استخدام الأمر التالي:





الإصدار

يجب أن تبدو نتيجة الأمر المقدم كما يلي:

AWS-CLI / 2 .x.x Python / 3 .x.x لينكس / 4 .x.x-xxx-std botocore / 2 .x.x

يحتوي نموذج الاستجابة المحدد على الإصدار المثبت من AWS CLI ( AWS-CLI / 2.x.x. ) ، إصدار بايثون ( Python / 3.x.x ) ونظام التشغيل ( Linux / 4.x.x-xxx-std ). يحدد الجزء الأخير من الرد إصدار مكتبة Botocore الذي يعمل عليه AWS CLI ( botocore / 2.x.x ).



لذلك ، سينتهي بك الأمر بشيء مثل هذا:

الخطوة الثانية: إنشاء دور تنفيذي

تتمثل الخطوة التالية في إنشاء دور تنفيذي في AWS CLI. دور التنفيذ هو دور AWS Identity and Access Management (IAM) الذي تتولاه خدمة AWS لأداء المهام نيابةً عنك. يمنحك الوصول إلى موارد AWS التي ستحتاجها على طول الطريق.

يمكنك إنشاء دور باستخدام الأمر التالي:

أوس أنا خلق دور \

- اسم الدور LambdaDynamoDBExecutionRole \

--assume-role-policy-document file: //assume-role-policy.json \

--وصف 'AWSLambdaDynamoDBExecutionRole' \

- اسم الخدمة lambda.amazonaws.com

الأمر السابق هو أمر AWS CLI لإنشاء دور. يمكنك أيضًا استخدام Amazon Management Console لإنشاء دور. بمجرد وصولك إلى وحدة تحكم IAM ، افتح ملف الأدوار الصفحة وانقر فوق خلق دور زر.

انتقل إلى إدخال ما يلي:

  • الكيان الموثوق به: Lambda
  • اسم الدور: lambda-dynamodb-role
  • الأذونات: AWSLambdaDynamoDBExecutionRole

يمكنك أيضًا استخدام Python عن طريق تثبيت AWS SDK لـ Python أولاً:

نقطة تثبيت boto3

الخطوة 3: تفعيل DynamoDB Streams على طاولتك

تحتاج إلى تمكين DynamoDB Streams على طاولتك. في هذا الرسم التوضيحي ، نستخدم Boto3 و AWS SDK للغة Python. سيساعد الأمر التالي:

استيراد boto3

# الاتصال بخدمة DynamoDB
dynamodb = boto3.client ( 'دينامودب' )

# تمكين تيارات DynamoDB على طاولة 'my-table'
استجابة = dynamodb.update_table (
TableName = 'طاولتي' و
StreamSpecification = {
'StreamEnabled' : حقيقي،
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# تحقق من الاستجابة للتأكد من تمكين الدفق بنجاح
إذا كان الرد [ 'مواصفات البث' ] [ 'StreamEnabled' ]:
مطبعة( 'تم تمكين دفق DynamoDB بنجاح' )
آخر:
مطبعة( 'خطأ في تمكين دفق DynamoDB' )

يعمل هذا الرمز على تمكين دفق DynamoDB على جدول 'mytable' الذي يبث الصور الجديدة والقديمة للعناصر بمجرد حدوث أي تغييرات. يمكنك اختيار دفق الصور الجديدة فقط بمجرد StreamViewType إلى 'NEW_IMAGE'.

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

الخطوة 4: إنشاء وظيفة Lambda

الخطوة التالية هي إنشاء وظيفة Lambda التي تقوم بتشغيل دفق DynamoDB. يجب أن تساعد الخطوات التالية:

  • افتح وحدة تحكم AWS Lambda وانقر فوق علامة التبويب 'إنشاء وظيفة'. في صفحة 'إنشاء وظيفة' ، اختر 'مؤلف من البداية' وأدخل اسمًا لوظيفتك. تحتاج أيضًا إلى إدخال وقت التشغيل في هذه المرحلة. اخترنا Python لهذا الرسم التوضيحي.
  • ضمن 'اختيار أو إنشاء دور تنفيذي' ، حدد 'إنشاء دور جديد باستخدام أذونات Lambda الأساسية' لإنشاء دور IAM مع الأذونات اللازمة لوظيفة Lambda الخاصة بك.
  • انقر فوق الزر 'إنشاء وظيفة' لإنشاء وظيفة Lambda الخاصة بك.
  • في صفحة 'التكوين' لوظيفتك ، قم بالتمرير لأسفل إلى قسم 'المصمم' وانقر فوق علامة التبويب 'إضافة مشغل'.
  • في مربع 'تهيئة المشغل' الذي يظهر ، حدد 'DynamoDB' من القائمة المنسدلة 'Trigger'.
  • حدد جدول DynamoDB الذي تريد استخدامه لتشغيل الوظيفة. بمجرد الانتهاء من ذلك ، اختر ما إذا كنت تريد تشغيل الوظيفة في جميع تحديثات الجدول أو على تحديثات محددة فقط (مثل تحديثات أعمدة معينة).
  • انقر فوق الزر 'إضافة' لإنشاء الزناد.
  • في محرر 'كود الوظيفة' ، اكتب كود Python لوظيفتك. يمكنك استخدام كائن الحدث الذي تم تمريره إلى وظيفتك للوصول إلى البيانات التي تقوم بتشغيل الوظيفة.
  • انقر فوق الزر 'حفظ' لحفظ الوظيفة.

هذا كل ما يحدث عند إنشاء وظيفة Lambda! يتم الآن تشغيل وظيفتك متى كانت هناك تحديثات لجدول DynamoDB المحدد.

في ما يلي مثال على دالة بايثون بسيطة يمكن أن يطلقها دفق DynamoDB:

def lambda_handler (حدث ، سياق):

للتسجيل في الحدث [ 'السجلات' ]:

طباعة (سجل [ 'دينامودب' ] [ 'صورة جديدة' ])

تتكرر هذه الوظيفة من خلال السجلات في كائن الحدث وتطبع الصورة الجديدة للعنصر في جدول DynamoDB الذي يقوم بتشغيل الوظيفة.

الخطوة الخامسة: اختبر وظيفة Lambda

لاختبار وظيفة Lambda التي يمكن أن يطلقها دفق DynamoDB ، يمكنك استخدام boto3 مكتبة للوصول إلى DynamoDB API و يستحضر طريقة لامدا العميل لتشغيل الوظيفة.

فيما يلي مثال على كيفية القيام بذلك:

استيراد boto3

# الاتصال بخدمة DynamoDB
dynamodb = boto3.client ( 'دينامودب' )

# الاتصال بخدمة Lambda
lambda_client = boto3.client ( 'لامدا' )

# أدخل عنصرًا في جدول 'طاولتي'
استجابة = dynamodb.put_item (
TableName = 'طاولتي' و
العنصر = {
'هوية شخصية' : { 'ن' : '123' } ،
'اسم' : { 'س' : 'جويل أوستن} ،
'
عمر ': {' ن ':' 3. 4 '}
}
)

# تحقق من الرد للتأكد من إدراج العنصر بنجاح
إذا كان الرد ['
الاستجابة البيانات الوصفية '] [' HTTPStatusCode '] == 200:
طباعة ('تم إدراج العنصر بنجاح')
آخر:
طباعة ('خطأ في إدراج العنصر')

# تشغيل وظيفة Lambda المشتركة في '
طاولتي ' الطاولة
الاستجابة = lambda_client.invoke (
FunctionName = '
وظيفتي
نوع الاحتجاج = '
حدث
نوع السجل = '
ذيل
الحمولة = '
{ 'السجلات' : [{ 'دينامودب' : { 'صورة جديدة' : { 'هوية شخصية' : { 'ن' : '123' } ، 'اسم' : { 'س' : 'جويل أوستن' } ، 'عمر' : { 'ن' : '3. 4' }}}}]} '
)

# تحقق من الاستجابة للتأكد من تشغيل الوظيفة بنجاح
إذا كان الرد ['
رمز الحالة '] == 202:
print ('تم تشغيل وظيفة Lambda بنجاح')
آخر:
طباعة ('خطأ في تشغيل وظيفة Lambda')

يقوم هذا الرمز أولاً بإدراج عنصر في ملف طاولتي الجدول ثم يقوم بتشغيل وظيفتي دالة Lambda عن طريق إرسال حمولة حدث نموذجية إلى الوظيفة باستخدام ملف يستحضر طريقة. تحاكي حمولة الحدث حدث دفق DynamoDB الذي يتضمن الصورة الجديدة للعنصر الذي تم إدراجه للتو.

يمكنك بعد ذلك التحقق من سجلات وظيفة Lambda لمعرفة ما إذا كانت قد نجحت في تشغيل بيانات الحدث ومعالجتها.

استنتاج

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