Чтобы запустить задание с использованием boto3, в документация указано, что требуется только JobName. Однако мой код:
def start_job_run(self, name):
print("The name of the job to be run via client is: {}".format(name))
self.response_de_start_job = self.client.start_job_run(
JobName=name
)
print(self.response_de_start_job)
а клиент:
self.client = boto3.client(
'glue',
region_name='ap-south-1',
aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'),
)
при выполнении через Python3 выдает ошибку:
botocore.errorfactory.EntityNotFoundException: An error occurred (EntityNotFoundException) when calling the StartJobRun operation: Failed to start job run due to missing metadata
но когда я выполняю ту же операцию на той же работе из пользовательского интерфейса и из cli (aws glue start-job-run --job-name march15_9), все работает нормально.






Что указывает журнал ошибок клея?
Возможно, вы используете некоторые параметры в задании клея, которые вы не передаете при вызове задания.
Я тоже столкнулся с той же ошибкой, проблема заключается в передаче ARN клеевого задания как JobName. Решено путем передачи только имени задания склеивания.
response = client.start_job_run(
JobName='Glue Job Name not ARN'
)
По моему опыту ошибка часто означает Не могу найти работу. Как только задания привязаны к регионам, комбинация имени и региона однозначно идентифицирует задание, и ошибки в любом из них (включая тривиальные опечатки) приведут к ошибке, с которой вы столкнулись (d). Например, задание, которое я использую, находится в us-east-1, поэтому следующий оператор выполняется успешно.
glue_client = boto3.client('glue', region_name='us-east-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
Однако приведенный ниже фрагмент приведет к той же ошибке, что и у вас.
glue_client = boto3.client('glue', region_name='us-west-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
botocore.errorfactory.EntityNotFoundException: произошла ошибка (EntityNotFoundException) при вызове операции StartJobRun: не удалось запустить выполнение задания из-за отсутствия метаданных
В случае выше это относительно легко проверить, указав запущенный cli с параметром --region
Это будет что-то вроде: aws клей start-job-run --имя-работы March15_9 --region ap-south-1
Если это выполняется успешно (таким образом, регион действительно ap-south-1), я бы явно установил параметры в коде, чтобы удалить неизвестные факторы, и вместо того, чтобы передавать их через переменные среды, вы можете временно поместить строковые значения в код.
Как только код заработает с жестко заданными значениями, вы можете удалить их одно за другим, таким образом найдя одно (или несколько), которые нужно передать правильно.
Всего наилучшего
P.S. Действительно, документация правильная, только JobName нужно указать в качестве параметра, у меня есть код, который так работает
Проверьте, правильно ли написано название вашей клеевой работы. У меня был похожий случай, и я исправил его таким образом. (Например: Job_ 01 вместо Job_01)