بدء استخدام AWS

بناء تطبيق ويب أساسي

نشر تطبيق ويب وإضافة تفاعل مع واجهة برمجة تطبيقات وقاعدة بيانات

الوحدة 4: إنشاء جدول بيانات

ستتعلم في هذه الوحدة كيفية إنشاء جدول DynamoDB وتمكين دالة Lambda لتخزين البيانات فيها.

المقدمة

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

بالإضافة إلى ذلك، سنستخدم خدمة AWS Identity and Access Management (IAM) لمنح خدماتنا الأذونات المطلوبة للتفاعل مع بعضها بشكل آمن. وعلى وجه التحديد، سنسمح لدالة Lambda التي أنشأناها في الوحدة الثانية بالكتابة في جدول DynamoDB الذي أنشأناه حديثًا باستخدام سياسة IAM. لإجراء ذلك، سنستخدم مجموعة AWS SDK (بلغة Python أو JavaScript أو Java) من دالة Lambda لدينا.

ما ستتعلمه

  • إنشاء جدول DynamoDB باستخدام وحدة الإدارة في AWS
  • إنشاء دور وإدارة الأذونات باستخدام سياسة IAM
  • الكتابة في جدول DynamoDB باستخدام مجموعة AWS SDK (بلغة Python أو JavaScript أو Java)

المفاهيم الأساسية

حفظ البيانات هو تخزين البيانات حتى نتمكن من الوصول إليها في المستقبل بشكل مستقل عن عملية تنفيذ البرنامج.

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

قاعدة بيانات القيمة الأساسيةهي نوع من قواعد البيانات غير الارتباطية التي تخزن البيانات كمجموعة من أزواج القيم الرئيسية التي يعمل فيها المفتاح كمعرف فريد.

المفتاح الأساسيهو القيمة التي ستحدد كل جزء من البيانات في جدول DynamoDB. ستعمل هذه القيمة أيضًا على تقسيم الجدول لجعله قابلاً للتكيف.

المخططهو تنظيم البيانات التي تعمل كمخطط لكيفية إنشاء قاعدة البيانات.

مجموعة AWS SDK يشير الاختصار SDK إلى «مجموعة تطوير البرمجيات.» توفر مجموعات AWS SDK مجموعة من الأدوات والمكتبات والوثائق ونماذج التعليمات البرمجية والعمليات والأدلة التي تسمح للمطورين بإنشاء التطبيقات البرمجية على منصة محددة.

سياسة IAM هي وثيقة تحدد موارد AWS التي يمكن لكيان ما (مثل الخدمة والمستخدم والمجموعة) الوصول إليها.

 الوقت اللازم للإكمال

10 دقائق

 الخدمات المستخدمة

التنفيذ

    1. قم بالتسجيل إلى وحدة تحكم Amazon DynamoDB.
    2. تأكد من ملاحظة المنطقة التي تنشئ فيها دالتك. يمكنك رؤية هذا الأمر أعلى الصفحة، بجوار اسم حسابك.
    3. انقر فوق زر «إنشاء واجهة برمجة التطبيقات» الأزرق.
    4. بجوار "اسم الجدول" أكتب HelloWorldDatabase.
    5. في حقل "المفتاح الأساسي" اكتب المعرّف.
    6. اضغط على زر «إنشاء» الأزرق.
    7. انسخ جدول "Amazon Resource Name (ARN)" من اللوحة اليمنى (ستحتاج إليه لاحقًا في هذه الوحدة).
    1. والآن بعد أن أصبح لدينا جدول، لنعدل دالة Lambda حتى نتمكن من كتابة البيانات بها. في نافذة المتصفح الجديدة، افتح وحدة تحكم AWS Lambda.
    2. انقر فوق الدالة التي أنشأناها في الوحدة الثانية (إذا كنت تستخدم أمثلتنا، فسيُطلق عليها "HelloWorldFunction").
    3. سنضيف أذونات إلى دالتنا حتى تتمكن من استخدام خدمة DynamoDB، وسنستخدم AWS Identity and Access Management (IAM) للقيام بذلك.
    4. انقر فوق «علامة تبويب الأذونات».
    5. في مربع "دور التنفيذ" انقر فوق الدور. سيتم فتح علامة تبويب متصفح جديدة.
    6. انقر فوق "إضافة سياسة مضمنة" على يمين مربع "سياسات الأذونات".
    7. انقر فوق علامة تبويب JSON.
    8. الصق السياسة التالية في منطقة النص، مع مراعاة استبدال ARN الخاص بجدولك في حقل "الموارد" في السطر 15:
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

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

    10. انقر فوق زر مراجعة السياسة الأزرق.

    11. بجوار «الاسم» اكتب HelloWorldDynamoPolicy.

    12. انقر فوق زر إنشاء سياسة الأزرق.

    13. يمكنك الآن إغلاق علامة تبويب المتصفح هذه والعودة إلى علامة التبويب الخاصة بدالة Lambda.


    • Python
      1. انقر فوق علامة تبويب تكوين
      2. استبدل رمز دالتك بما يلي:
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3. انقر فوق زر "حفظ" البرتقالي الموجود أعلى الشاشة.

    • JavaScript
      1. انقر فوق علامة تبويب تكوين
      2. استبدل رمز دالتك بما يلي:
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3. انقر فوق زر "حفظ" البرتقالي الموجود أعلى الشاشة.

    • Java
      1. انقر فوق علامة تبويب تكوين
      2. انتقل إلى "كود الدالة" وقم بتحميل ملف JAR. (لتحقيق أغراض هذا البرنامج التعليمي، سنتخطى إنشاء حزمة النشر.)
      3. قم بتحديث "المعالج" إلى com.example.app.SavePersonHandler::handleRequest
      4. انقر فوق زر "حفظ" البرتقالي الموجود أعلى الشاشة.
    1. انقر فوق زر "اختبار" الأبيض.
    2. سترى رسالة "نتيجة التنفيذ: نجحت" بخلفية خضراء.
    3. في علامة تبويب المتصفح الجديدة، افتح وحدة تحكم DynamoDB.
    4. انقر فوق "الجداول" على شريط التنقل الأيمن.
    5. انقر فوق HelloWorldDatabase، التي أنشأناها سابقًا في هذه الوحدة.
    6. انقر فوق علامة تبويب «العناصر» في الجانب الأيمن.
    7. يجب أن تظهر العناصر المطابقة لحدث الاختبار الخاص بك هنا. إذا كنت تستخدم أمثلتنا، فسيكون معرف العنصر هو "Ada Lovelace".
    8. في كل مرة يتم فيها تنفيذ دالة Lambda، سيتم تحديث جدول DynamoDB الخاص بك. إذا تم استخدام نفس الاسم، فلن يتغير سوى الطابع الزمني.

بنية التطبيقات

بالتزامن مع إكمال الوحدة الرابعة، دعنا نتطرق إلى البنية الحالية لدينا:

أضفنا خدمتين في هذه الوحدة: DynamoDB (للتخزين) و IAM (لإدارة الأذونات بشكل آمن). كلاهما مرتبط بدالة Lambda، حتى تتمكن من الكتابة على قاعدة البيانات لدينا. وتتمثل الخطوة الأخيرة في إضافة تعليمات برمجية لعملائنا لاستدعاء واجهة API Gateway.

هل كانت هذه الوحدة مفيدة؟

إضافة التفاعل إلى موقع الويب