Tạo function liệt kê

Trong phần này chúng ta sẽ tạo function để liệt kê các tài liệu được lưu trong DynamoDB table theo id của người dùng.

  1. Mở bảng điều khiển AWS Lambda

  2. Ấn nút Create function LambdaConsole

  3. Nhập tên function: list_documents

  • Chọn Python 3.9 cho mục Runtime
  • Nhấn nút Create function

CreateFunction

  1. Nhập đoạn code sau cho tệp lambda_function.py:
import json
import boto3
import os
from decimal import *
from boto3.dynamodb.types import TypeDeserializer

dynamodb = boto3.client('dynamodb') 
serializer = TypeDeserializer()

class DecimalEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Decimal):
            return str(obj)
        return json.JSONEncoder.default(self, obj)

def deserialize(data):
    if isinstance(data, list):
        return [deserialize(v) for v in data]

    if isinstance(data, dict):
        try:
            return serializer.deserialize(data)
        except TypeError:
            return {k: deserialize(v) for k, v in data.items()}
    else:
        return data
        
def lambda_handler(event, context):
    table_name = os.environ['TABLE_NAME']
    user_id = event['pathParameters']['id']
    print(user_id)
    docs = dynamodb.query(
        TableName=table_name,
        KeyConditionExpression="user_id = :id",
        ExpressionAttributeValues={ ":id": { 'S': user_id } }
    )
    
    format_data_docs = deserialize(docs["Items"])
    # TODO implement
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE, OPTIONS",
            "Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method,X-Access-Token,XKey,Authorization"
        },
        "body": json.dumps(format_data_docs, cls=DecimalEncoder)
    }
  • Sau đó ấn Deploy

CreateFunction

Đoạn code trên thực hiện lấy biến môi trường TABLE_NAMEid của người dùng từ event. Sau đó query đến DynamoDB table với điều kiện giá trị của Partition key bằng id của người dùng. Sau đó định dạng lại dữ liệu được trả về sau khi query.

  1. Chúng ta cần thêm biến môi trường cho function. Ấn tab Configuration, sau đó chọn Environment variables ở menu phía bên trái. Ấn Edit

EnvironmentVariables

  1. Nhấn nút Add environment variable
  • Nhập TABLE_NAME làm key
  • Nhập tên DynamoDB table bạn vừa tạo làm giá trị
  • Ấn Save

EnvironmentVariables

  1. Tiếp theo, thêm quyền cho function truy cập DynamoDB table
  • Ấn Permission ở bên menu trái
  • Ấn vào tên role mà lambda function đang thực hiện

Permission

  1. Mở rộng AWSLambdaBasicExecutionRole…, sau đó ấn Edit

Permission

  1. Chọn tab JSON. Sao chép đoạn json dưới đây vào editor
,
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Query"
            ],
            "Resource": "arn:aws:dynamodb:REGION:ACCOUNT_ID:table/Documents"
        }

Thay REGIONACCOUNT_ID bằng vùng mà bạn tạo bảng và account id của bạn.

  • Ấn Review policy

Permission

  1. Ấn Save changes

Permission