Sử Dụng AWS Lambda Kết Hợp Với Amazon S3 Trigger Chuyên mục Devops 2024-11-04 3 Lượt xem 3 Lượt thích 0 Bình luận
Giới thiệu
Trong thế giới công nghệ hiện đại, xử lý dữ liệu một cách hiệu quả và tự động hóa quy trình làm việc là điều cần thiết. AWS Lambda là một dịch vụ serverless giúp bạn chạy mã mà không cần quản lý máy chủ. Kết hợp với Amazon S3, một dịch vụ lưu trữ đối tượng, bạn có thể xây dựng các quy trình xử lý sự kiện mạnh mẽ. Bài viết này sẽ hướng dẫn bạn cách sử dụng AWS Lambda để tự động xử lý hình ảnh khi chúng được tải lên S3, cùng với việc cấu hình IAM Role, CloudWatch Logs, và các bước thiết lập cần thiết.
Cấu Hình AWS Lambda
Bước 1: Tạo một Hàm Lambda
- Truy cập AWS Management Console.
- Chọn Lambda từ danh sách dịch vụ.
- Nhấp vào Create function.
- Chọn Author from scratch.
- Đặt tên cho hàm (ví dụ: ImageToWebPConverter).
- Chọn Runtime là Python 3.12.
- Nhấn Create function.
Bước 2: Cấu Hình IAM Role
AWS Lambda yêu cầu quyền truy cập đến các dịch vụ khác (như S3) thông qua IAM Role.
- Trong trang cấu hình hàm Lambda, tìm phần Execution role.
- Chọn Create a new role with basic Lambda permissions.
- Nhấn Create role.
- Sau khi tạo, chọn Add inline policy.
- Chọn tab JSON và thêm quyền sau:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"s3:*",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:your_log_group_name:*",
"arn:aws:s3:::*/*",
"arn:aws:s3:::your_s3_name"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:ap-northeast-1:925282240916:*"
}
]
}
Lưu ý: Thay YOUR_BUCKET_NAME bằng tên bucket S3 của bạn.
Bước 3: Tạo Trigger từ S3
- Vào tab Configuration của hàm Lambda.
- Chọn Triggers và nhấn Add trigger.
- Chọn S3 từ danh sách.
- Chọn bucket mà bạn muốn kích hoạt (chẳng hạn your-bucket-name).
- Trong Event type, chọn All object create events.
- Nhấn Add.
Bước 4: Cấu Hình CloudWatch Logs
AWS Lambda tự động ghi nhật ký hoạt động của nó vào CloudWatch Logs. Bạn có thể xem log để theo dõi sự kiện.
- Vào dịch vụ CloudWatch từ AWS Management Console.
- Chọn Logs từ menu bên trái.
- Tìm Log groups có tên giống với tên hàm Lambda của bạn (ví dụ: /aws/lambda/ImageToWebPConverter).
- Nhấn vào đó để xem nhật ký.
Viết Mã Xử Lý Hình Ảnh
Dưới đây là mã code demo cho hàm Lambda để chuyển đổi hình ảnh tải lên thành định dạng WebP:
import boto3
import os
import subprocess
import json
def handler(event, context):
print('start')
s3_client = boto3.client('s3')
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Tải hình ảnh từ S3
download_path = f'/tmp/{key}'
s3_client.download_file(bucket, key, download_path)
# Chuyển đổi hình ảnh sang định dạng WebP
output_path = f'/tmp/{os.path.splitext(key)[0]}.webp'
convert_to_webp(download_path, output_path)
# Tải hình ảnh đã chuyển đổi lên S3
s3_client.upload_file(output_path, bucket, f'converted/{os.path.basename(output_path)}')
print('finished!')
def convert_to_webp(input_path, output_path):
command = f'cwebp {input_path} -o {output_path}'
subprocess.check_output(command.split())
Giải Thích Mã
- Tải hình ảnh: Hàm Lambda tải hình ảnh từ S3 về thư mục /tmp/ (thư mục tạm thời trên Lambda).
- Chuyển đổi định dạng: Sử dụng subprocess để gọi lệnh cwebp, chuyển đổi hình ảnh sang định dạng WebP.
- Tải hình ảnh đã chuyển đổi: Cuối cùng, hình ảnh đã được chuyển đổi sẽ được tải lên S3 vào thư mục converted/.
Kết Luận
Sử dụng AWS Lambda với Amazon S3 trigger giúp bạn tự động hóa quy trình xử lý hình ảnh một cách hiệu quả. Việc cấu hình IAM Role và CloudWatch Logs sẽ giúp bạn theo dõi hoạt động của hàm Lambda và quản lý quyền truy cập an toàn. Hy vọng bài viết này sẽ giúp bạn xây dựng các quy trình tự động hóa mạnh mẽ trên AWS.
Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ở phần bình luận bên dưới!
Hy vọng bài viết này sẽ hữu ích cho bạn trong việc trình bày cách sử dụng AWS Lambda với Amazon S3! Nếu bạn cần thêm thông tin hoặc sửa đổi nào, hãy cho tôi biết!
Bình luận (0)