เริ่มต้นใช้งาน AWS

สร้างเว็บแอปพลิเคชันพื้นฐาน

ปรับใช้เว็บแอปพลิเคชันและเพิ่มความสามารถในการสื่อสารโต้ตอบด้วย API และฐานข้อมูล

โมดูลที่ 4: สร้างตารางข้อมูล

ในโมดูลนี้ คุณจะสร้างตาราง DynamoDB และเปิดใช้งานฟังก์ชัน Lambda เพื่อจัดเก็บข้อมูลไว้ในนั้น

ข้อมูลเบื้องต้น

ในโมดูลนี้ เราจะสร้างตารางเพื่อรักษาข้อมูลโดยใช้ Amazon DynamoDB DynamoDB คือ บริการฐานข้อมูลคีย์-ค่า ดังนั้น เราไม่จำเป็นต้องสร้างสคีมาสำหรับข้อมูลของเรา เป็นบริการที่มีประสิทธิภาพสม่ำเสมอในทุกขนาด และไม่มีเซิร์ฟเวอร์ที่ต้องจัดการขณะที่ใช้บริการนี้

นอกจากนี้ เราจะใช้บริการ AWS Identity and Access Management (IAM) เพื่อมอบสิทธิ์ที่จำเป็นให้แก่บริการของเราอย่างปลอดภัยเพื่อสื่อสารโต้ตอบซึ่งกันและกัน หากกล่าวให้เฉพาะเจาะจงก็คือ เรากำลังจะอนุญาตให้ฟังก์ชัน Lambda ที่เราสร้างขึ้นในโมดูลที่สองสามารถเขียนไปยังตาราง DynamoDB ของเราที่เพิ่งสร้างขึ้นมาใหม่ โดยใช้นโยบาย IAM โดยเราจะใช้ AWS SDK (Python, JavaScript หรือ Java) จากฟังก์ชัน Lambda ของเรา

สิ่งที่คุณจะได้เรียนรู้

  • สร้างตาราง DynamoDB โดยใช้ AWS Management Console
  • สร้างบทบาทและจัดการสิทธิ์ด้วย IAM
  • เขียนไปยังตาราง DynamoDB โดยใช้ AWS SDK (Python, JavaScript หรือ Java)

แนวคิดสำคัญ

การรักษาข้อมูล การเก็บข้อมูลเพื่อที่เราจะสามารถเข้าถึงได้อย่างอิสระในอนาคตจากการดำเนินการของโปรแกรม

ฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ ฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์จะไม่ใช้สคีมาแบบตารางที่มีแถวและคอลัมน์ แต่จะใช้โมเดลพื้นที่จัดเก็บที่ปรับให้เหมาะสมกับความต้องการที่เฉพาะเจาะจงของประเภทข้อมูลที่จัดเก็บ

ฐานข้อมูลคีย์-ค่า ประเภทของฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ที่จัดเก็บข้อมูลในรูปของชุดคู่คีย์-ค่าซึ่งคีย์จะทำหน้าที่เป็นตัวระบุเฉพาะ

คีย์หลัก ค่าที่จะระบุชิ้นส่วนของข้อมูลแต่ละชิ้นในตาราง DynamoDB ค่านี้ยังจะใช้สำหรับแบ่งตารางเพื่อทำให้สามารถปรับขนาดได้

สคีมา การจัดระเบียบของข้อมูลที่ทำหน้าที่เป็นพิมพ์เขียวที่แสดงให้ทราบว่าควรจะจัดโครงสร้างของฐานข้อมูลอย่างไร

AWS SDK SDK ย่อมาจาก "Software Development Kit" AWS SDK มอบชุดเครื่องมือ ไลบรารี เอกสารประกอบ ตัวอย่างโค้ด กระบวนการ และคู่มือ ที่ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันซอฟต์แวร์บนแพลตฟอร์มที่เฉพาะเจาะจงได้

นโยบาย IAM เอกสารที่กำหนดว่าเอนทิตี (เช่น บริการ ผู้ใช้ กลุ่ม) สามารถเข้าถึงทรัพยากร AWS อะไรบ้าง

 เวลาดำเนินการ

10 นาที

 บริการที่ใช้

