Lekcja 3 – jak dzięki CodeDeploy mój kod powędrował w chmury

Cześć, w tej części postawimy ostatnie kroki po stronie konsoli AWS aby dokończyć naszą konfigurację flow dla CodeDeploy. Na początek podsumujmy to co zrobiłeś podczas dwóch poprzednich lekcji:

  1. Zakładam, że ściągnąłeś kod z mojego GitHub’a
  2. Stworzyłeś role dla CodeDeploy i EC2.
  3. Stworzyłeś instancję serwera EC2 z zainstalowanym agentem CodeDeploy.
  4. Przygotowałeś bucket w serwisie S3.

To co dzisiaj zrobimy, to ostatni krok w konfiguracji procesu CodeDeploy:

  1. Zarejestrujemy naszą aplikację.
  2. Stworzymy Deployment Group i omówimy możliwe scenariusze.
  3. Zarejestrujemy aplikację w TravisCI i finalnie uruchomimy deployment.
  4. Omówimy zakładkę AWS CodeDeploy -> Deployments

To czego dzisiaj nie zrobimy:

  1. Nie założymy Ci konta na GitHub, nie „wypuszujemy” aplikacji do repozytorium – zakładam śmiało, że potrafisz zrobić to sam 🙂
  2. Nie omówimy kluczowych parametrów konfiguracji dla TravisCI i skryptów dla deployment’u – zrobimy to w następnej lekcji.

Do dzieła!


Na początek przypomnę Ci plik konfiguracyjny Travis’a. Pola z tego pliku będą się mapować na pola podczas konfiguracji CodeDeploy.

##
## TravisCI build and deploy to AWS
##
language: java
jdk: oraclejdk8
cache: bundler
script:
  - ./mvnw package -DskipTests

before_deploy:
  - mkdir -p dpl_cd_upload
  - zip -j package.zip target/hello-0.0.1-SNAPSHOT.jar deployment/*
  - cp package.zip dpl_cd_upload/package.zip
deploy:
  - provider: s3
    access_key_id: ******
    secret_access_key: &1
      secure: ******
    local_dir: dpl_cd_upload
    skip_cleanup: true
    on: &2
      repo: jbogacz/CodeDeployDemo
    region: eu-west-1
    bucket: codedeploy-demo-bucket-1234
  - provider: codedeploy
    access_key_id: *******
    secret_access_key: *1
    region: eu-west-1
    bucket: codedeploy-demo-bucket-1234
    key: package.zip
    bundle_type: zip
    application: CodeDeployDemo
    deployment_group: CodeDeployDemoGroup
    on: *2

Aby zarejestrować naszą aplikację przechodzimy do AWS CodeDeploy w sekcji Developers Tools i uruchamiamy wizard’a. Wybieramy Custom deployment (Sample deployment zbuduje i uruchomi aplikację demo).

Podajemy nazwę aplikacji oraz grupę deployment’u oraz wybieramy In-place deployment (może w którymś z kolejnych postów opiszę Blue/green).

Pamiętasz jak w poprzednim wpisie gdy tworzyliśmy instancję EC2 wspomniałem, że przyda nam „otagowanie” tej instancji? Dokładnie, przyda nam się teraz do wskazania, na którą instancję ma zostać dokonany deployment CodeDeploy.

Pozostaje nam jeszcze wybrać sposób deployment – w naszym przypadku nie ma to znaczenia, ponieważ i tak mamy jedynie jedną instancję. Mamy do wyboru trzy tryby:

  1. OneAtATime – maszyny dotykane są sekwencyjnie, w jednym czasie zatrzymywana, deploy’owana, startowana jest tylko jedna maszyna. Zawsze N-1 maszyn działa i może obsługiwać żądania.
  2. AllAtOnce – deployment dokonywamy jest na wszystkich instancjach jednocześnie.
  3. HalfAtATime – deployment dokonywany jest jednocześnie maksymalnie na połowie instancji EC2

W trybie HalfAtATime istotne jest to że musimy mieć minimum dwie instancję – sam spędziłem jakąś chwilę szukając w czym jest problem, ponieważ AWS kończył błędem gdy przy jednej instancji okazywało się jedna ubita instancja to mniej niż 50% wszystkich 🙂

Musimy przypisać jeszcze role dla serwisu CodeDeploy, definiowaliśmy ją z rolą dla EC2, teraz przyda nam się tutaj.

Bada bing, bada boom, voila! U mnie działa 😀 😀

Wygodnym miejscem w module CodeDeploy jest zakładka Deployments. U mnie nie od razu poszło gładko z deployment’em jak widzisz:

Mam nadzieję, że przygotowałem opis na tyle szczegółowo, że Tobie również udało się dość do końca z sukcesem. Jeżeli masz ochotę to podziel się wnioskami w komentarzu.

3 comments on “Lekcja 3 – jak dzięki CodeDeploy mój kod powędrował w chmury

Leave a Reply

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