在AWS Lambda函数中使用PreSignedURL时,有几个常见的错误可能发生。下面是一些常见问题和解决方法的示例代码:
缺少S3权限:
import boto3
from botocore.exceptions import ClientError
def generate_presigned_url(bucket_name, object_name, expiration=3600):
s3_client = boto3.client('s3')
try:
response = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': bucket_name, 'Key': object_name},
ExpiresIn=expiration
)
except ClientError as e:
print(e.response['Error']['Message'])
return None
return response
无效的Bucket或Object名称:
def generate_presigned_url(bucket_name, object_name, expiration=3600):
s3_client = boto3.client('s3')
try:
response = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': bucket_name, 'Key': object_name},
ExpiresIn=expiration
)
except ClientError as e:
if e.response['Error']['Code'] == 'NoSuchBucket':
print('指定的存储桶不存在')
elif e.response['Error']['Code'] == 'NoSuchKey':
print('指定的对象不存在')
else:
print(e.response['Error']['Message'])
return None
return response
Lambda函数缺少S3访问权限:
import boto3
from botocore.exceptions import ClientError
def generate_presigned_url(bucket_name, object_name, expiration=3600):
s3_client = boto3.client('s3')
try:
response = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': bucket_name, 'Key': object_name},
ExpiresIn=expiration
)
except ClientError as e:
if e.response['Error']['Code'] == 'AccessDenied':
print('Lambda函数缺少S3访问权限')
else:
print(e.response['Error']['Message'])
return None
return response
这些示例代码可以帮助您在AWS Lambda函数中处理一些常见的PreSignedURL错误。您可以根据您的具体需求进行适当的修改和调整。