Передача переменных между экземплярами EC2 в многошаговом конвейере данных AWS
У меня есть настройка конвейера, в которой у меня есть 3 основных этапа:
1) Возьмите вход из заархивированного файла, разархивируйте этот файл в s3. выполните базовую проверку каждого файла, чтобы гарантировать его целостность, перейдите к шагу 2
2) запускать две задачи одновременной обработки в отдельных экземплярах EC2 (распараллеливание этого шага экономит нам много времени, поэтому оно необходимо для повышения эффективности). Каждый экземпляр EC2 будет выполнять этапы обработки данных для некоторых файлов в s3, которые были разархивированы в шаге 1, требуемые файлы различны для каждого экземпляра.
3) после того, как оба одновременных процесса завершены, раскрутите другой экземпляр EC2, чтобы выполнить окончательную обработку данных. После этого запустите задание очистки, чтобы удалить разархивированные файлы из s3, оставив на своем месте только оригинальный файл zip.
Итак, одна из проблем, с которыми мы сталкиваемся, состоит в том, что у нас есть 4 экземпляра EC2, которые запускают этот конвейерный процесс, но есть некоторые глобальные параметры, которые мы бы хотели, чтобы у каждого экземпляра EC2 был доступ. Если бы мы работали на одном экземпляре, мы могли бы, конечно, использовать переменные оболочки для выполнения этой задачи, но на самом деле для эффективности нужны отдельные экземпляры. В настоящее время наша лучшая идея - хранить плоский файл в корзине s3, который имеет доступ к этим глобальным переменным, и просто читать их при инициализации и записывать обратно в них, если они нуждаются в изменении. Это грубо, и, похоже, должен быть лучший путь, однако мы пока не можем его найти. Я видел, что есть способ установить параметры, к которым можно получить доступ в любой части конвейера, но похоже, что вы можете установить это только для уровня конвейера, а не для детализации каждого запуска конвейера. У кого-нибудь есть ресурсы, которые могли бы здесь помочь? Очень признателен.
1 ответ
Мы смогли решить эту проблему, используя DynamoDB для отслеживания переменных / состояния. Сам конвейер не имеет никакого механизма для этого, кроме значений параметров, которые, к сожалению, работают только на конвейер, а не на задание. Вам нужно будет настроить экземпляр DynamoDB, а затем использовать идентификатор конвейерного задания, чтобы отслеживать состояние, подключаясь с помощью инструментов CLI или некоторого SDK.