Jak wdrożyć aplikację Play do AWS

Amazon Web Services – AWS – jest jedną z najpopularniejszych platform Cloud. Hostuje ponad 200 unikalnych usług, w tym hosting kontenerów docker, load balancer, hosting baz danych, przechowywanie plików.

CloudCaptain – Boxfuse

CloudCaptain (wcześniej znany jako Boxfuse) to narzędzie, które tworzy minimalne, niezmienne instancje Twojej aplikacji i pozwala na łatwe wdrożenie ich do AWS. Ponieważ są to w zasadzie instancje VM, zapewniają, że całe środowisko jest takie samo, niezależnie od tego, czy uruchamiasz je na lokalnej maszynie, środowisku testowym czy produkcyjnym.

Pierwsze rzeczy, które musisz zrobić, aby rozpocząć korzystanie z CloudCaptain to:

  1. Tworzenie konta CloudCaptain
  2. Podłączanie konta AWS do konta CloudCaptain
  3. Instalowanie klienta CloudCaptain
  4. Instalowanie VirtualBox

Konfiguracja połączenia z bazą danych

Jeśli Twój projekt używa sterownika PostgreSQL lub MySQL JDBC, CloudCaptain automatycznie go wykryje, utworzy bazę danych poprzez „Database auto-provisioning” i skonfiguruje źródło danych w konfiguracji Play. W środowisku dev uruchomi maszynę wirtualną ze skonfigurowaną bazą danych. Dla środowisk test i prod automatycznie połączy się z pojedynczą lub wielozadaniową instancją AWS RDS.

Jeśli nie chcesz jawnie ustawić połączenia z bazą danych do źródła danych CloudCaptain, możesz użyć zmiennych środowiskowych przekazywanych do tworzonej maszyny wirtualnej.

  • BOXFUSE_DATABASE_URL – database JDBC url
  • BOXFUSE_DATABASE_USER – username
  • BOXFUSE_DATABASE_PASSWORD – password

Jeszcze jedną przydatną zmienną jest BOXFUSE_HOST_IP. Reprezentuje ona adres IP twojego hosta. Pozwoli Ci to na połączenie się z bazą danych hostowaną na Twoim komputerze za pomocą sieci LAN – więc będzie to działać tylko w środowisku dev . Jeśli nie będziesz używał „Database auto-provisioning”, powinieneś dodać -db.type=none do polecenia.

Konfiguracja Play

Ponieważ CloudCaptain uruchamia aplikację Play w trybie produkcyjnym, należy ustawić sekret aplikacji Play w pliku application.conf. Kolejną rzeczą, którą należy ustawić jest filtr allowed hosts filter. Musisz zezwolić na połączenia z wszystkich IP. Powinno to wyglądać tak:

play.filters.hosts.allowed = ["."] 

 

Budowanie aplikacji Play

Następnie, po konfiguracji, nadszedł czas na zbudowanie aplikacji. Musisz wejść do katalogu głównego swojej aplikacji i uruchomić:

sbt clean dist 

To polecenie usuwa poprzednie dane kompilacji i tworzy archiwum.zip z aktualną wersją aplikacji. Będzie ono również zawierać wszystkie pliki konfiguracyjne.

Uruchomienie i wdrożenie aplikacji do AWS

Nadszedł czas na uruchomienie aplikacji w środowisku dev lokalnie na Twoim komputerze. W tym celu należy uruchomić poniższe polecenie z głównego katalogu projektu.

boxfuse run -env=dev 

Polecenie to łączy spakowaną aplikację Play z minimalnym obrazem maszyny wirtualnej CloudCaptains i uruchamia ją lokalnie. Jak wspomniano wcześniej, jeśli nie chcesz używać „Database auto-provisioning”, powinieneś dodać -db.type=none do powyższego poelcenia.

Kiedy jesteś gotowy do wdrożenia swojej aplikacji do środowiska prod na AWS, musisz tylko uruchomić:

boxfuse run -env=prod 

 

Aktualizacje aplikacji na AWS

CloudCaptain obsługuje niebieskie/zielone wdrożenie. Ta metoda wypuszczania aplikacji pozwala na aktualizacje bez przestojów. Stworzy on nowy węzeł, na którym uruchomiona zostanie nowa wersja Twojej aplikacji i stopniowo przeniesie na niego cały ruch.

Aby zaktualizować aplikację na produkcji, wystarczy podbić numer wersji aplikacji w pliku config, zbudować ją za pomocą tego samego polecenia co poprzednio i uruchomić:

 

boxfuse run -env=prod 

 

Ważna uwaga!

Upewnij się, że uruchamiasz swoją aplikację na tej samej wersji Javy, której użyłeś do jej zbudowania. CloudCaptain domyślnie użyje najnowszej wersji OpenJDK. Możesz to nadpisać dodając -components.openjdk=x.x.x do boxfuse runcommand, gdzie x.x.x oznacza wersję OpenJDK.