2016-07-15 7 views
0

Я имею установку трубопровода, в котором у меня есть 3 основных этапа:Передача переменных между экземплярами EC2 в многоступенчатом трубопроводе данных AWS

1) принимают входные данные от архивного файла, распаковать этот файл в s3. выполните некоторую базовую проверку в каждом файле, чтобы гарантировать ее целостность, перейдите к шагу 2

2) начать две задачи одновременной обработки в отдельных экземплярах EC2 (распараллеливание этого шага экономит нам много времени, поэтому нам нужно это для повышения эффективности ради). Каждый экземпляр EC2 будет выполнять шаги обработки данных для некоторых файлов в s3, которые были распакованы на шаге 1, требуемые файлы для каждого экземпляра различны.

3) после выполнения двух одновременных процессов разверните еще один экземпляр EC2, чтобы выполнить окончательную обработку данных. Как только это будет сделано, запустите очистку, чтобы удалить распакованные файлы из s3, оставив на своем месте только оригинальный zip-файл.

Итак, одна из проблем, с которыми мы сталкиваемся, состоит в том, что у нас есть 4 экземпляра EC2, которые запускают этот процесс конвейера, но есть некоторые глобальные параметры, которые мы хотели бы получить для каждого экземпляра EC2. Если бы мы работали на одном экземпляре, мы могли бы, конечно, использовать переменные оболочки для выполнения этой задачи, но действительно нужны отдельные экземпляры для повышения эффективности. В настоящее время наша лучшая идея состоит в том, чтобы хранить плоский файл в s3-ведре, который имеет доступ к этим глобальным переменным, и просто прочитайте их при инициализации и напишите им, если они нуждаются в изменении. Это грубо, и кажется, что должен быть лучший способ, однако мы пока не можем понять. Я видел, что есть способ установить параметры, к которым можно получить доступ в любой части конвейера, но похоже, что вы можете установить это только на уровне каждого конвейера, а не на детализацию каждого прогона конвейера. У кого-нибудь есть какие-то ресурсы, которые могли бы помочь здесь? Очень признателен.

+0

Bump. У кого-нибудь есть опыт? –

ответ

0

Мы смогли решить эту проблему с помощью DynamoDB, чтобы отслеживать переменные/состояние. Сам трубопровод не имеет какого-либо механизма для этого, кроме значений параметров, который, к сожалению, работает только для каждого конвейера, а не для каждого задания. Вам нужно будет настроить экземпляр DynamoDB, а затем использовать идентификатор задания конвейера, чтобы отслеживать состояние, подключаться через инструменты CLI или некоторые SDK.

Смежные вопросы