Обязательно ли делать аудиофайлы общедоступными в S3 для воспроизведения на устройствах alexa? - PullRequest
0 голосов
/ 24 мая 2019

Я делаю навык alexa, где пользователь может слушать аудио, которое я загрузил в S3, но оно не воспроизводится, пока я не сделаю его публичным, есть ли способ это исправить?Почему требуется сделать файлы общедоступными, разве это не рискованно?

Есть один способ, который они предложили в javascript, - они предоставляют API в своем пакете Utils функцию с именем "getS3PreSignedURL", которая сделаетпубличный объект в течение 60 секунд, но что, если мой звук воспроизводится более 60 секунд, и я работаю на Java, я не настолько уверен в JavaScript.Кто-нибудь сталкивался с подобной проблемой, любые мысли будут полезны.

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Как вы упомянули, вы можете использовать S3-адрес.Тот, который используется в Alexa Hosted Skills , накладывает ограничение в 60 секунд, но применяется на стороне S3.Вы можете настроить свое собственное ведро S3 для поддержки этого и установить свой тайм-аут.Если вы проверите файл util.js в навыке Alexa Hosted, вы увидите что-то вроде этого:

const AWS = require('aws-sdk');

const s3SigV4Client = new AWS.S3({
    signatureVersion: 'v4'
});

module.exports = {
    getS3PreSignedUrl(s3ObjectKey) {
        const bucketName = process.env.S3_PERSISTENCE_BUCKET;
        const s3PreSignedUrl = s3SigV4Client.getSignedUrl('getObject', {
            Bucket: bucketName,
            Key: s3ObjectKey,
            Expires: 60*1 // the Expires is capped for 1 minute
        });
        console.log(`Util.s3PreSignedUrl: ${s3ObjectKey} URL ${s3PreSignedUrl}`);
        return s3PreSignedUrl;
    }
}

Обратите внимание, что этот код использует стандартный AWS SDK для node.js.Ведро S3 взято из среды process.env.S3_PERSISTENCE_BUCKET и является тем, которое налагает 60-секундный таймаут.Если вы измените свойство Expires на более чем 60 секунд, вы в основном не сможете получить предварительно подписанный URL, если попытаетесь через 1 минуту.Но если вы передадите туда свое собственное ведро (и назначите его bucketName), которое должным образом настроено для поддержки предварительно подписанных URL-адресов и тайм-аутов, превышающих 60 секунд, то ничто не мешает вам повторно использовать этот код (или эквивалентный код в Java) иполучите предварительно подписанный URL с любым сроком действия, который вы хотите.Параметр s3ObjectKey - это относительный путь к файлу в корзине.Чтобы сделать это в Java, вы должны будете использовать этот SDK вместо .

1 голос
/ 27 мая 2019

См. Открытый объект AWS S3 против частного объекта?

Я думаю, что это отвечает вашим опасениям по поводу риска и некоторых других вариантов.

Вы также можетенайдите параметр, чтобы заставить эту функцию возвращать более длинное окно - кроме того, похоже, что он по-прежнему аутентифицирует вашего пользователя для использования этой ссылки, в отличие от того, чтобы сделать ее действительно общедоступной (доступной для всех без аутентификации).

...