胶水Boto客户端-NoCredentialsError

时间:2020-10-16 14:22:56

标签: amazon-web-services boto3 aws-glue

我已经按计划运行了几个月的Glue Jobs。昨晚,我的胶水工作因致电botocore.exceptions.NoCredentialsError: Unable to locate credentials

而因bucket.objects.filter(Prefix=productionDirectory):而失败

我的印象是这是因为尚未定义凭证文件,但是AWS Glue一直没有问题就拉取凭证。我只是重新执行工作,一切都正常进行。作为参考,我通过以下方式定义我的Glue客户程序:glue = boto3.client('glue')。以前有没有人经历过?这只是一个边缘情况吗?

完整日志:

Traceback (most recent call last):
  File "/tmp/data-deployment", line 67, in <module>
    for obj in bucket.objects.filter(Prefix=productionDirectory):
  File "/home/spark/.local/lib/python3.7/site-packages/boto3/resources/collection.py", line 83, in __iter__
    for page in self.pages():
  File "/home/spark/.local/lib/python3.7/site-packages/boto3/resources/collection.py", line 166, in pages
    for page in pages:
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__
    response = self._make_request(current_kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request
    return self._method(**current_kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/client.py", line 316, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/client.py", line 613, in _make_api_call
    operation_model, request_dict, request_context)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/client.py", line 632, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/endpoint.py", line 102, in make_request
    return self._send_request(request_dict, operation_model)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/endpoint.py", line 132, in _send_request
    request = self.create_request(request_dict, operation_model)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/endpoint.py", line 116, in create_request
    operation_name=operation_model.name)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/hooks.py", line 356, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/signers.py", line 90, in handler
    return self.sign(operation_name, request)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/signers.py", line 160, in sign
    auth.add_auth(request)
  File "/home/spark/.local/lib/python3.7/site-packages/botocore/auth.py", line 357, in add_auth
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

编辑/更新:这是一个已知的错误。我已经在下方发布了AWS提供的缓解策略。

2 个答案:

答案 0 :(得分:1)

我遇到了与Glue类似的问题,但不完全相同。

我们将外部表与SparkSQL和S3一起使用,有时会突然引发异常,即Table not found。该问题从未在测试中重现,发生频率最低。由于我们的工作在重试上运行得很好,因此我们启用了重试机制来解决它。

这与Glue的内部工作原理及其无服务器环境有关。

答案 1 :(得分:1)

更新:我通过支持与AWS联络,他们做出了回应。显然,这是一个已知的错误和问题。尽管他们没有解决方案或解决方案的ETA,但他们确实有缓解此问题的方法。以下信息:

Thank you for reporting your issue to us and product team is aware of this intermittent issue. 
They are working on resolution however, I do not have an ETA. 
To mitigate this issue, increase the timeout / attempts to meta service request in your code:

####START######

import os

####Increase meta service timeout and attempt########

os.environ['AWS_METADATA_SERVICE_NUM_ATTEMPTS'] ="5"
os.environ['AWS_METADATA_SERVICE_TIMEOUT'] ="30"

#####################END#################