AWS CodeStar – gwiazdy tańczą na kodzie

Słyszeliście już o AWS CodeStar? Nie? To świetnie! Przygotuj swoją wyobraźnię i ruszamy 🙂

Set your mind.

Cześć, załóżmy, że jesteś programistą.. nie jesteś? BOOOM! Już jesteś 🙂

Wyobraź sobie ten moment kiedy wpadasz na fantastyczny pomysł, pierwsza myśl jaka przychodzi Ci do głowy to „wooow to jest genialne, zaczynam startup, dlaczego tego jeszcze nikt nie wymyślił, a jak wymyślił to czemu nie stworzył? Musze szybko brać się do roboty, żeby ktoś mnie nie uprzedził”.. Często to tak wygląda zapewne, przynajmniej ja mam takie wrażenie. Pewnie nie naciągnę rzeczywistości kiedy powiem, że mniej więcej każdy startup tak właśnie się zaczyna.

Najpierw jest pomysł, jeżeli jesteś programista to zaczynasz sam coś Tworzyć na własnym komputerze – najlepiej jeszcze jak Twój laptop jest obklejony stickerami, wtedy plus 10 punktów więcej do many 🙂 mój jest obklejony 😛 Później jest Was dwóch, dwóch programistów, dziewczyny też są programistami! Pewnie macie jakieś repozytorium kodu dostępne publicznie, pewnie teraz jest to GIT. Macie wspólne repozytorium, do którego commitujecie swoje zmiany, mergujecie się – to krok do przodu od wysyłania sobie kodu mailem.

Ale co zbudowaniem aplikacji, bazą danych? Pewnie macie to wszystko uruchomione lokalnie bo jak już będzie pora to zainwestujecie w jakąś maszynkę i postawicie ją w mieszkaniu i to będzie Wasz serwer z wyjściem na świat, a później jak już będziecie mieć prawdziwy zespół, to na pewno wykupicie hosting u dostawcy XY – X dostarczy Wam hosting serwera aplikacji, Y bazę danych, a repozytorium z kodem macie u Z. Do tego jeszcze musicie przemyśleć proces budowania, wgrywania paczek i dbania o spójność kodu względem bazy.

Dużo rzeczy do ogarnięcia co? Jeszcze jedno, ciekawe ile razy po drodze zmarnowaliście czas na zastanawianie się dlaczego u mnie to działa, a u niego nie?

Jeżeli interesowałeś się do tej pory technologiami w chmurze publicznej to być może powiesz teraz, że przecież to już jest dostępne:

  • repozytorium kodu jest na GitHub’ie – link
  • aplikację można uruchamiać na Heroku – link
  • bazę postgres też można mieć na Heroku – link
  • proces Continuous Integration i Continuous Delivery można skonfigurować na TravisCi – link
  • a zarządzanie zadaniami w projekcie przenieść do Waffle – link

Zgadza się, nie ma co do tego żadnych wątpliwości, też korzystałem z takiego stosu, ale czy nie byłoby prościej gdyby wszystko było w jednym miejscu? Byłoby, dlatego pokaże Ci AWS CodeStar

AWS CodeStar

Więc czym jest AWS CodeStart? Moim zdaniem najlepszym źródłem wiedzy i miejscem gdzie powinno się zacząć jest strona projekty w AWS (link), oraz oczywiście mój blog i ten post 😛

Jak możemy przeczytać na stronie projektu, AWS CodeStart jest serwisem w chmurze Amazona, umożliwiającym stworzenie, zarządzanie i pracę z projektem IT. Głównym bytem jest projekt CodeStart, który pozwala na kodowanie, budowanie i deployowanie aplikacji. Oprócz tego w jednym miejscu możemy dodawać serwisy AWS oraz połączyć je ze sobą w jeden toolchain (nie wymyśliłem dobrego odpowiednika w języku polskim, wybacz).

Twój toolchain będzie zależał od tego jaki szablon wybierzesz dla swojego projektu – może składać się na niego repozytorium kodu GIT, proces budowania i deploymentu aplikacji, wirtualne instancje EC2 lub gdzieś wpięty serwis Lambda.

AWS CodeStar pozwala Ci również na bardzo (serio bardzo) wygodny sposób zarządzania uprawnieniami dla zespołu. Dodając użytkowników jako członków zespołu możesz w łatwy sposób nadawać im role jakie pełnią w zespole.

Jako dobry wstęp polecam również to video.

Co mogę zrobić z AWS CodeStart?

Krótko mówiąc,  AWS CodeStar pozwoli Ci na przygotowanie środowiska deweloperskiego dla całego zespołu. Idealne dla startupu, nie sadzisz?

  • W kilka minut rozpoczniesz pracę nad swoim nowym projektem, ponieważ dzięki gotowym szablonom AWS przygotuje dla Ciebie gotowy stack np. dla aplikacji WEB’owej czy REST’owej, a następnie sam z gotowych klocków dodasz np. bazę danych – AWS zadba o konfigurację wszystkiego, a Ty zaczniesz dopisywać swoje funkcjonalności.
  • Dodasz kolegów do zespołu, którzy nawet jeżeli nigdy na oczy nie widzieli konsoli AWS to od razu będą mogli pracować z repozytorium kodu – każdy ich commit’t kodu wywoła proces Continuous Deployment
  • Będziesz mógł zarządzać zadaniami, przypisywać je do członków zespołu
  • Stworzysz WIKI z informacjami o projekcie

