Разработка для облака в облаке: разработка больших данных с помощью Docker в AWS
Опубликовано: 2022-03-11Зачем вам это может понадобиться?
Я разработчик и ежедневно работаю в интегрированных средах разработки (IDE), таких как Intellij IDEA или Eclipse. Эти IDE являются настольными приложениями. С момента появления Google Documents я вижу, как все больше и больше людей переносят свою работу из настольных версий Word или Excel в облако, используя онлайн-эквивалент текстового процессора или приложения для работы с электронными таблицами.
Есть очевидные причины для использования облака для сохранения вашей работы. Сегодня, по сравнению с традиционными настольными бизнес-приложениями, некоторые веб-приложения не имеют существенного недостатка в функциональных возможностях. Контент доступен везде, где есть веб-браузер, а в наши дни это почти везде. Совместная работа и совместное использование стали проще, а потеря файлов менее вероятна.
К сожалению, эти облачные преимущества не так распространены в мире разработки программного обеспечения, как в бизнес-приложениях. Есть некоторые попытки предоставить онлайн-IDE, но они далеки от традиционных IDE.
Это парадокс; хотя мы все еще привязаны к нашему рабочему столу для ежедневного кодирования, программное обеспечение теперь создается на нескольких серверах. Разработчикам нужно работать с вещами, которые они больше не могут хранить на своих компьютерах. Действительно, ноутбуки больше не увеличивают свою вычислительную мощность; иметь более 16 ГБ ОЗУ на ноутбуке — редкость и дорого, а на более новых устройствах, например, на планшетах — еще меньше.
Однако, даже если пока невозможно заменить классические настольные приложения для разработки программного обеспечения, можно перенести весь рабочий стол разработки в облако . В тот день, когда я понял, что больше нет необходимости держать весь мой софт на ноутбуке, и, заметив наличие веб-версии терминалов и VNC, перенес все в облако. В конце концов, я разработал сборочный комплект для автоматического создания этой среды.
В этой статье я представляю набор сценариев для создания облачной среды разработки для Scala и приложений для работы с большими данными, работающей с Docker в Amazon AWS и состоящей из доступного через Интернет рабочего стола с IntelliJ IDE, Spark, Hadoop и Zeppelin в качестве сервисов. , а также инструменты командной строки, такие как веб-SSH, SBT и Ammonite. Набор находится в свободном доступе на GitHub, и здесь я описываю процедуру его использования для сборки вашего экземпляра. Вы можете создать свою среду и настроить ее в соответствии со своими потребностями. Вам не потребуется более 10 минут, чтобы настроить и запустить его.
Что входит в «BigDataDevKit»?
Моя основная цель при разработке комплекта заключалась в том, чтобы моя среда разработки была чем-то, что я мог бы просто запустить со всеми службами и серверами, с которыми я работаю, а затем уничтожить их, когда они больше не нужны. Это особенно важно, когда вы работаете над разными проектами, некоторые из которых включают большое количество серверов и служб, например, когда вы работаете над проектами с большими данными.
Моя идеальная облачная среда должна:
- Включите все обычные инструменты разработки, особенно графическую IDE.
- Имейте под рукой нужные мне серверы и службы.
- Легко и быстро создавать с нуля и расширять для добавления дополнительных услуг.
- Быть полностью доступным с использованием только веб-браузера.
- При желании разрешите доступ специализированным клиентам (клиенту VNC и клиенту SSH).
Используя современную облачную инфраструктуру и программное обеспечение, возможности современных браузеров, широкую доступность широкополосного доступа и бесценный Docker, я создал среду разработки для Scala и разработки больших данных, которая, к лучшему, заменила мой ноутбук для разработки.
В настоящее время я могу работать в любое время, будь то MacBook Pro, Surface Tablet или даже iPad (с клавиатурой), хотя последний вариант не идеален. Все эти устройства являются просто клиентами; рабочий стол и все серверы находятся в облаке.
Моя текущая среда построена с использованием следующих онлайн-сервисов:
- Amazon Web Services для серверов.
- GitHub для хранения кода.
- Дропбокс для сохранения файлов.
Я также использую несколько бесплатных сервисов, таких как DuckDns для динамических IP-адресов и Let's encrypt для получения бесплатного SSL-сертификата.
В этой среде у меня в настоящее время есть:
- Графический рабочий стол с идеей Intellij, доступный через веб-браузер.
- Доступные через Интернет инструменты командной строки, такие как SBT и Ammonite.
- Hadoop для хранения файлов и выполнения заданий MapReduce.
- Сервер заданий Spark для запланированных заданий.
- Zeppelin для веб-ноутбука.
Что наиболее важно, веб-доступ полностью зашифрован с помощью HTTPS как для веб-VNC, так и для SSH, и существует множество мер безопасности, чтобы избежать потери данных, что, конечно, важно, когда вы не «владеете» контентом на ваш физический жесткий диск. Обратите внимание, что получение копии всей вашей работы на вашем компьютере происходит автоматически и очень быстро. Если вы потеряете все из-за того, что кто-то украл ваш пароль, у вас все равно будет копия на вашем компьютере, если вы все правильно настроили.
Использование веб-среды разработки с AWS и Docker
Теперь давайте начнем описывать, как работает среда. Приступая к работе утром, я первым делом захожу в консоль Amazon Web Services, где вижу все свои инстансы. Обычно у меня есть много экземпляров разработки, настроенных для разных проектов, и я отключаю неиспользуемые, чтобы сэкономить на оплате. В конце концов, я могу работать только над одним проектом одновременно. (Ну, иногда я работаю над двумя.)
Итак, я выбираю нужный инстанс, запускаю его, немного жду или иду пить кофе. Это не так уж отличается от включения компьютера. Обычно для запуска экземпляра требуется несколько секунд. Как только я вижу зеленый значок, я открываю браузер и перехожу по известному URL-адресу: https://msciab.duckdns.org/vnc.html . Обратите внимание, это мой URL; когда вы создаете комплект, вы создаете свой уникальный URL.
Поскольку AWS назначает новый IP-адрес каждой машине при запуске, я настроил динамическую службу DNS, поэтому вы всегда можете использовать один и тот же URL-адрес для доступа к своему серверу, даже если вы остановите и перезапустите его. Вы даже можете добавить его в закладки в браузере. Кроме того, я использую HTTPS с действительными ключами, чтобы получить полную защиту моей работы от снифферов, если мне нужно управлять паролями и другими конфиденциальными данными.
После загрузки система встретит вас веб-клиентом Web VNC NoVNC. Просто войдите в систему, и появится рабочий стол. Я намеренно использую минимальный рабочий стол, просто меню с приложениями, а единственная моя роскошь — виртуальный рабочий стол (поскольку при разработке я открываю много окон). Для почты я все еще полагаюсь на другие приложения, в настоящее время в основном на другие вкладки браузера.
В виртуальной машине у меня есть то, что мне нужно для разработки приложений для работы с большими данными. Прежде всего, это IDE. В сборке я использую версию сообщества IntelliJ Idea. Кроме того, есть инструмент сборки SBT и Scala REPL, Ammonite.
Однако ключевыми особенностями этой среды являются службы, развернутые в виде контейнеров на одной виртуальной машине. В частности, у меня есть:
- Zeppelin, веб-блокнот для использования кода Scala на лету и анализа данных (
http://zeppelin:8080) - Сервер заданий Spark для выполнения и развертывания заданий Spark с интерфейсом Rest (
http://sparkjobserver:8080). - Экземпляр Hadoop для хранения и извлечения данных из HDFS (
http://hadoop:50070).
Обратите внимание, что эти URL-адреса фиксированы, но доступны в виртуальной среде. Вы можете увидеть их веб-интерфейсы на следующем снимке экрана.
Каждая служба работает в отдельном контейнере Docker. Не вдаваясь в технические подробности, вы можете представить это как три отдельных сервера внутри вашей виртуальной машины. Прелесть использования Docker в том, что вы можете добавлять службы и даже две или три виртуальные машины. Используя контейнеры Amazon, вы можете легко масштабировать свою среду.
Наконец, что не менее важно, у вас есть веб-терминал. Просто войдите в свой URL-адрес с помощью HTTPS, и вас встретит терминал на веб-странице.
На снимке экрана выше вы можете видеть, что я перечисляю контейнеры, которые представляют собой три сервера и рабочий стол. Эта оболочка командной строки дает вам доступ к виртуальной машине, содержащей контейнеры, что позволяет вам управлять ими. Это как если бы ваши серверы находились «в Матрице» (виртуализированные внутри контейнеров), но эта оболочка дает вам выход за пределы «Матрицы» для управления серверами и рабочим столом. Отсюда вы можете перезапустить контейнеры, получить доступ к их файловым системам и выполнить другие манипуляции, разрешенные Docker. Я не буду подробно обсуждать Docker здесь, но на веб-сайте Docker есть огромное количество документации.
Как настроить свой экземпляр
Нравится ли вам это до сих пор, и вы хотите свой экземпляр? Это легко и дешево. Вы можете получить его всего за стоимость виртуальной машины в Amazon Web Services плюс хранилище. Комплекту в текущей конфигурации требуется 4 ГБ оперативной памяти для запуска всех служб. Если вы будете использовать виртуальную машину только тогда, когда она вам нужна, и будете работать, скажем, 160 часов в месяц, виртуальная машина по текущим расценкам будет стоить 160 x 0,052 доллара, или 8 долларов в месяц. Вы должны добавить стоимость хранения. Я использую около 30 ГБ, но все в целом может быть меньше 10 долларов.
Однако этот бот включает в себя стоимость (возможной) учетной записи Dropbox (Pro), если вы хотите сделать резервную копию более 2 ГБ кода. Это стоит еще 15 долларов в месяц, но обеспечивает важную безопасность ваших данных. Кроме того, вам понадобится частный репозиторий, либо платный GitHub, либо другой сервис, например Bitbucket, который предлагает бесплатные частные репозитории.
Я хочу подчеркнуть, что если вы используете его только тогда, когда вам это нужно, это дешевле, чем выделенный сервер. Да, все упомянутое здесь можно настроить на физическом сервере, но поскольку я работаю с большими данными, мне нужно много других сервисов AWS, поэтому я считаю логичным иметь все в одном месте.
Давайте посмотрим, как сделать всю настройку.
Предпосылки
Прежде чем приступить к сборке виртуальной машины, вам необходимо зарегистрироваться в следующих четырех службах:
- Веб-сервисы Амазон.
- Утиный DNS.
- Дропбокс.
- Давайте зашифруем.
Единственное, для чего вам нужна кредитная карта, — это Amazon Web Services. DuckDns полностью бесплатен, а DropBox предоставляет 2 ГБ бесплатного хранилища, чего может хватить для многих задач. Let’s Encrypt также бесплатен и используется внутри, когда вы создаете образ для подписи своего сертификата. Помимо этого, я также рекомендую службу хостинга репозитория, например GitHub или Bitbucket, если вы хотите сохранить свой код, однако это не требуется для установки.

Для начала перейдите в репозиторий GitHub BigDataDevKit.
Прокрутите страницу и скопируйте скрипт, показанный на картинке, в выбранный вами текстовый редактор:
Этот скрипт необходим для загрузки образа. Вы должны изменить его и указать некоторые значения параметров. Внимательно измените текст в кавычках. Обратите внимание, что вы не можете использовать символы, такие как кавычки, обратную косую черту или знак доллара в пароле, если вы не заключаете их в кавычки. Эта проблема актуальна только для пароля. Если вы хотите перестраховаться, избегайте кавычек, знака доллара или обратной косой черты.
Параметр PASSWORD — это пароль, который вы выбираете для доступа к виртуальной машине через веб-интерфейс. Параметр EMAIL — это ваш адрес электронной почты, который будет использоваться при регистрации SSL-сертификата. Вам потребуется указать адрес электронной почты, и это единственное требование для получения бесплатного SSL-сертификата от Let's Encrypt.
Чтобы получить значения для TOKEN и HOST , перейдите на сайт DuckDNS и войдите в систему. Вам нужно будет выбрать неиспользуемое имя хоста.
Посмотрите на изображение, чтобы увидеть, где вы должны скопировать токен и где вы должны добавить свое имя хоста. Вы должны нажать на кнопку «Добавить домен», чтобы зарезервировать имя хоста.
Настройка вашего экземпляра
Предполагая, что у вас есть все параметры и вы отредактировали скрипт, вы готовы запустить свой экземпляр. Войдите в интерфейс управления Amazon Web Services, перейдите на панель «Инстансы EC2» и нажмите «Запустить инстанс».
На первом экране вы выберете изображение. Скрипт построен на базе Amazon Linux, других вариантов нет. Выберите Amazon Linux, первый вариант в списке QuickStart.
На втором экране выберите тип экземпляра. Учитывая размер запущенного программного обеспечения, есть несколько служб, и вам нужно как минимум 4 ГБ памяти, поэтому я рекомендую вам выбрать экземпляр t2.medium . Вы можете обрезать его, используя t2.small , если вы отключите некоторые службы, или даже микро , если вам нужен только рабочий стол.
На третьем экране нажмите «Дополнительные сведения» и вставьте сценарий, который вы настроили на предыдущем шаге. Также рекомендую вам включить защиту от завершения, чтобы при случайном завершении вы не потеряли всю свою работу.
Следующим шагом является настройка хранилища. По умолчанию размер экземпляра составляет 8 ГБ, что недостаточно для размещения всех образов, которые мы будем создавать. Я рекомендую увеличить его до 20 ГБ. Также, пока он не нужен, предлагаю еще блочное устройство не менее 10Гб. Скрипт смонтирует второе блочное устройство как папку с данными. Вы можете сделать снимок его содержимого, завершить работу экземпляра, затем воссоздать его с помощью снимка и восстановить всю работу. Кроме того, пользовательское блочное устройство не теряется при прекращении работы экземпляра, поэтому у вас есть двойная защита от случайной потери ваших данных. Чтобы еще больше повысить свою безопасность, вы можете автоматически создавать резервные копии своих данных с помощью Dropbox.
Пятый шаг — дать экземпляру имя. Выберите свой собственный. Шестой шаг предлагает способ настройки брандмауэра. По умолчанию доступен только SSH, но нам нужен и HTTPS, так что не забудьте добавить еще и правило, открывающее HTTPS. Вы можете открыть HTTPS для всего мира, но лучше, если это будет только ваш IP-адрес, чтобы другие не могли получить доступ к вашему рабочему столу и оболочке, даже если это все еще защищено паролем.
Выполнив последнюю настройку, вы можете запустить экземпляр. Вы заметите, что инициализация может занять довольно много минут в первый раз, так как скрипт инициализации запущен, и он также будет выполнять некоторые длительные задачи, такие как создание сертификата HTTPS с помощью Let's Encrypt.
Когда вы в конце концов увидите, что консоль управления «запущена» с подтверждением, и она больше не «инициализируется», вы готовы к работе.
Предполагая, что все параметры верны, вы можете перейти на https://YOURHOST.duckdns.org .
Замените YOURHOST на выбранное вами имя хоста, но не забывайте, что это сайт HTTPS, а не HTTP, поэтому ваше соединение с сервером зашифровано, поэтому вы должны написать https// в URL-адресе. На сайте также будет представлен действующий сертификат для Let's Encrypt. Если есть проблемы с получением сертификата, скрипт инициализации сгенерирует самозаверяющий сертификат. Вы по-прежнему сможете подключаться с помощью зашифрованного соединения, но браузер предупредит вас, что это неизвестный сайт, а соединения небезопасны. Этого не должно произойти, но вы никогда не знаете.
Предполагая, что все работает, вы получаете доступ к веб-терминалу Butterfly. Вы можете войти в систему, используя пользовательское app и пароль, который вы указали в сценарии установки.
После входа в систему у вас есть загруженная виртуальная машина, которая также включает Docker и другие полезные функции, такие как интерфейс Nginx, Git и веб-терминал Butterfly. Теперь вы можете завершить настройку, создав образы Docker для своей среды разработки.
Далее введите следующие команды:
git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.shПоследняя команда также попросит вас ввести пароль для доступа к рабочему столу. После этого он начнет создавать изображения. Обратите внимание, что сборка займет около 10 минут, но вы можете видеть, что происходит, потому что все отображается на экране.
После завершения сборки вы также можете установить Dropbox с помощью следующей команды:
/app/.dropbox-dist/dropboxdСистема покажет ссылку, по которой вы должны щелкнуть, чтобы включить Dropbox. Вам нужно войти в Dropbox, и все готово. Все, что вы помещаете в папку Dropbox, автоматически синхронизируется между всеми вашими экземплярами Dropbox.
После этого вы можете перезапустить виртуальную машину и получить доступ к своей среде по URL- https://YOURHOST.dyndns.org/vnc.html .
Вы можете остановить машину и перезапустить ее, когда возобновите работу. URL-адрес доступа остается прежним. Таким образом, вы будете платить только за время, которое вы используете, плюс ежемесячная дополнительная плата за используемое хранилище.
Сохранение ваших данных
Следующее обсуждение требует некоторых знаний о том, как работают Docker и Amazon. Если вы не хотите вникать в детали, просто помните следующее простое правило: в виртуальной машине доступна папка /app/Dropbox , все, что вы поместите в /app/Dropbox , сохраняется, а все остальное одноразовое и может уйти. Чтобы еще больше повысить безопасность, также храните свой драгоценный код в системе контроля версий.
Теперь, если вы хотите понять это, читайте дальше. Если вы следовали моим указаниям по созданию виртуальной машины, виртуальная машина защищена от прерывания, поэтому вы не сможете ее случайно уничтожить. Если вы прямо решите прекратить его, основной том будет уничтожен. Все образы Docker будут потеряны, включая все внесенные вами изменения.
Однако, поскольку папка /app/Dropbox монтируется как том Docker для контейнеров, она не является частью образов Docker. В виртуальной машине папка /app монтируется в созданный вами том Amazon Volume, который также не уничтожается, даже если вы явно завершаете виртуальную машину. Чтобы удалить том, вы должны удалить его специально.
Не путайте тома Docker, которые являются логическими объектами Docker, с томами Amazon, которые являются отчасти физическими объектами. Что происходит, так это то, что том /app/Dropbox Docker помещается внутри тома /app Amazon.
Том Amazon не уничтожается автоматически, когда вы отключаете виртуальную машину, поэтому все, что в нем размещено, будет сохранено до тех пор, пока вы не уничтожите том явным образом. Кроме того, все, что вы помещаете в том Docker, хранится вне контейнера, поэтому оно не уничтожается при уничтожении контейнера. Если вы включили Dropbox, как рекомендуется, весь ваш контент копируется на серверы Dropbox и на ваш жесткий диск, если вы синхронизируете Dropbox со своим компьютером. Также рекомендуется хранить исходный код в системе контроля версий.
Итак, если вы поместите свой материал в систему контроля версий в папку Dropbox, для потери ваших данных должно произойти все это:
- Вы явным образом завершаете работу своей виртуальной машины.
- Вы явно удаляете том данных с виртуальной машины.
- Вы явным образом удаляете данные из Dropbox, включая историю.
- Вы явным образом удаляете данные из системы контроля версий.
Я надеюсь, что ваши данные в достаточной безопасности.
Я сохраняю виртуальную машину для каждого проекта, а когда заканчиваю, отключаю неиспользуемые виртуальные машины. Конечно, у меня есть весь мой код на GitHub и резервная копия в Dropbox. Кроме того, когда я прекращаю работу над проектом, я делаю снимок блока Amazon Web Services, прежде чем полностью удалить виртуальную машину. Таким образом, всякий раз, когда проект возобновляется, например, для обслуживания, все, что мне нужно сделать, это запустить новую виртуальную машину, используя снимок. Все мои данные возвращаются на место, и я могу возобновить работу.
Оптимизация доступа
Во-первых, если у вас есть прямой доступ в Интернет без использования прокси-сервера, вы можете использовать собственные клиенты SSH и VNC. Прямой доступ по SSH важен, если вам нужно копировать файлы в виртуальную машину и из нее. Однако для обмена файлами вам следует рассмотреть Dropbox как более простую альтернативу.
Веб-доступ VNC бесценен, но иногда он может быть медленнее, чем собственный клиент. У вас есть доступ к VNC-серверу на виртуальной машине через порт 5900. Вы должны явно открыть его, поскольку по умолчанию он закрыт. Я рекомендую вам открывать его только для вашего IP-адреса, потому что в Интернете полно «роботов», которые сканируют Интернет в поисках сервисов, к которым можно подключиться, и VNC является частой целью этих роботов.
Заключение
В этой статье объясняется, как можно использовать современные облачные технологии для реализации эффективной среды разработки. Хотя машина в облаке не может быть полной заменой вашему рабочему компьютеру или ноутбуку, ее вполне достаточно для разработки, когда важно иметь доступ к IDE. По моему опыту, при нынешних подключениях к Интернету это достаточно быстро для работы.
Находясь в облаке, доступ к серверу и манипуляции выполняются быстрее, чем локально. Вы можете быстро увеличить (или уменьшить) объем памяти, запустить другую среду, создать образ и так далее. У вас под рукой есть центр обработки данных, а когда вы работаете с проектами по работе с большими данными, вам нужны надежные сервисы и много места. Это то, что дает облако.
