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.
Mở bảng điều khiển AWS Lambda
Ấn nút Create function
Nhập tên function: list_documents
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)
}
Đoạn code trên thực hiện lấy biến môi trường TABLE_NAME và id 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.
TABLE_NAME
làm key,
{
"Effect": "Allow",
"Action": [
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:REGION:ACCOUNT_ID:table/Documents"
}
Thay REGION
và ACCOUNT_ID
bằng vùng mà bạn tạo bảng và account id của bạn.