要解决AWS Lambda在S3对象推送时触发,但文件不存在的问题,你可以使用以下代码示例:
import json
import boto3
def lambda_handler(event, context):
# 获取S3桶和文件名
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 创建S3客户端
s3 = boto3.client('s3')
try:
# 获取文件内容
response = s3.get_object(Bucket=bucket, Key=key)
content = response['Body'].read().decode('utf-8')
# 在这里处理文件内容
# ...
return {
'statusCode': 200,
'body': json.dumps('文件处理成功')
}
except Exception as e:
return {
'statusCode': 400,
'body': json.dumps('文件处理失败: ' + str(e))
}
在这个示例中,当Lambda函数被触发时,它将获取S3桶和文件名。然后,它使用S3客户端来获取文件的内容。如果文件存在,它将对文件内容进行处理,然后返回成功的响应。如果文件不存在或处理过程中发生错误,它将返回错误的响应。
请注意,你需要在Lambda函数的执行角色上授予对S3桶和文件的读取权限。你可以在Lambda函数的IAM角色中添加以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*"
}
]
}
确保将your-bucket
替换为你的S3桶的名称。
这样,当Lambda函数触发时,它将检查S3对象是否存在,并处理文件内容。如果文件不存在,它将返回错误的响应。