شعار زيفيرنت

استدعاء وظائف AWS Lambda من Amazon Kinesis Data Streams | خدمات الويب الأمازون

التاريخ:

تعد البنية متعددة الحسابات في AWS أمرًا ضروريًا لتعزيز الأمان والامتثال وإدارة الموارد من خلال عزل أعباء العمل، وتمكين تخصيص التكاليف الدقيقة، وتسهيل التعاون عبر بيئات متميزة. كما أنه يخفف المخاطر ويحسن قابلية التوسع ويسمح بتكوينات الشبكات المتقدمة.

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

لإنشاء بنية دفق متعددة الحسابات، يمكنك استخدام الأمازون كينسيس دفق البيانات كما تخزين الدفق و AWS لامدا كمستهلك الحدث. يتيح Amazon Kinesis Data Streams المعالجة في الوقت الفعلي لبيانات التدفق على نطاق واسع. عند التكامل مع Lambda، فإنه يسمح بمعالجة البيانات بدون خادم، مما يتيح لك تحليل تدفقات البيانات والتفاعل معها في الوقت الفعلي دون إدارة البنية التحتية. يدعم هذا التكامل حالات الاستخدام المختلفة، بما في ذلك التحليلات في الوقت الفعلي، ومعالجة السجلات، واستيعاب بيانات إنترنت الأشياء (IoT)، والمزيد، مما يجعلها ذات قيمة للشركات التي تتطلب رؤى في الوقت المناسب من بياناتها المتدفقة. في هذا المنشور، نوضح كيف يمكنك معالجة البيانات التي يتم استيعابها في التدفق في حساب واحد باستخدام وظيفة Lambda في حساب آخر.

تم الإطلاق الأخير لدعم Kinesis Data Streams لـ السياسات القائمة على الموارد يتيح استدعاء Lambda من حساب آخر. باستخدام السياسة القائمة على الموارد، يمكنك تحديد حسابات AWS، إدارة الهوية والوصول AWS مستخدمو (IAM) أو أدوار IAM وإجراءات تدفقات بيانات Kinesis الدقيقة التي تريد منح حق الوصول إليها. بعد منح الوصول، يمكنك تكوين وظيفة Lambda في حساب آخر لبدء معالجة تدفق البيانات الخاص بحسابك. يؤدي هذا إلى تقليل التكلفة وتبسيط مسار معالجة البيانات، لأنك لم تعد بحاجة إلى نسخ بيانات التدفق باستخدام وظائف Lambda في كلا الحسابين. لا تؤدي مشاركة الوصول إلى تدفقات البيانات الخاصة بك أو المستهلكين المسجلين إلى فرض رسوم إضافية على حسابك. سيستمر إرسال فواتير الاستخدام عبر الحسابات لموارد Kinesis Data Streams إلى مالكي الموارد.

في هذا المنشور، نستخدم Kinesis Data Streams مع مروحة محسنة الميزة، وتمكين المستهلكين من خلال إنتاجية قراءة مخصصة مصممة خصيصًا لتطبيقاتهم. افتراضيًا، توفر Kinesis Data Streams إنتاجية قراءة مشتركة تبلغ 2 ميجابايت/ثانية لكل جزء عبر المستهلكين، ولكن مع التوزيع المعزز، يمكن لكل مستهلك الاستمتاع بإنتاجية مخصصة تبلغ 2 ميجابايت/ثانية لكل جزء. تسمح لك هذه المرونة بتكييف تدفقات بيانات Kinesis بسلاسة مع متطلباتك المحددة، والاختيار بين التوزيع المعزز للإنتاجية المخصصة أو الإنتاجية المشتركة وفقًا لاحتياجاتك.

حل نظرة عامة

بالنسبة للحل الذي نقدمه، نقوم بنشر Kinesis Data Streams في الحساب 1 وLambda كمستهلك في الحساب 2 لتلقي البيانات من تدفق البيانات. ويوضح الرسم البياني التالي البنية عالية المستوى.

بنية حلول Amazon KDS-Lambda المتقاطعة

يتطلب الإعداد العناصر الأساسية التالية:

  • دفق بيانات Kinesis في الحساب 1 ووظيفة Lambda في الحساب 2
  • سياسات موارد Kinesis Data Streams في الحساب 1، مما يسمح بدور تنفيذ Lambda عبر الحسابات لتنفيذ العمليات على تدفق بيانات Kinesis
  • دور تنفيذ Lambda في الحساب 2 وسياسة موارد المستهلك الشاملة المحسنة في الحساب 1، مما يسمح لدور تنفيذ Lambda عبر الحسابات بتنفيذ العمليات على تدفق بيانات Kinesis

