AWS Glue: не удалось запустить задание из-за отсутствия метаданных

Чтобы запустить задание с использованием 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), все работает нормально.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
7 079
4

Ответы 4

Что указывает журнал ошибок клея?

Возможно, вы используете некоторые параметры в задании клея, которые вы не передаете при вызове задания.

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

Другие вопросы по теме