我正在尝试使用python中的lambda函数从S3提供音频文件。
我的lambda函数正在生成一条Internal server error
消息,CloudWatch日志显示:
23:42:07 An error occurred during JSON serialization of response: b'\xff\xfb\x90\xc4\x00\x00\...
下面是我的python lambda函数中的代码
import boto3
def getAudio(event, context):
#[Validate permissions here]
s3 = boto3.client('s3')
my_bucket = 'my-app'
my_key = "audio/%s.mp3"%(event['pathParameters']['audio_id'])
s3_object = s3.get_object(Bucket=my_bucket, Key=my_key)
return s3_object['Body'].read()
检索和传递音频文件的适当方法是什么?
我的终点是https://1cbbkp15ci.execute-api.us-east-1.amazonaws.com/dev/assert/audio/adfk-m1
答案 0 :(得分:3)
为S3创建签名URL并重定向到该URL的最简单方法。
Lambda(验证权限和创建签名的URL)->重定向(302) -> S3存储桶中的实际文件
Python签名的URL生成代码:
import boto3
import requests
# Get the service client.
s3 = boto3.client('s3')
# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': 'bucket-name',
'Key': 'key-name'
}
)
# Use the URL to perform the GET operation. You can use any method you like
# to send the GET, but we will use requests here to keep things simple.
response = requests.get(url)
此外,如果您希望投放的内容类型正确。在S3中设置对象的内容类型。您可以使用命令行甚至boto3进行设置。
aws s3api put-object --bucket bucket --key foo.mp3 --body foo.mp3 --content-type音频/ mpeg
希望有帮助。