Пример примера опроса AWS на питоне?

Впервые я пробую сервисы AWS. Мне нужно интегрировать AWS polly со звездочкой для преобразования текста в речь.

вот пример кода, который я написал для преобразования текста в речь

from boto3 import  client
import boto3
import StringIO
from contextlib import closing

polly = client("polly", 'us-east-1' )
response = polly.synthesize_speech(
    Text="Good Morning. My Name is Rajesh. I am Testing Polly AWS Service For Voice Application.",
    OutputFormat="mp3",
    VoiceId="Raveena")

print(response)

if "AudioStream" in response:
    with closing(response["AudioStream"]) as stream:
        data = stream.read()
        fo = open("pollytest.mp3", "w+")
        fo.write( data )
        fo.close()

Я получаю следующую ошибку.

Traceback (most recent call last):
  File "pollytest.py", line 11, in <module>
    VoiceId="Raveena")
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 253, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 530, in _make_api_call
    operation_model, request_dict)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 141, in make_request
    return self._send_request(request_dict, operation_model)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 166, in _send_request
    request = self.create_request(request_dict, operation_model)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 150, in create_request
    operation_name=operation_model.name)
  File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 227, in emit
    return self._emit(event_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 210, in _emit
    response = handler(**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 90, in handler
    return self.sign(operation_name, request)
  File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 147, in sign
    auth.add_auth(request)
  File "/usr/local/lib/python2.7/dist-packages/botocore/auth.py", line 316, in add_auth
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

Я хочу предоставить учетные данные непосредственно в этом скрипте, чтобы я мог использовать его в системном приложении asterisk.

ОБНОВЛЕНИЕ: создан файл ~/.aws/credentials со следующим содержимым

[default]
aws_access_key_id=XXXXXXXX
aws_secret_access_key=YYYYYYYYYYY

теперь для моего текущего пользователя входа в систему он работает нормально, но для Asterisk PBX он не работает.


person rajesh6115    schedule 08.02.2017    source источник


Ответы (2)


Ваш код отлично работает для меня!

Последняя строка говорит:

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Таким образом, он не может пройти аутентификацию в AWS.

Если вы запускаете этот код на инстансе Amazon EC2, самый простой способ — назначить роль IAM инстансу при его запуске (ее нельзя добавить позже). Это автоматически назначит учетные данные, которые могут быть использованы приложением, работающим на экземпляре — изменения кода не требуются.

В качестве альтернативы вы можете получить ключ доступа и секретный ключ от IAM для своего пользователя IAM и сохранить эти учетные данные в локальном файле с помощью команды aws configure.

Плохая практика помещать учетные данные в исходный код, поскольку они могут быть скомпрометированы.

Видеть:

person John Rotenstein    schedule 08.02.2017
comment
Я создал файл ~/.aws/credentials и указал учетные данные в разделе по умолчанию. теперь он работает для моего пользователя. Но для Asterisk PBX выдает ошибку. - person rajesh6115; 08.02.2017
comment
Что вы имеете в виду, но для Asterisk PBX выдает ошибку? Работает ли АТС под другой учетной записью пользователя. В этом случае также создайте файл учетных данных в домашнем каталоге этого пользователя. В худшем случае вы можете поместить учетные данные в код (используйте aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY при создании client()), но это очень небезопасный метод. - person John Rotenstein; 08.02.2017
comment
Спасибо, я использую файл конфигурации пользователя в Python и сохранил учетные данные в файле конфигурации. Также успешно интегрируется с АТС Asterisk. - person rajesh6115; 08.02.2017

Обратите внимание, АТС asterisk обычно работает под пользователем asterisk.

Итак, вы установили аутентификацию для этого пользователя, а не для root.

person arheops    schedule 08.02.2017