aws обслуживает файл через s3 без сервера - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь передать аудиофайл из S3 с помощью лямбда-функции в python.

Моя лямбда-функция выдает сообщение Internal server error, а журнал CloudWatch показывает:

23:42:07 An error occurred during JSON serialization of response: b'\xff\xfb\x90\xc4\x00\x00\...

Ниже приведен код в моей лямбда-функции Python

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

1 Ответ

0 голосов
/ 22 сентября 2018

Самый простой способ создания подписанного URL-адреса для S3 и перенаправления на этот URL-адрес.

Лямбда (проверка разрешений и создание подписанного URL-адреса) -> Перенаправление (302) -> Фактический файл в S3bucket

Код генерации URL с подписью Python:

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 - аудио типа контента / mpeg

Надеюсь, это поможет.

...