การดำเนินการ

    1. เข้าสู่ระบบ Amazon DynamoDB Console
    2. ตรวจสอบว่าคุณทราบเขตที่คุณจะดำเนินการสร้างฟังก์ชันขึ้นมา คุณสามารถดูได้ที่ด้านบนสุดของหน้า ถัดจากชื่อบัญชี
    3. คลิกปุ่ม "Create table" (สร้างตาราง) สีฟ้า
    4. ถัดจาก "Table name" (ชื่อตาราง) ให้พิมพ์ HelloWorldDatabase ลงไป
    5. ในช่อง "Primary Key" (คีย์หลัก) ให้พิมพ์ ID ลงไป
    6. คลิกปุ่ม “Create” (สร้าง) สีฟ้า
    7. คัดลอก "Amazon Resource Name (ARN)" ของตารางจากแผงด้านขวามือ (คุณจำเป็นต้องใช้ในตอนท้ายของโมดูลนี้)
    1. ตอนนี้ เรามีตารางแล้ว เรามาแก้ไขฟังก์ชัน Lambda เพื่อให้สามารถเขียนข้อมูลลงไปในนั้นกันเถอะ ในหน้าต่างเบราว์เซอร์ใหม่ ให้เปิด AWS Lambda Console ขึ้นมา
    2. คลิกที่ฟังก์ชันที่เราสร้างไว้ในโมดูลที่สอง (หากคุณใช้ตัวอย่างของเรา ฟังก์ชันนี้จะมีชื่อว่า "HelloWorldFunction")
    3. เราจะเพิ่มสิทธิ์ให้แก่ฟังก์ชันของเรา เพื่อให้ฟังก์ชันสามารถใช้บริการ DynamoDB ได้ โดยเราจะใช้ AWS Identity and Access Management (IAM) เพื่อเพิ่มสิทธิ์
    4. คลิกที่ แท็บ "Permissions" (สิทธิ์)
    5. ในช่อง "Execution role" (บทบาทในการดำเนินการ) ให้คลิกที่บทบาทดังกล่าว แท็บเบราว์เซอร์ใหม่จะเปิดขึ้นมา
    6. คลิก "Add inline policy" (เพิ่มนโยบายแบบอินไลน์) ที่ด้านขวาของช่อง "Permissions policies" (นโยบายเกี่ยวกับสิทธิ์)
    7. คลิกแท็บ "JSON"
    8. วางนโยบายต่อไปนี้ในพื้นที่ข้อความ จัดการแทนที่ ARN ของตารางในช่อง "Resource" (ทรัพยากร) ในบรรทัดที่ 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. คลิกปุ่ม "Review Policy" (ตรวจสอบนโยบาย) สีฟ้า

    11. ถัดจาก "name" (ชื่อ) ให้พิมพ์ HelloWorldDynamoPolicy

    12. คลิกปุ่ม "Create Policy" (สร้างนโยบาย) สีฟ้า

    13. ตอนนี้ คุณสามารถปิดแท็บเบราว์เซอร์และกลับไปที่แท็บสำหรับฟังก์ชัน Lambda ของคุณ


    • Python
      1. คลิกแท็บ "Configuration" (การกำหนดค่า)
      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. คลิกปุ่ม "Save" (บันทึก) สีส้ม ที่ด้านบนสุดของหน้า

    • JavaScript
      1. คลิกแท็บ "Configuration" (การกำหนดค่า)
      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. คลิกปุ่ม "Save" (บันทึก) สีส้ม ที่ด้านบนสุดของหน้า

    • Java
      1. คลิกแท็บ "Configuration" (การกำหนดค่า)
      2. ไปที่ "Function code" (โค้ดของฟังก์ชัน) และอัปโหลดไฟล์ JAR ต่อไปนี้ (สำหรับวัตถุประสงค์ของบทแนะนำสอนการใช้งานนี้ เราจะข้ามขั้นตอนการสร้างแพ็คเกจการปรับใช้)
      3. อัปเดต "Handler" (ตัวจัดการ) เป็น com.example.app.SavePersonHandler::handleRequest
      4. คลิกปุ่ม "Save" (บันทึก) สีส้ม ที่ด้านบนสุดของหน้า
    1. คลิกปุ่ม “Test” (ทดสอบ) สีขาว
    2. คุณควรจะเห็นข้อความ "Execution result: succeeded" (ผลการดำเนินการ: สำเร็จ) บนพื้นหลังสีเขียว
    3. ในแท็บเบราว์เซอร์ใหม่ ให้เปิด คอนโซล DynamoDB ขึ้นมา
    4. คลิก "Tables" (ตาราง) ที่แถบการนำทางด้านซ้ายมือ
    5. คลิก HelloWorldDatabase ซึ่งเราสร้างไว้ก่อนหน้านี้ในโมดูลนี้
    6. คลิกแท็บ "Items" (รายการ) ที่ด้านขวา
    7. รายการที่ตรงกับเหตุการณ์การทดสอบจะปรากฏขึ้นที่นี่ หากคุณใช้ตัวอย่างของเรา ID รายการจะเป็น "Ada Lovelace"
    8. ทุกครั้งที่ฟังก์ชัน Lambda ดำเนินการ จะมีการอัปเดตตาราง DynamoDB หากใช้ชื่อเดียวกัน เฉพาะการประทับเวลาเท่านั้นที่จะเปลี่ยนแปลง

สถาปัตยกรรมแอปพลิเคชัน

เมื่อจบโมดูลที่สี่แล้ว เรามาดูสถาปัตยกรรมในปัจจุบันของเรากันเถอะ:

เราได้เพิ่มบริการขึ้นมา 2 บริการในโมดูลนี้ นั่นคือ DynamoDB (สำหรับพื้นที่จัดเก็บ) และ IAM (สำหรับการจัดการสิทธิ์อย่างปลอดภัย) บริการทั้งสองเชื่อมต่อกับฟังก์ชัน Lambda ของเรา เพื่อให้สามารถเขียนไปยังฐานข้อมูลของเราได้ ขั้นตอนสุดท้ายก็คือ เพิ่มโค้ดให้กับไคลเอนต์ของเราเพื่อเรียกใช้ API Gateway

โมดูลนี้เป็นประโยชน์หรือไม่

เพิ่มความสามารถในการสื่อสารโต้ตอบให้กับเว็บไซต์