كيفية فهرسة محتوى Amazon DynamoDB الجديد والحالي باستخدام خدمة Amazon Elasticsearch.

الرسم البياني المحرز في cloudcraft.co

ما لدي: جدول Amazon DynamoDB "العناصر" مع حوالي 49 كيلو بايت من الكائنات.

ما أحتاج إليه: خدمة Amazon Elasticsearch مع جميع العناصر الموجودة في طاولتي وجميع العناصر الجديدة الواردة.

ما سأستخدمه: خدمة Amazon Elasticsearch و Amazon DynamoDB و Amazon Lambda و Python.

في البداية ، يجب عليك إنشاء دفق نوع عرض صورة لجدولك (خدمات> DynamoDB> جداول> حدد الجدول الخاص بك> علامة تبويب نظرة عامة).

نسخ ARN من الدفق ، ستحتاج إليها لاحقًا.

انتقل إلى خدمة Elasticsearch (الخدمات> خدمة Elasticsearch) وقم بإنشاء مجال جديد. حدد معلمات مثل اسم نطاق Elasticsearch أو الكتلة أو تكوين العقدة / التخزين لاحتياجاتك.

أقوم بإعداد سياسة الوصول إلى المجال كعامة فقط للاختبار ، يجب عليك اختيار خيار أكثر أمانًا.

انسخ ARN للنطاق ، ستحتاج إليه لاحقًا.

بعد ذلك ، يجب عليك إنشاء دور جديد وتحديد سياسات الوصول له ، للقيام بذلك انتقل إلى الأدوار (الخدمات> IAM> الأدوار) وإنشاء دور جديد.

حدد نوع دور خدمة AWS وخدمة Lambda ، كخدمة ، التي ستستخدم هذا الدور.

حدد AWSLambdaBasicExecutionRole كسياسة إذن وانقر فوق "التالي".

أعطِ اسمًا لدورك ، في حالتي ، dynamodb-to-es.

حان الوقت الآن لإضافة سياسات إلى هذا الدور ، وهي ضرورية للوصول إلى مجال قاعدة البيانات والبث ومجال Elasticsearch.

انقر على "إضافة سياسة مضمنة" وحدد "سياسة مخصصة".

أضف Access-to-the-DynamoDB (استبدل المورد بجدولك ARN ، يمكنك العثور عليه في تفاصيل الجدول):

يجب أن تبدو هذه:

أضف Access-to-the-DynamoDB-stream (استبدل المورد بجدولك ARN ، الذي ذكرناه عند إنشاء الدفق):

يجب أن تبدو هذه:

أضف Lambda-to-Amazon-ES (استبدل المورد بجدولك ARN ، الذي ذكرناه عند إنشاء مجال Elasticsearch):

لاحظ ، هناك * بعد اسم المجال.

يجب أن تبدو هذه:

الخطوة التالية هي إنشاء أمازون لامدا. إنشاء وظيفة جديدة من الصفر (خدمات> لامدا).

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

حدد اسمًا لعملك وحدد Python 2.7 وقت التشغيل.

في منطقة رمز Lambda ، قم بلصق البرنامج النصي dynamodb-to-es.py وحدد نقطة نهاية مجال Elasticsearch.

حدد dynamodb-to-بدور كدور موجود.

في القائمة الفرعية الإعدادات المتقدمة ، يمكنك تحديد مهلة أكبر إذا كانت سجلاتك ضخمة أو ستضع أكثر من سجل في وقت واحد.

يمكنك الآن إدراج / تحرير بعض العناصر في الجدول الخاص بك ، ثم الانتقال إلى صفحة المجال للتأكد من إنشاء فهارس.

في الأساس ، يمكنك تقديم طلبات إلى Elasticsearch ، ولكن لن يكون هناك سوى عناصر ، قمت بإضافتها / حذفها بعد إنشاء خدمة Elasticsearch و Lambda.

مثال على الطلب مع استعلام فارغ:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search؟size=10&pretty=true&q=*

لاحظ أنه يجب عليك تحديد فهرس الجدول بعد نقطة النهاية.

الجزء الثاني من هذا المنشور يدور حول كيفية إضافة محتوى موجود مسبقًا إلى خدمة Elasticsearch من DynamoDB.

انتقل إلى الأدوار (الخدمات> IAM> الأدوار) وقم بإنشاء سياسة جديدة. تعيين أذونات جديدة كما في الصور رفع الصوت عاليا:

في Amazon Resource Field ، ضع ARN لوظيفة Lambda الخاصة بك:

انسخ هذه السياسة ، وسوف تحتاجها للحصول على أذونات المستخدم:

انتقل إلى المستخدم الذي سيتم تنفيذ البرنامج النصي (خدمات> IAM> المستخدمون) وإضافة سياسة مضمّنة مخصصة لأن هذا (لا تنسَ تغيير الموارد لك):

إذا لم يكن لديك مفتاح وصول - قم بإنشائه:

انسخ معرّف مفتاح الوصول ومفتاح الوصول السري في مكان آمن:

قم بزيادة وحدات سعة القراءة لجدولك (إنه مخصص فقط لوقت تنفيذ البرنامج النصي).

لاستدعاء Lambda في Amazon ، يجب تشغيل البرنامج النصي post_to_es_from_dynamodb.py.

نصيحة: إذا كنت ترغب في تشغيل هذا البرنامج النصي باسم Amazon Lambda ، فيجب أن تتذكر أن الحد الأقصى للمهلة هو 5 دقائق ، وعادة لا يكفي معالجة الكثير من السجلات.

قبل التنفيذ ، قم بتغيير معلمة المنطقة في البرنامج النصي يدويًا:

لنشر بيانات موجودة مسبقًا من DynamoDb إلى Elasticsearch ، قم بتشغيل هذا الأمر باستخدام الوسائط المناسبة:

الثعبان post_to_es_from_dynamodb.py --tn "" --ak "" --sk "" - الغزل "" - lf ""

أمثلة المعلمات:

esarn: arn: aws: dynamodb: us-east-1: XXXXXXXXXXX: table / elements / stream / 2017-09-14T14: 16: 12.788
lf: arn: aws: lambda: us-east-1: XXXXXXXXXXX: function: dynamostream-to-es

لمشاهدة تعريف المعلمات - التشغيل:

الثعبان post_to_es_from_dynamodb.py - مساعدة

نصيحة: إذا لم يكن هناك وحدة باسم boto3 ، يمكنك تشغيل:

نقطة تثبيت boto3

نصيحة: إذا قمت بتثبيت Amazon CLI على جهازك ، فستحتاج إلى تكوين معلمات AWS المحلية الخاصة بك (AWS secret / access / region) كما في الوسيطات التي استخدمتها أعلاه باستخدام الأمر "aws config".

الآن يمكنك تنفيذ الطلب:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search؟size=10&pretty=true&q=*

كما ترون في الصورة أدناه تم زيادة عدد العناصر:

أخيرًا ، يمكنك تعيين وحدات ذات سعة أقل لخفض التكاليف.

لذلك ، يمكنك الآن استخدام خدمة Elasticsearch مع DynamoDB!

مستوحاة من هذا وهذا. Сreated للأغراض التعليمية فقط.

جميع البرامج النصية والسياسات التي يمكنك العثور عليها هنا. لا تتردد في طرح الأسئلة!