Как использовать дополнительные файлы для склеивания AWS - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть задание ETL, написанное на python, которое состоит из нескольких сценариев со следующей структурой каталогов;

my_etl_job
 |
 |--services
 |  |
 |  |-- __init__.py
 |  |-- dynamoDB_service.py
 |
 |-- __init__.py
 |-- main.py
 |-- logger.py

main.py - это сценарий точки входа, который импортирует другие сценарии из вышеуказанных каталогов. Приведенный выше код прекрасно работает на конечной точке dev после загрузки в кластер ETL, созданный конечной точкой dev. Поскольку сейчас я хочу запустить его в производство, я хочу создать для него подходящую работу по склеиванию. Но когда я сжимаю весь каталог my_etl_job в формате .zip, загружаю его в корзину артефактов s3 и указываю расположение файла .zip в расположение сценария следующим образом

s3://<bucket_name>/etl_jobs/my_etl_job.zip

Это код, который я вижу на панели инструментов интерфейса работы с клеем;

PK
    ���P__init__.pyUX�'�^"�^A��)PK#7�P  logger.pyUX��^1��^A��)]�Mk�0����a�&v+���A�B���`x����q��} ...AND ALLOT MORE...

Похоже, что работа с клеем не принимает формат .zip? если да, то какой формат сжатия я должен использовать?

ОБНОВЛЕНИЕ: Я проверил, что клеевое задание имеет возможность получения дополнительных файлов Referenced files path, где я предоставил разделенный запятыми список всех путей указанных файлов и изменил script_location на обратитесь только к main.py пути к файлу. Но это также не сработало. Склеивает задание, выдает ошибку, модуль не найден модулем регистрации (и я определил этот модуль в файле logger.py)

Ответы [ 2 ]

1 голос
/ 15 апреля 2020
  1. Ваша основная работа не должна быть заархивирована. Это должен быть сам файл py. В этом случае это был бы ты main.py. Это не должно быть частью zip-файла.
  2. Любые дополнительные библиотечные файлы, на которые вы ссылаетесь в своем коде, могут быть заархивированы или созданы в виде колесика и доступны через опцию extra-files. Структура вашей папки может быть немного изменена, чтобы хранить все эти дополнительные py-файлы, на которые вы ссылаетесь в main, было бы лучше, как показано ниже. Если у вас есть дополнительные службы, рассмотрите возможность их разбивки даже в дальнейшем, но ниже приведен простой пример
my_etl_job
 |
 |--corelib
 |  |
 |  |--__init__.py
 |  |-- services
 |      |
 |      | -- dynamoDB_service.py
 |      | -- logger.py
 |
 |-- main.py

Затем вы можете импортировать свой модуль dynamicodbservices в main.py как corelib.services.dynamoDB_service. Когда вы готовите свою библиотеку, просто go в папку перед corelib и заархивируйте папку, как показано ниже

zip -r corelib.zip corelib/

Затем вы можете добавить crelib.zip как ваши дополнительные файлы в клей. (Вы можете подготовить файл колеса в соответствии со своими предпочтениями)

1 голос
/ 15 апреля 2020

Вам нужно будет передать zip-файл как дополнительный python lib или создать пакет wheel для пакета кода и загрузить zip или wheel в s3, указав тот же путь, что и для дополнительного python lib option

Примечание. Если ваша основная функция записана в клеевой консоли самостоятельно, ссылаясь на требуемую функцию из зависимости zip / wheel, местоположение вашего сценария никогда не должно быть zip-файлом

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html

...