تحديث التعليمات البرمجية للتطبيق لحمل عمل سير العمل المستند إلى الحدث (EDW)

توضح هذه المقالة تحديثات التعليمات البرمجية الرئيسية للتطبيق لنسخ حمل عمل EDW في Azure باستخدام Azure SDKs للعمل مع خدمات Azure.

رمز الوصول إلى البيانات

تنفيذ AWS

يعتمد حمل عمل AWS على خدمات AWS والوصول إلى البيانات المرتبطة بها AWS SDKs. لقد قمنا بالفعل بتعيين خدمات AWS إلى خدمات Azure المكافئة، حتى نتمكن الآن من إنشاء التعليمات البرمجية للوصول إلى البيانات الخاصة بقائمة انتظار المنتج وجدول قاعدة بيانات نتائج المستهلك في Python باستخدام Azure SDKs.

تنفيذ Azure

بالنسبة لمستوى البيانات، يكون نص رسالة المنتج (الحمولة) هو JSON، ولا يحتاج إلى أي تغييرات في المخطط ل Azure. يحفظ تطبيق المستهلك الأصلي الرسائل المعالجة في جدول DynamoDB. مع تعديلات طفيفة على التعليمات البرمجية لتطبيق المستهلك، يمكننا تخزين الرسائل المعالجة في جدول تخزين Azure.

رمز المصادقة

تنفيذ AWS

يستخدم حمل عمل AWS نهج دور IAM الذي يحدد الوصول الكامل إلى مورد Amazon Simple Queue Service (SQS):

{
  "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sqs:*",
            "Resource": "*"
        }
    ]
}

يستخدم حمل عمل AWS نهج دور IAM الذي يحدد الوصول الكامل إلى مورد Amazon DynamoDB:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "*"
    }
  ]
}

في حمل عمل AWS، يمكنك تعيين هذه النهج باستخدام AWS CLI:

aws iam create-policy --policy-name sqs-sample-policy --policy-document <filepath/filename>.json
aws iam create-policy --policy-name dynamodb-sample-policy --policy-document <filepath/filename>.json
aws iam create-role --role-name keda-sample-iam-role  --assume-role-policy-document <filepath/filename>.json

aws iam attach-role-policy --role-name keda-sample-iam-role --policy-arn=arn:aws:iam::${<AWSAccountID>}:policy/sqs-sample-policy
aws iam attach-role-policy --role-name keda-sample-iam-role --policy-arn=arn:aws:iam::${<AWSAccountID>}:policy/dynamodb-sample-policy

# Set up trust relationship Kubernetes federated identity credential and map IAM role via kubectl annotate serviceaccount

تنفيذ Azure

دعونا نستكشف كيفية تنفيذ منطق اتصال خدمة AWS مماثل داخل بيئة Azure باستخدام AKS.

يمكنك تطبيق تعريفين لدور Azure RBAC للتحكم في وصول مستوى البيانات إلى قائمة انتظار تخزين Azure وجدول تخزين Azure. تشبه هذه الأدوار نهج دور IAM التي تستخدمها AWS للتحكم في الوصول إلى SQS وDynamoDB. لا يتم تجميع أدوار Azure RBAC مع المورد. بدلا من ذلك، يمكنك تعيين الأدوار إلى كيان خدمة مقترن بمورد معين.

في تنفيذ Azure لحمل عمل EDW، يمكنك تعيين الأدوار إلى هوية مدارة معينة من قبل المستخدم مرتبطة بهوية حمل العمل في جراب AKS. تستخدم Azure Python SDKs لقائمة انتظار تخزين Azure وجدول تخزين Azure تلقائيا سياق أساس الأمان للوصول إلى البيانات في كلا الموردين.

يمكنك استخدام دور مساهم بيانات قائمة انتظار التخزين للسماح للدور المعين له بقراءة البيانات أو كتابتها أو حذفها مقابل قائمة انتظار تخزين Azure، ودور مساهم بيانات جدول التخزين للسماح للمعين له بقراءة البيانات أو كتابتها أو حذفها مقابل جدول تخزين Azure.

