Склеить клиент Boto — ошибка NoCredentialsError

#amazon-web-services #boto3 #aws-glue

#amazon-веб-сервисы #boto3 #aws-клей

Вопрос:

Я выполнял свои задания по склеиванию по расписанию в течение нескольких месяцев. Прошлой ночью моя работа с клеем не удалась из-за 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, в качестве ответа ниже.

Ответ №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#################

  

Ответ №2:

Я столкнулся с аналогичной проблемой с Glue, но не совсем такой.

Мы использовали внешние таблицы с SparkSQL и S3, и иногда из ниоткуда возникало исключение, Table not found т.Е. Проблема никогда не воспроизводилась при тестировании и имела наименьшую частоту. Поскольку наши задания выполнялись отлично при повторных попытках, мы включили механизм повторных попыток для ее решения.

Это как-то связано с внутренней работой Glue и его бессерверной средой.

Комментарии:

1. Спасибо, я обратился в службу поддержки AWS, чтобы узнать, есть ли у них какие-либо другие варианты, но у меня тоже сложилось такое впечатление. Я увеличил количество попыток до 3, и, надеюсь, это предотвратит проблемы в будущем.