AWS实战:S3与Lambda的集成
·
AWS实战:S3与Lambda集成指南
一、核心概念
- S3存储桶
AWS对象存储服务,用于存储任意类型数据(图片、日志、视频等) - Lambda函数
无服务器计算服务,事件触发执行代码 - 集成原理
S3事件(如文件上传/删除)自动触发Lambda函数执行,典型应用场景:- 实时图片压缩
- 日志文件分析
- 数据备份与同步
二、实战步骤
1. 创建S3存储桶
aws s3api create-bucket --bucket my-unique-bucket-name --region us-east-1
2. 编写Lambda函数(Python示例)
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
# 获取触发事件的文件信息
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 示例:打印新上传文件信息
print(f"新文件上传至 {bucket}/{key}")
# 实际业务逻辑(如图片处理/数据分析)
# process_file(bucket, key)
return {'statusCode': 200}
3. 配置事件触发
- 在Lambda控制台创建新函数
- 添加S3触发器:
- 选择目标存储桶
- 设置事件类型(如
s3:ObjectCreated:*) - 配置前缀/后缀过滤(可选)
4. 权限配置(关键!)
// IAM角色策略示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"logs:CreateLogGroup"
],
"Resource": "*"
}
]
}
三、典型应用场景
-
自动缩略图生成
from PIL import Image import io def process_image(bucket, key): s3.download_file(bucket, key, '/tmp/original.jpg') img = Image.open('/tmp/original.jpg') img.thumbnail((200, 200)) img.save('/tmp/thumbnail.jpg') s3.upload_file('/tmp/thumbnail.jpg', bucket, f"thumbnails/{key}") -
CSV文件实时处理
import pandas as pd def process_csv(bucket, key): csv_obj = s3.get_object(Bucket=bucket, Key=key) df = pd.read_csv(csv_obj['Body']) # 执行数据分析 results = df.groupby('category').sum() results.to_csv('/tmp/results.csv') s3.upload_file('/tmp/results.csv', 'results-bucket', key)
四、优化建议
- 错误处理
添加SQS死信队列捕获失败事件 - 性能优化
- 设置适当内存(建议≥512MB)
- 启用Lambda Provisioned Concurrency
- 成本控制
- 使用S3生命周期策略自动清理处理过的文件
- 设置Lambda执行超时阈值(默认15秒)
五、调试技巧
- 使用CloudWatch查看日志:
aws logs tail /aws/lambda/your-function-name --follow - 本地测试事件模板:
{ "Records": [ { "s3": { "bucket": {"name": "your-bucket"}, "object": {"key": "test-file.jpg"} } } ] }
提示:首次部署建议使用AWS控制台操作,熟悉流程后可转为Terraform/CloudFormation自动化部署。
更多推荐
所有评论(0)