توضح الخطوات التالية كيفية إنشاء هوية مدارة وتعيين أدوار مساهم بيانات قائمة انتظار التخزين والمساهم في بيانات جدول التخزين باستخدام Azure CLI:

  1. إنشاء هوية مدارة az identity create باستخدام الأمر .

    managedIdentity=$(az identity create \
        --resource-group $resourceGroup \
        --name $managedIdentityName
    
  2. تعيين دور مساهم بيانات قائمة انتظار التخزين إلى الهوية المدارة az role assignment create باستخدام الأمر .

    principalId=$(echo $managedIdentity | jq -r `.principalId`)
    
    az role assignment create \
        --assignee-object-id $principalId \
        --assignee-principal-type ServicePrincipal
        --role "Storage Queue Data Contributor" \
        --scope $resourceId
    
  3. تعيين دور Storage Table Data Contributor إلى الهوية المدارة az role assignment create باستخدام الأمر .

    az role assignment create \
        --assignee-object-id $principalId \
        --assignee-principal-type ServicePrincipal
        --role "Storage Table Data Contributor" \
        --scope $resourceId
    

للاطلاع على مثال عمل، راجع deploy.sh البرنامج النصي في مستودع GitHub الخاص بنا.

التعليمات البرمجية للمنتج

تنفيذ AWS

يستخدم حمل عمل AWS مكتبة AWS boto3 Python للتفاعل مع قوائم انتظار Amazon SQS لتكوين الوصول إلى قائمة انتظار التخزين. تصادق إمكانية AWS IAM AssumeRole على نقطة نهاية SQS باستخدام هوية IAM المقترنة ب EKS pod التي تستضيف التطبيق.

import boto3
# other imports removed for brevity
sqs_queue_url = "https://<region>.amazonaws.com/<queueid>/source-queue.fifo"
sqs_queue_client = boto3.client("sqs", region_name="<region>")    
response = sqs_client.send_message(
    QueueUrl = sqs_queue_url,
    MessageBody = 'messageBody1',
    MessageGroupId='messageGroup1')

تنفيذ Azure

يستخدم تنفيذ Azure Azure SDK لمصادقة Python وOAuth بدون كلمة مرور للتفاعل مع خدمات Azure Storage Queue. DefaultAzureCredential فئة Python هي على علم بهوية حمل العمل وتستخدم الهوية المدارة المرتبطة بهوية حمل العمل للمصادقة على قائمة انتظار التخزين.

يوضح المثال التالي كيفية المصادقة على قائمة انتظار تخزين Azure باستخدام DefaultAzureCredential الفئة :

from azure.identity import DefaultAzureCredential
from azure.storage.queue import QueueClient
# other imports removed for brevity

# authenticate to the storage queue.
account_url = "https://<storageaccountname>.queue.core.windows.net"
default_credential = DefaultAzureCredential()
aqs_queue_client = QueueClient(account_url, queue_name=queue_name ,credential=default_credential)

aqs_queue_client.create_queue()
aqs_queue_client.send_message('messageBody1')

يمكنك مراجعة التعليمات البرمجية لمنتج قائمة الانتظار (aqs-producer.py) في مستودع GitHub الخاص بنا.

التعليمات البرمجية للمستهلك

تنفيذ AWS

يستخدم رمز AWS الأصلي للوصول إلى DynamoDB مكتبة AWS boto3 Python للتفاعل مع قوائم انتظار Amazon SQS. يستخدم جزء المستهلك من حمل العمل نفس التعليمات البرمجية التي يستخدمها المنتج للاتصال بقائمة انتظار Amazon SQS لقراءة الرسائل. يحتوي المستهلك أيضا على تعليمة Python البرمجية للاتصال ب DynamoDB باستخدام إمكانية AWS IAM AssumeRole للمصادقة على نقطة نهاية DynamoDB باستخدام هوية IAM المقترنة ب EKS pod التي تستضيف التطبيق.

# presumes policy deployment ahead of time such as: aws iam create-policy --policy-name <policy_name> --policy-document <policy_document.json>
dynamodb = boto3.resource('dynamodb', region_name='<region>')
table = dynamodb.Table('<dynamodb_table_name>')
table.put_item(
    Item = {
      'id':'<guid>',
      'data':jsonMessage["<message_data>"],
      'srcStamp':jsonMessage["<source_timestamp_from_message>"],
      'destStamp':'<current_timestamp_now>',
      'messageProcessingTime':'<duration>'
    }
)

تنفيذ Azure

يستخدم تنفيذ Azure Azure SDK ل Python للتفاعل مع جداول تخزين Azure.

الآن تحتاج إلى التعليمات البرمجية للمنتج للمصادقة على Azure Storage Table. كما تمت مناقشته سابقا، المخطط المستخدم في القسم السابق مع DynamoDB غير متوافق مع Azure Storage Table. يمكنك استخدام مخطط جدول متوافق مع Azure Cosmos DB لتخزين نفس البيانات مثل حمل عمل AWS في DynamoDB.

يوضح هذا المثال التالي التعليمات البرمجية المطلوبة ل Azure:

from azure.storage.queue import QueueClient
from azure.data.tables import (TableServiceClient)

    creds = DefaultAzureCredential()
    table = TableServiceClient(
        endpoint=f"https://{storage_account_name}.table.core.windows.net/",  
        credential=creds).get_table_client(table_name=azure_table)

entity={
    'PartitionKey': _id,
    'RowKey': str(messageProcessingTime.total_seconds()),
    'data': jsonMessage['msg'],
    'srcStamp': jsonMessage['srcStamp'],
    'dateStamp': current_dateTime
}
        
response = table.insert_entity(
    table_name=azure_table,
    entity=entity,
    timeout=60
)

على عكس DynamoDB، تحدد التعليمة البرمجية لجدول تخزين Azure كلا PartitionKey من و RowKey. PartitionKey يشبه المعرف uniqueidentifer في DynamoDB. PartitionKey هو uniqueidentifier لقسم في حاوية منطقية في Azure Storage Table. RowKey هو uniqueidentifier لكافة الصفوف في قسم معين.

يمكنك مراجعة التعليمات البرمجية الكاملة للمنتج والمستهلك في مستودع GitHub الخاص بنا.

إنشاء صور الحاوية ودفعها إلى Azure Container Registry

الآن، يمكنك إنشاء صور الحاوية ودفعها إلى Azure Container Registry (ACR).

في app دليل المستودع المستنسخ، يقوم برنامج نصي shell يسمى docker-command.sh ببناء صور الحاوية ودفعها إلى ACR. افتح .sh الملف وراجع التعليمات البرمجية. يقوم البرنامج النصي ببناء صور حاوية المنتج والمستهلك ودفعها إلى ACR. لمزيد من المعلومات، راجع مقدمة لسجلات الحاويات في Azure ودفع الصور وسحبها في ACR.

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

./app/docker-command.sh

الخطوات التالية

المساهمون

تحتفظ Microsoft بهذه المقالة. كتبه المساهمون التاليون في الأصل:

  • كين كيلتي | الوحدة النمطية للنظام الأساسي الموثوق به
  • راسل دي بينا | الوحدة النمطية للنظام الأساسي الموثوق به
  • جيني هايز | مطور محتوى أول
  • كارول سميث | مطور محتوى أول
  • إيرين شيفر | مطور المحتوى 2