在AWS Lambda中使用AWS SDK for Python(Boto3)上传文件到S3存储桶时,可能会遇到文件未能成功上传的问题。解决这个问题的关键在于配置Lambda角色的权限,并确保S3存储桶可以正确地与Lambda进行交互。
以下是一个示例代码,演示如何在Lambda函数中上传文件到S3存储桶。
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
bucket_name = 'my-bucket'
file_name = 'my-file.txt'
s3.upload_file(file_name, bucket_name, file_name)
return 'File uploaded successfully!'
请注意,Lambda函数的执行角色必须拥有上传文件到S3的权限,以及访问特定存储桶的权限。您可以在Lambda角色策略中添加以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
这将允许Lambda函数列出存储桶中的对象、获取和上传对象。确保将“my-bucket”替换为您实际使用的存储桶的名称。
如果您已经正确配置了角色策略,并且仍然无法上传文件,请确保存储桶的权限配置正确。您可以在存储桶的“权限”选项卡中查看存储桶的权限配置。确保包含Lambda所使用的角色,并且该角色具有“s3:PutObject”权限。