Lekcja 2 – Agent z licencją na CodeDeploy

Witaj,

W poprzednim poście opisałem Ci z jakich klocków zbudujemy flow dla procesu Continuous Delivery, jak domyślasz się będzie trzeba trochę poklikać w konsoli AWS ale spokojnie, postaram się pokazać wszystkie wymagane kroki.

Na koniec tej lekcji będziesz umiał w AWS

  1. Skonfigurować role dla EC2 i CodeDeploy
  2. Stworzyć EC2 i skonfigurować agenta dla CodeDeploy
  3. Przygotować bucket w serwisie S3 dla procesu deploymentu

A więc do dzieła, zaczynamy.


Role dla EC2 i CodeDeploy

Pierwszą rzeczą jaką zrobimy będzie dodanie dwóch roli IAM. Pierwsza pozwoli na prace z serwisem EC2 i to aby EC2 mogło rozmawiać z S3. Druga natomiast pozwoli aby CodeDeploy mógł paczkę z naszą aplikacją w S3, zainstalować i uruchomić na EC2.

Do serwisu IAM mamy dostęp z głównego ekranu „Services”, w sekcji „Security, Identity & Compliance”. Aby dodać nową rolę klikamy „Create role” i wybieramy „Amazon EC2”

Dodajemy dwie role:

  1. EC2CodeDeploy z uprawnieniem „AmazonS3FullAccess”
  2. CodeDeploy z uprawnieniami „AmazonEC2FullAccess” i „AutoScalingFullAccess”

Dodatkowo dla tej roli musimy zmienić „Trusted relationship”, defaultowo ustawione było na ec2.amazonaws.com a my potrzebujemy codedeploy.amazonaws.com

Snippet z JSON’em, który należy wkleić do edytora i zapisać

{
  "Version": "2017-05-03",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codedeploy.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

W ten oto sposób w kilku krokach dodaliśmy nowe role, które będziemy potrzebowali tworząc instancje serwisów dla naszego CodeDeploy Flow


EC2 + CodeDeploy Agent

Teraz będziemy potrzebować serwera EC2 z zainstalowanym Linuxem od Amazona – swoją drogą nie wiem czy wiesz ale jest to najczęściej wykorzystywany serwis przez klientów AWS’a (ranking popularności serwisów AWS) dlatego zdecydowanie powinieneś go lepiej poznać.

Na tą chwilę wystarczy nam wiedzieć, że w najprostszym przypadku użycia dodajemy nową instancje (tzw. on demand) przez wejście w zakładkę Services -> Compute -> EC2 i kliknięcie buttona Launch Instance.

 

Następnie wybieramy Amazon Linux AMI.

Nie wybieraj od razu Review and Launch, ponieważ będziemy potrzebowali wykonać kilka dodatkowych zmian.

Musimy zatrzymać się na chwilę na kroku 3 (Step 3: Configure Instance Details) – pamiętasz jak dodałeś specjalną rolę EC2CodeDeploy, żeby Twoja instancja mogła rozmawiać z serwisem S3 i mieć dostęp do bucket’u z Twoją aplikacją? Uff.. ale masz pamięć, mógłbyś być Keanu Reeves w „Johnny Mnemonic” 🙂

Dobrze, właśnie teraz wybieramy tą rolę. Ale to proste co? Zaczyna się wszystko układać w całość.

Kolejny krok, na którym musimy na chwilę się zatrzymać to krok 5 (Step 5: Add Tags), dodamy tag do naszej maszyny name=CodeDeployDemo, jest to dość istotne, ponieważ wrócimy do tego przy tworzeniu aplikacji i tzw. Deployment group w AWS CodeDeploy. Pokażę Ci jak bardzo może być przydatne odpowiednie nadawanie tagów przy projektowaniu CodeDeploy flow.

W kolejnym 6 kroku (Step 6: Configure Security Group) dla naszego serwera EC2 stworzymy nową Security Group, która pozwoli na łączenie się z jakiegokolwiek adresu IP na port SSH(22), HTTP(80) oraz 8080(na tym poracie nasłuchuje Tomcat, którego uruchomi nasza aplikacja ze Spring Boot). Dzięki takim ustawieniom będziesz mógł połączyć się do serwera poprzez terminal, a w przeglądarce WWW wyświetlić stronę testową naszej aplikacji.

W ostatnim kroku wybieramy Key pair dzięki, któremu będziemy łączyć się z naszą instancja.

Bada bing, bada boom, voila! W przeciągu kilkunastu/ kilkudziesięciu sekund nasza instancja będzie zainicjowana i gotowa do dalszej pracy 🙂


Ok, zakładam na tą chwilę, że potrafisz połączyć się do swojego serwera EC2 (jeżeli nie, to ten link Ci pomoże), więc teraz zainstalujemy na nim agenta, który będzie odbierać, żądania od procesu CodeDeploy.

Wszystkie komendy musimy wykonać jako root. Najpierw ściągniemy skrypt instalacyjny z publicznego S3 a następnie uruchomimy instalację

[ec2-user@ip-172-31-18-70 ~]$ sudo su
[root@ip-172-31-18-70 ec2-user]# cd /home/ec2-user/
[root@ip-172-31-18-70 ec2-user]# aws s3 cp s3://aws-codedeploy-eu-west-1/latest/install . --region eu-west-1
[root@ip-172-31-18-70 ec2-user]# chmod +x ./install
[root@ip-172-31-18-70 ec2-user]# ./install auto
[root@ip-172-31-18-70 ec2-user]# service codedeploy-agent status

Ostatnia komenda pokaże nam czy proces agenta działa i jaki jest jego PID

The AWS CodeDeploy agent is running as PID 2728

Działa! Idziemy dalej!


Konfiguracja bucket’u w S3

Będziemy potrzebowali jakiegoś miejsca przejściowego dla naszej paczki z aplikacją, którą zbuduje Travis dlatego utworzymy w serwisie S3 bucket o nazwie codedeploy-demo-bucket-1234. Co jest ciekawe i można przeczytać w dokumentacji od Amazon’a, nazwa bucket’u musi być na tyle unikalna, że nie może pokrywać się z nazwą bucket’ów innych user’ów (bucket name restrictions).

W konsoli AWS wchodzimy kolejno Services -> Storage -> S3 i wybieramy Create bucket, następnie w 4 krokach konfigurujemy bucket (oprócz nazwy wszystkie ustawienia zostawiamy defaultowe)

Voila! Nasz bucket jest widoczny na liście.

Podsumowanie

Na tą chwilę będzie to koniec, muszę Cie pochwalić bo dzisiaj na prawdę dużo razem zrobiliśmy 🙂

  1. Dowiedziałeś się jak konfigurować role i dodawać do rol uprawnienia
  2. Jak skonfigurować instancje serwisu EC2 z Linuxem
  3. Jak zainstalować agenta CodeDeploy
  4. Jak i po co dodaliśmy bucket S3

W kolejnej części skupimy się na pracy i przygotowaniu instancji serwisu AWS CodeDeploy

 

Leave a Reply

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