Spring + SPA -> darmowy deployment na AWS Free Tier

1

Cześć,

piszę sobie swoją aplikację i chciałbym ją zdeployować na AWS w ramach darmowej wersji. Temat jest dla mnie zupełnie nowy i nie wiem jak do niego podejść.
Mój stack to SPA (Vue), Spring WebFlux, MongoDB. Front z backendem łączy się przez RSocket (websocket). Do deploya potrzebuję Apache (w WebFluxie nie da się forwardować requestów, więc kopiowanie htmla do /static odpada), javy, bazy mongo.

  1. Docker -> ogólnie udało mi się appkę uruchomić dockerem na lokalnym Windowsie, jednak zbudowane obrazy zajmują 1 GB. Limit dla AWS ECR to 500 MB, no i uploadowanie 1GB przy każdym deployu będzie męczące
  2. AWS Beanstalk -> nie próbowałem, bo wpadłem na to pisząc ten tematu tutaj.
  3. Zrobienie tasków na ECS w oparciu o dockerowe obrazy, volume dla źródeł i kopiowanie tam frontu i .jar
  4. ?

Czy ktoś robił coś takiego i może polecić w jaki sposób to deployować?

0

@OtoKamil: docker images

mongo                   4.2                 2b2cc1f48aed        7 days ago          388MB
httpd                   2.4                 ccbcea8a6757        2 weeks ago         166MB
openjdk                 13.0.2-jdk          ff31919fd91c        3 months ago        491MB

JAR backendu zajmuje 58 MB, front może z 7 MB, a baza to też pewnie kilka MB. Po zbudowaniu te dockerowe obrazy dość ciężkie są, ale jeśli ich upload sprawiłby, że appka rusza z palca to idzie to przeboleć ;)
PS. Z dockerem mam do czynienia od paru dni, więc może coś mylę.

2

Obraz openjdk jest faktycznie duży (497MB) i nic z tym nie zrobisz jeśli bazujesz na tym obrazie. Ale możesz poszukać jakiejś minimalnej wersji alpine + java np anapsix/alpine-java

Jest o tym cały wątek na SO

1

Hej, ja też tutaj nie mam doświadczenia, ale wydaje mi się, że:

  1. Możesz wszystko wrzucić na EC2 (Elastic Cloud Compute), czyli najzwyklejszy serwer AWSowy, który używa EBS (Elastic Block Store) do trzymania danych "na dłużej" - wydaje mi się, że zmieścisz się w ramach free tier.
  2. Ale po co tak robić, skoro cała idea korzystania z AWS opiera się na wykorzystaniu poszczególnych usług? Obraz aplikacji javovej, po odchudzeniu, spokojnie zmieści się na ECR (Elastic Conteiner Registry), możesz go odapalić przy użyciu np. Fargate, do trzymania danych wykorzystaj DynamoDb (a jeśli chcesz korzystać z MongoDB, polecam chmurowy Atlas MongoDB). Co do frontendu, to się nie znam, statyczny można trzymać na S3 (Simple Storage Service), a w Twoim przypadku, zdaje się, potrzebowałbyś do tego pewnie nowej instancji EC2?
0

Ja wrzucałem na Beanstalka, ale Spring Bootową apkę z podpiętą bazą MySQL na AWS RDS tylko, że to MVC. Wystarczył zwykły .jar i odpowiednio skonfigurowane app.properties w aplikacji i ich powiązanie z environment properties w AWS. Tylko coś mi się wydaje, że Twój przypadek nie jest taki prosty. :)

0

AWS ECS, ECR, jakieś clustry, jakieś taski, EC2, S3, Beanstalk, Fargate, load balancery, scaling groups, DynamoDB itp itd... Siedziałem cały dzień i rozkminiałem co do czego, do tego każde z tych pojęć + pricing w googlach, żeby przypadkiem czegoś nie zaznaczyć i nie dać się ogolić na grube dolary. Głowa mnie od tego rozbolała.

Wyczyściłem wszystko. Postawiłem linuxa na EC2 (mimo, że całe życie pracuję na Windowsie, no ale tak wypada). Zalogowałem się po ssh, zainstalowałem dockera, pobrałem swoje obrazy, działa.

Problem polegał na tym, że mam dwa dockerowe obrazy z kodem, front i backend. hub.docker.com pozwala na 1 obraz w prywatnym repozytorium. Z pomocą przyszedł GitLab, który w prywatnym repo daje 10 GB. Do tego moje obawy względem wielkości obrazów były bezzasadne. Docker ma warstwy, więc tylko pierwszy push i pull był ciężki, kolejne to tylko przesyłanie kodu. Na tym etapie projektu takie rozwiązanie mi spokojnie wystarcza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1