прерывистый Невозможно найти учетные данные - PullRequest
0 голосов
/ 07 июня 2018

Мы используем следующую версию Boto для записи в SQS -

  • boto3 == 1.7.16
  • botocore == 1.10.16

Код успешно работает в производственной среде, но время от времени мы видим следующую неустойчивую ошибку -

NoCredentialsError Невозможно найти учетные данные.

Ниже приведена трассировка стека:

File "botocore/client.py", line 317, in _api_call
    return self._make_api_call(operation_name, kwargs)
File "botocore/client.py", line 602, in _make_api_call
    operation_model, request_dict)
File "botocore/endpoint.py", line 143, in make_request
  return self._send_request(request_dict, operation_model)
File "botocore/endpoint.py", line 168, in _send_request
  request = self.create_request(request_dict, operation_model)
File "botocore/endpoint.py", line 152, in create_request
  operation_name=operation_model.name)
File "botocore/hooks.py", line 227, in emit
  return self._emit(event_name, kwargs)
File "botocore/hooks.py", line 210, in _emit
  response = handler(**kwargs)
File "botocore/signers.py", line 90, in handler
  return self.sign(operation_name, request)
File "botocore/signers.py", line 154, in sign
  auth.add_auth(request)
File "botocore/auth.py", line 352, in add_auth
  raise NoCredentialsError

У нас есть следующие API, которые могут быть вызваны из нескольких потоков -

    def client(self):
        if not self._client:
            self._client = boto3.client('sqs', self.region)
        return self._client

1 Ответ

0 голосов
/ 06 мая 2019

Эта проблема в основном вызвана тем, что Boto3 не может определить правильные учетные данные для AWS.Есть различные способы решить эту проблему.Прежде всего, попробуйте следующий шаг.

STEP 1 : укажите ACCESS_ID и ACCESS_KEY вручную.Не вставляйте эти значения напрямую в код по соображениям безопасности.Если это работает, то вы уверены, что Boto не может найти учетные данные для доступа.

import boto3
client = boto3.client(
    'sqs',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
)

Другой вариант: открыть файл учетных данных AWS.~/.aws/credentials.Добавьте имя профиля по умолчанию и запустите программу.

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYY

Если вы предпочитаете использовать другое имя профиля, вы можете указать это в сеансе Boto.

session = boto3.Session(profile_name=your_profile_name)

Или вы также можете изменить имя переменной среды AWS_DEFAULT_PROFILE на"your_profile_name"


Другой вариант: Вы можете настроить учетные данные с помощью AWS CLI .Установите AWS CLI через PIP.

pip install awscli

Далее настройте учетные данные и другую информацию с помощью следующей команды.

aws configure

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

...