للإعداد، يمكنك استخدام ثلاثة تكوين سحابة AWS قوالب لإنشاء الموارد الرئيسية:

  • يقوم قالب CloudFormation 1 بإنشاء الموارد الأساسية التالية في الحساب 1:
    • دفق بيانات Kinesis
    • دفق بيانات Kinesis يعزز المستهلك الموسع
  • يقوم قالب CloudFormation 2 بإنشاء الموارد الأساسية التالية في الحساب 2:
    • وظيفة المستهلك لامدا
    • دور تنفيذ وظيفة Lambda للمستهلك
  • يقوم قالب CloudFormation 3 بإنشاء المورد التالي في الحساب 2:
    • تعيين مصدر حدث دالة Lambda للمستهلك

يدعم الحل النشر في منطقة واحدة، ويجب نشر قوالب CloudFormation في نفس المنطقة عبر حسابات AWS مختلفة. في هذا الحل، نستخدم التوزيع المعزز لـ Kinesis Data Streams، وهو أفضل ممارسة لنشر البنى التي تتطلب إنتاجية كبيرة عبر العديد من المستهلكين. أكمل الخطوات الواردة في الأقسام التالية لنشر هذا الحل.

المتطلبات الأساسية المسبقة

يجب أن يكون لديك حسابان على AWS والأذونات المطلوبة لتشغيل قالب CloudFormation لإنشاء الخدمات المذكورة في بنية الحل. أنت أيضا بحاجة إلى واجهة سطر الأوامر AWS (AWS CLI) مثبت، الإصدار 2.15 وما فوق.

إطلاق قالب CloudFormation 1

أكمل الخطوات التالية لتشغيل قالب CloudFormation الأول:

  1. تسجيل الدخول إلى وحدة تحكم إدارة AWS كحساب 1 وحدد منطقة AWS المناسبة.
  2. تنزيل وتشغيل قالب تشكيل السحابة 1 المكان الذي تريد نشر دفق بيانات Kinesis الخاص بك فيه.
  3. في حالة LambdaConsumerAccountId، أدخل معرف حساب عميل Lambda الخاص بك وانقر فوق إرسال. سيستغرق نشر قالب CloudFormation بضع دقائق حتى يكتمل.
  4. عند اكتمال المكدس، في وحدة تحكم AWS CloudFormation، انتقل إلى المكدس النواتج علامة التبويب ونسخ قيم المعلمات التالية:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

ستحتاج إلى هذه القيم في خطوات لاحقة.

إطلاق قالب CloudFormation 2

أكمل الخطوات التالية لتشغيل قالب CloudFormation الثاني:

  1. قم بتسجيل الدخول إلى وحدة التحكم كحساب 2 وحدد المنطقة المناسبة.
  2. تنزيل وتشغيل قالب تشكيل السحابة 2 المكان الذي تريد استضافة مستهلك Lambda فيه.
  3. قم بتوفير معلمات الإدخال التالية التي تم التقاطها من الخطوة السابقة:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

يقوم قالب CloudFormation بإنشاء الموارد الأساسية التالية:

  • لامدا المستهلك
  • دور تنفيذ Lambda

دور تنفيذ وظيفة Lambda هو دور IAM الذي يمنح الوظيفة إذنًا للوصول إلى خدمات وموارد AWS. هنا، يمكنك إنشاء دور تنفيذ Lambda الذي يحتوي على أذونات استدعاء Lambda وتدفقات بيانات Kinesis المطلوبة.

سيستغرق نشر قالب CloudFormation بضع دقائق حتى يكتمل.

  1. عند اكتمال المكدس، في وحدة تحكم AWS CloudFormation، انتقل إلى المكدس النواتج علامة التبويب ونسخ قيم المعلمات التالية:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. قم بتشغيل أوامر AWS CLI التالية في الحساب 1 باستخدام أوس كلاودشيل. نوصي باستخدام CloudShell لأنه سيحتوي على أحدث إصدار من AWS CLI وسيتجنب أي نوع من حالات الفشل.
    • KinesisStreamCreateResourcePolicyCommand – يؤدي هذا إلى إنشاء سياسة الموارد في الحساب 1 لـ Kinesis Data Stream. فيما يلي نموذج لسياسة الموارد:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "StreamEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      "arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamSummary",
      "kinesis:ListShards",
      "kinesis:DescribeStream",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream"
      }
      ]
      }

    • KinesisStreamEFOConsumerCreateResourcePolicyCommand – يؤدي هذا إلى إنشاء سياسة الموارد للمستهلك الموسع المحسّن لتدفق بيانات Kinesis في الحساب 1. فيما يلي نموذج لسياسة الموارد:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "ConsumerEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      " arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamConsumer",
      "kinesis:SubscribeToShard"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream/consumer/kds-cross-account-stream-efo-consumer:1706616477"
      }
      ]
      }