Jak zaczniemy naszą przygodę z AWS CodeStart?

  • Przeprowadzę Cię proces stworzenia nowego projektu
  • Pokażę jak zarządzać rolami w projekcie i jak skonfigurować rolę do pracy z repozytorium kodu GIT
  • Opiszę główne funkcje do pracy z projektem
  • Uruchomimy aplikacje na Spring’u, która wystawi bardzo prosty serwis REST
  • Wprowadzimy zmianę i zobaczymy jak działa pipeline Continuous Delivery

Nowy projekt

Serwis AWS CodeStar znajduje się w grupie Developer Tools. Klikamy Create New Project i zaczynamy. Pierwszy krok to wybranie template ze stack’u technologicznego przygotowanego przez AWS. Możemy wybrać od Rubiego, przez Jave, Node.js, statyczną stronę WWW z JavaScriptyrm, aż po Rubiego. Co jest fajne, każda konfiguracja występuje w kilku wersjach. W zależności od języka, o który jest oparta możemy wybrać wersję deployowaną na zarządzana przez nas instancję EC2 lub na konfigurację BeanStalk lub po prostu bezserwerowo (serverless) jako funkcja Lambda.

Chcemy stworzyć aplikację opartą o Spring’a, która wystawia serwis po REST, dodatkowo wybierzmy taką konfigurację, która nie będzie deploy’owana na instancji EC2 tylko zostanie uruchomiona jako funkcja Lambda. W kolejnym kroku podajemy tylko nazwę dla naszego projektu, naciskamy next i oddajemy głos do studia, czyli pozwalamy AWS’owi na przygotowanie środowiska.

To co się dzieje teraz pod maską może potrwać, czas provisioningu całego środowiska zależy od tego co musi przygotwać za nas AWS. W naszym przypadku trwało to bardzo szybko ze względu, że wybraliśmy wersję serverless. Gdybyśmy jednak zdecydowali się na wersję z instancją EC2, mogłoby to potrwać nawet kilka minut, ponieważ AWS musiał by przygotować instancję, uruchomić ją, a wiemy zawsze to chwilę trwa. No dobrze ale my wybraliśmy opcję z Lambda, więc co tam się wydarzyło?

Po pierwsze AWS przygotował dla nas repozytorium GIT w serwisie CodeCommit. Jak widać wygląda to podobnie do tego co daje nam GitHub, możemy poruszać się po drzewku projektu, a na dole mamy widoczną zawartość pliku READMY.md, po lewej stronie możemy przełączać się miedzy branchami albo obejrzeć wizualizację commitów.

Po drugie w zakładce z funkcjami Lambda możemy teraz znaleść przygotowane dwie funkcje dla GET i POST, które zostały utworzone na bazie kodu z com.aws.codestar.projecttemplates.handler.HelloWorldHandler. Dodatkowo dla powyższych funkcji AWS stworzył automatycznie role pozwalającą na uruchamianie ich. Jak widzisz, trochę się dzieje poza naszą kontrolą ale ważne jest aby mieć tego świadomość – jeżeli chcesz dokładnie wiedzieć jak AWS przygotował te funkcje to możesz to sprawdzić w serwisie CloudFormation – widać tam ładnie jak krok po kroku wygląda proces przygotowania funkcji na bazie kodu JAVA.

Po trzecie w AWS CodePipeline możemy sprawdzić pipeline dla CI/CD (Continuous Integration/Continuous Delivery). Nasz pipeline składa się z trzech kroków

  1. AWS CodeCommit – push zmian do GIT’a
  2. AWS CodeBuild – zbudowanie paczki z nowym kodem aplikacji
  3. AWS CloudFormation – deploy nowych funkcji Lambda

Wszystko to o czym wspomniałem mamy widoczne na głównym dashbordzie AWS CodeStart – uważam osobiście, że jest to bardzo wygodne. Link do endpointu dostępnego publicznie mamy w prawnym górnym rogu w sekcji Application endpoints.

Dodajemy naszą gwiazdę

Na tą chwile jedyne konto jakie posiadam w AWS to konto ROOT, z przyczyn oczywistych, tzn. z ogromnej ilości uprawnień jakie na tym koncie posiadamy, nie powinno być ono używane do pracy z repozytorium GIT – nawet sam AWS na to nie pozwoli. Żeby móc pobrać kod z repozytorium, pushować zmiany i ogólnie pracować z serwisem CodeStar, dodamy konto dla nowego członka zespołu. W tym celu przejdziemy do serwisu IAM i w sekcji Users tworzymy nowego użytkownika. Dla celów jedynie testowych wybrałem dla niego jedynie dostęp przez konsole oraz odznaczyłem dla niego wymuszenie hasła po pierwszej próbie logowania.

