JavaRush/Java блог/Random/Деплой Java-приложения в облачную платформу Amazon Web Se...
Евгений
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, 15:17
Может тут кто-нибудь сталкивался, не могу никак задеплоить .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]
Евгений
Уровень 41
11 апреля 2020, 17:51
Проверь свой war на локальном Tomcat-e cначала. Похоже что у тебя ошибка создания бина при обращении к БД.
Artur
Уровень 35
14 апреля 2020, 21:37
Таки да, неправильно билдил War. Ну вот почему нигде толкового мануала)
Glenda Right
Уровень 25
31 июля 2019, 13:46
На AWS в вечный free tier входят еще Code* сервисы, посмотри, весь CI\CD очень просто строится, много навыков DevOps и для них не требуется. Для Java у AWS есть очень хороший SDK, даже плагин для IDEA есть с поддержкой SAM. В общем не стоит останавливаться на Beanstalk'e(говорю как ДевОпс с обратной стороны барикад, ненавижу EBeanstalk).
TheShillienKeeper Full Stack Developer
25 июля 2019, 16:57
Имел опыт и с AWS и Хероку. Отдал бы приоритет Хероку. Работа с ним идет через Гит. Очень удобно. Он бесплатен. Просто бесплатен. Нет опасности тыкнуть не туда и получить через месяц счет от AWS ( свой опыт ыыы). Со СпрингБутом все работает в 1 тык. База подключается на их же сервисе еще в 1 тык. Из минусов - сервер засыпает через 10 минут простоя. После захода 5 сек просыпается. Решается платной подпиской ) Но как студенту 5 сек не кретично. Инстукция написана исчерпывающе на сайте. При желании можно 1 командой попросить создать сразу проект и залить на сервер 1 командой в Гите. Потом только добавляем новшества коммитами и радуемся
Евгений
Уровень 41
25 июля 2019, 17:28
О залипаниях Heroku читал но сам его не юзал. С AWS вообще никаких проблем. Сама тема с AWS выходит далеко за рамки простого деплоя, там куча интересных сервисов на любой вкус, кошелек и задачу. Сейчас много компаний переходит на сервисы AWS не только из-за стоимости но и из-за огромного функционала которого нет у конкурентов облачных решений. Но как говориться на вкус и цвет все фломастеры разные... Спасибо за личный опыт.