1. Tìm đến trang danh sách chứa các Lambda function


3. Cấu hình cho Upload Function tại trang Create function
Trong phần đầu tiên, sẽ có 3 mục để tạo trước template của Lambda Function: Author from scratch, Use a blueprint, Container image
Trong phần Basic information:

Trong phần Change default execution role:



3. Cấu hình Code Upload Function tại phần Code Source
import json
import boto3
import base64
import uuid
import os
# Khởi tạo client S3
s3 = boto3.client('s3')
# Lấy tên bucket từ biến môi trường (thay thế bằng tên bucket của bạn)
BUCKET = os.environ.get("BUCKET_NAME", "your-bucket-name")
def lambda_handler(event, context):
try:
# Parse nội dung body từ HTTP request (định dạng JSON)
body = json.loads(event["body"])
# Lấy dữ liệu ảnh (base64) và kết quả phân tích từ frontend gửi lên
image_base64 = body.get("image")
result_data = body.get("result")
# Kiểm tra nếu thiếu ảnh hoặc kết quả thì trả lỗi
if not image_base64 or not result_data:
return {
"statusCode": 400,
"body": json.dumps({"error": "Missing image or result"})
}
# Giải mã ảnh base64 thành dạng bytes
image_bytes = base64.b64decode(image_base64)
# Tạo tên file ảnh ngẫu nhiên bằng UUID
filename = f"image-{uuid.uuid4()}.jpg"
# Upload ảnh gốc lên thư mục 'images/' trong bucket S3
s3.put_object(
Bucket=BUCKET,
Key=f"images/{filename}",
Body=image_bytes,
ContentType="image/jpeg"
)
# Tạo tên file JSON tương ứng và upload kết quả phân tích vào thư mục 'results/'
s3.put_object(
Bucket=BUCKET,
Key=f"results/{filename.replace('.jpg', '.json')}",
Body=json.dumps(result_data),
ContentType="application/json"
)
# Trả kết quả thành công về cho frontend, bao gồm link ảnh và file JSON
return {
"statusCode": 200,
"body": json.dumps({
"message": "Upload thành công",
"imageUrl": f"https://{BUCKET}.s3.amazonaws.com/images/{filename}",
"resultUrl": f"https://{BUCKET}.s3.amazonaws.com/results/{filename.replace('.jpg', '.json')}"
}),
"headers": {
"Access-Control-Allow-Origin": "*", # Cho phép truy cập từ mọi domain
"Content-Type": "application/json"
}
}
except Exception as e:
# Trả lỗi 500 nếu có exception xảy ra và cho phép CORS
return {
"statusCode": 500,
"body": json.dumps({"error": str(e)}),
"headers": {"Access-Control-Allow-Origin": "*"}
}
Lưu ý, bạn hãy thay thế tên bucket của mình, không được để trùng lặp tên bucket


Bạn đã hoàn thành bước cấu hình Lambda Function cho chức năng upload hình ảnh và kết quả phân tích lên S3 Bucket