Dodajemy AWSCodeStarFullAccess jako jedyną politykę prywatności. Następnie klikamy do końca procesu tworzenia użytkownika.

Musimy jeszcze naszemu użytkownikowi dać możliwość pracy z kodem w repozytorium GIT, w tym celu wybieramy naszego użytkownika z listy w zakładce Users. Przechodzimy do zakładki Security Credentials i na samym dole formatki w sekcji HTTPS Git Credentials for AWS CodeCommit. AWS wygenerował dla nas login i hasło, które pozwolą nam poprać kod projektu i wprowadzać zmiany w repozytorium GIT – możemy skopiować sobie sami te credentiale lub pobrać w postać pliku CSV.

Wydaje się, że to już wszystko ale my dodaliśmy narazie jedynie naszego programistę – aby móc rozpocząć pracę z projektem, musimy jeszcze dodać go jako członka zespołu. Aby to zrobić, w module CodeStar przechodzimy do zakładki Team i wykonujemy akcję Add team member. Ważne aby nadać mu odpowiednią rolę i remote access. Ja dodałem sobie Owner co pozwoli mi na pobieranie i wprowadzanie zmian do kodu. Podobne uprawnienia będzie mieć Contributor – dobrze się domyślasz ze Viewer będzie mógł jedynie pobrać kod.

 

Praca z projektem

Zanim pobierzemy kod aplikacji i zanim wprowadzimy w nim jakieś zmiany zobaczmy co zwraca nam funkcja lambda. Link do endpointu REST dostępnego publicznie – jak pokazałem wcześniej – jest w prawym górnym rogu panelu głównego. Na razie funkcja Lambda zwraca standardowe i przez wszystkich uwielbiane Hello World! A my w naszym przykładzie chcemy przywitać się ze wszystkimi fanami strony http://chmurowisko.pl. Swoją drogą ciekawe czy Mirek to czyta 🙂 Ok zobaczmy nasze Hello World po bezpiecznym https.

Clone

Na głównym panelu CodeStar w zakładce Commit musimy pobrać link https do naszego repozytorium.

Mamy już wszystko aby zbudować link i pobrać kod z repozytorium tj, login użytkownika, hasło i link HTTPS.

git clone https://{USER_NAME}:{USER_PASS}@{GIT_REPO_URI}

W moim przypadku wygląda to tak:

git clone https://jbogacz-at-680513014599:***********@git-codecommit.eu-west-1.amazonaws.com/v1/repos/lambdacodestard

 Make changes, commit and push

W tym miejscu nie będę się skupiać na analizie kodu, który odpowiada za obsługę endpoint’u, jedynie chcę Ci pokazać, że po wprowadzeniu zmiany, akcji commit i push zostanie to przechwycone przez pipeline i kod powędruje w chmury 🙂 Więc przywitajmy się z chmurowiskiem i zmieńmy klasę HelloWordlHandler na:

package com.aws.codestar.projecttemplates.handler;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import java.util.HashMap;
import java.util.Map;

import com.aws.codestar.projecttemplates.GatewayResponse;

/**
 * Handler for requests to Lambda function.
 */
public class HelloWorldHandler implements RequestHandler<Object, Object> {

    public Object handleRequest(final Object input, final Context context) {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        return new GatewayResponse("{ \"Output\": \"Hello Chmurowisko i Chmuromaniacy!\"}", headers, 200);
    }
}

GIT COMMIT i GIT PUSH

cd lambdacodestard/
git commit . -m "First commit"
git push
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 671 bytes | 0 bytes/s, done.
Total 11 (delta 3), reused 0 (delta 0)
To https://jbogacz-at-680513014599:sEggNhm2b5jMcRtqHCs1yRwN51hbAM9pBQvg3MjwyDA=@git-codecommit.eu-west-1.amazonaws.com/v1/repos/lambdacodestard
   fa19aea..673b268  master -> master

Pipeline przechwycił commit i uruchomił flow Continuous Deployment

Czołem chmuromaniacy!

 

Podsumowanie

I jesteśmy na końcu naszej dzisiejszej wycieczki, która dla mnie trwała kilka dni. Jeżeli chodzi o moje zdanie na temat CodeStar i podsumowanie gdzie widzę ten produkt to widzę go jako:

  1. Doskonałe narzędzie dla małych kumpelskich projektów gdzie trzymanie kodu w publicznym repo GitHub’a i rozproszenie procesu delivery nie pasuje nam
  2. Startup Startup Startup – tak, idealne miejsce gdzie można zacząć swój projekt z całą infrastrukturą pozwalającą na zarządzanie nim i współpracę z team memberami
  3. Dla siebie, jeżeli chcemy zapoznać się z szablonami projektów przygotowanymi przez zespół AWS

AWS CodeStar nie jest niczym nowym, jest po prosty czymś mega wygonym co przykrywa dla nas istniejące od jakiegoś czasu produkty AWS. Robi pod spodem czary mary i zestawia ze sobą wszystko co tworzy środowisko do deweloperskie do kodowania, budowania, testowania i deploymentu aplikacji.

Dzięki!

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *