User Евгений
Евгений
41 уровень

Деплой Java-приложения в облачную платформу Amazon Web Services (AWS)

Статья из группы Random
Всем привет! Каждому разработчику рано или поздно приходиться деплоить свои приложения в облако. В моем случае, после разработки Телеграм-бота @rabotaUkraineBot стало просто необходимо найти ему приличный хостинг. Сама идея разработки бота и использованные инструменты для реализации описаны в отдельной статье. Кандидатами в выборе облачной платформы были сервисы четырех всем известных гигантов — Amazon Web Services(AWS), Google, Azure и Heroku. При выборе хостинга для себя я поставил следующие приоритеты: минимальная цена, удобство деплоя, наличие дополнительных сервисов, гибкость. Не буду Вас погружать в аналитику и сравнения, сообщу сразу победителя — AWS. Деплой Java-приложения в облачную платформу Amazon Web Services (AWS) - 1Почему AWS, спросите вы? Потому что:
  • год бесплатного использования AWS Free Tier, бесплатных ресурсов в рамках этого предложения для моей задачи хватает с лихвой;
  • в AWS все Elastic, т.е. все гибкое и эластичное. Благодаря этому при деплое вашего приложения абсолютно не нужны навыки DevOps;
  • AWS последние два года вкладывает колосальные средства в развитие, новые сервисы появляются каждый месяц.
А теперь перейдем к подготовке приложения и собственно самого деплоя в облака AWS. Для удобства использования был выбран сервис Elastic Beanstalk для деплоя приложения. С его помощью вы через браузер загрузите свое приложение и все! Да-да, AWS cам настроит инфраструктуру и выделит требуемый пул ресурсов. Так как мой бот написан на SpringBoot, все что нужно — это собрать war с помощью spring-boot-maven-plugin и проверить корректную работу приложения на локально развернутом Tomcat. Очень важное замечание, перед сборкой нужно в application.properties поставить номер порта 5000:

server.port=5000
Если этого не сделать, то придется конфигурить настройки порта в консоли AWS за что может быть взята дополнительная плата со стороны AWS т.к. это выходит за рамки предоставления бесплатного сервиса AWS Free Tier. Сам процесс деплоя абсолютно не сложен и делается согласно официальному гайду Getting Started Using Elastic Beanstalk. Из особенностей, на которые следует обратить внимание:
  • при сборке приложения не забыть настроить порт как указано выше;
  • при регистрации в AWS вам понадобится платежная карта с минимум 1$ на счету (при валидации карты Amazon блокирует 1$);
  • внимательно изучите ограничения бесплатного сервиса AWS Free Tier дабы не попасть на деньги;
  • если после деплоя приложение не работает, как ожидалось, логи Tomcat вы найдете в меню Logs в Environment вашего приложения.
А что делать через год после использования бесплатного периода, спросите вы? Есть несколько вариантов решения вопроса:
  1. начать платить деньги согласно использованных ресурсов;
  2. перейти на сервис Amazon Lightsail (там дешевле);
  3. переписать приложение с использованием AWS Lambda и получить бесплатных хостинг;
  4. открыть новый аккаунт с сервисами AWS Free Tier и задеплоить туда ваше приложение, т.е. оттянуть решение вопроса еще на один год.
Сейчас AWS при регистрации нового аккаунта проверяет только уникальность е-mail. Подытожим: в облака AWS вы можете с легкостью задеплоить свое приложение — очень быстро и абсолютно бесплатно на первый год. Благодаря сервисам AWS, мы можем сконцентрироваться на разработке, все остальное за нас сделает AWS, потому что там все Elastic.
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ СДЕЛАТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Artur Уровень 35, Киев
8 апреля 2020
Может тут кто-нибудь сталкивался, не могу никак задеплоить .war, у меня все время 404 ошибка. В логах org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1125) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1859) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Glenda Right Уровень 25
31 июля 2019
На AWS в вечный free tier входят еще Code* сервисы, посмотри, весь CI\CD очень просто строится, много навыков DevOps и для них не требуется. Для Java у AWS есть очень хороший SDK, даже плагин для IDEA есть с поддержкой SAM. В общем не стоит останавливаться на Beanstalk'e(говорю как ДевОпс с обратной стороны барикад, ненавижу EBeanstalk).
TheShillienKeeper Уровень 30, Таллинн, Эстония
25 июля 2019
Имел опыт и с AWS и Хероку. Отдал бы приоритет Хероку. Работа с ним идет через Гит. Очень удобно. Он бесплатен. Просто бесплатен. Нет опасности тыкнуть не туда и получить через месяц счет от AWS ( свой опыт ыыы). Со СпрингБутом все работает в 1 тык. База подключается на их же сервисе еще в 1 тык. Из минусов - сервер засыпает через 10 минут простоя. После захода 5 сек просыпается. Решается платной подпиской ) Но как студенту 5 сек не кретично. Инстукция написана исчерпывающе на сайте. При желании можно 1 командой попросить создать сразу проект и залить на сервер 1 командой в Гите. Потом только добавляем новшества коммитами и радуемся