يمكنك أيضًا الوصول إلى هذه السياسة على وحدة تحكم Kinesis Data Streams، ضمن مروحة محسنة, اسم المستهلكو سياسة تقاسم المستهلك القائمة على الموارد.

إطلاق قالب CloudFormation 3

الآن بعد أن قمت بإنشاء سياسات الموارد في الحساب 1 لتدفق بيانات Kinesis والمستهلك الموسع المحسّن، يمكنك إنشاء تعيين مصدر حدث Lambda لوظيفة Lambda للمستهلك في الحساب 2. أكمل الخطوات التالية:

  1. قم بتسجيل الدخول إلى وحدة التحكم كحساب 2 وحدد المنطقة المناسبة.
  2. تنزيل وتشغيل قالب تشكيل السحابة 3 لتحديث المكدس الذي قمت بإنشائه باستخدام قالب CloudFormation 2.

يقوم قالب CloudFormation بإنشاء تعيين مصدر حدث Lambda.

تحقق من صحة الحل

في هذه المرحلة، اكتمل النشر. يتوفر دفق بيانات Kinesis لاستهلاك الرسائل وتستقبل وظيفة Lambda هذه الرسائل في حساب الوجهة. لإرسال نماذج رسائل إلى تدفق البيانات في الحساب 1، قم بتشغيل أمر AWS CLI التالي باستخدام CloudShell:

aws kinesis put-record --stream-name kds-cross-account-stream --data sampledatarecord --partition-key samplepartitionkey3 --region <region id>

وظيفة Lambda في الحساب 2 قادرة على استقبال الرسائل، ويجب أن تكون قادرًا على التحقق من استخدامها الأمازون CloudWatch السجلات:

  1. في وحدة تحكم CloudWatch ، اختر مجموعات السجل في جزء التنقل.
  2. حدد موقع مجموعة السجل /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. اختار مجموعة سجل البحث لعرض رسائل السجل ذات الصلة. فيما يلي رسالة نموذجية:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

تنظيف

من الممارسات الجيدة دائمًا تنظيف جميع الموارد التي قمت بإنشائها كجزء من هذا المنشور لتجنب أي تكلفة إضافية.

لتنظيف مواردك، احذف مجموعات CloudFormation ذات الصلة من الحسابين 1 و2، وأوقف المنتج من دفع الأحداث إلى تدفق بيانات Kinesis. وهذا يضمن عدم تحميلك أي رسوم دون داع.

نبذة عامة

في هذا المنشور، أوضحنا كيفية تكوين تكامل Lambda عبر الحسابات مع Kinesis Data Streams باستخدام سياسات AWS المستندة إلى الموارد. يتيح ذلك معالجة البيانات التي يتم استيعابها في التدفق داخل حساب AWS واحد من خلال وظيفة Lambda الموجودة في حساب آخر. لدعم العملاء الذين يستخدمون دفق بيانات Kinesis في حساباتهم المركزية ولديهم العديد من المستهلكين الذين يقرأون البيانات منه، استخدمنا ميزة التوسيع المحسنة لـ Kinesis Data Streams.

للبدء، افتح وحدة تحكم Kinesis Data Streams أو استخدم واجهة برمجة التطبيقات الجديدة PutResourcePolicy لإرفاق سياسة الموارد بمصدر البيانات أو المستهلك.


عن المؤلفين

براتيك باتيل هو المدير الفني للحسابات وأخصائي تحليلات التدفق. إنه يعمل مع عملاء AWS ويوفر دعمًا مستمرًا وتوجيهًا تقنيًا للمساعدة في تخطيط الحلول وإنشائها باستخدام أفضل الممارسات والحفاظ بشكل استباقي على بيئات AWS للعملاء من الناحية التشغيلية.

حب هو مهندس حلول أول في Amazon AWS في المملكة المتحدة. وهو يعمل عبر عملاء الطاقة والمرافق والتصنيع والسيارات على التطبيقات الإستراتيجية، ويتخصص في استخدام AWS Streaming وحلول تحليلات البيانات المتقدمة لتحقيق نتائج الأعمال المثلى.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة