间歇性无法找到凭据

时间:2018-06-07 03:50:38

标签: amazon-web-services boto3 amazon-sqs

我们使用以下版本的Boto写入SQS -

  • boto3 == 1.7.16
  • botocore == 16年1月10日

代码在生产环境中成功运行,但偶尔我们会看到以下间歇性错误 -

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 :(得分:0)

此问题主要是由于Boto3无法识别适用于AWS的正确凭证。有different ways个可以解决此问题。在开始之前,请尝试以下步骤。

步骤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设置凭据。通过PIP安装AWS CLI。

pip install awscli

接下来,通过以下命令配置凭据和其他信息。

aws configure

希望这会有所帮助。