Skip to content

Latest commit

 

History

History
189 lines (135 loc) · 7.15 KB

M10.md

File metadata and controls

189 lines (135 loc) · 7.15 KB

Moduł 10

Rozpoczynamy tworzenie zasobów CICD, które zbudują nam zasoby pod aplikację. Zaczynam od instrukcji create-cicd-resources.pdf

  1. Repozytorium z kodem infrastruktury pod aplikację
  2. Repozytorium z kodem zasobów CICD
  3. Parametry SSM z ID kont AWS, na których znajdują się poszczególne środowiska
  4. Klucz KMS do szyfrowania artefaktów
  5. Zestaw ról do wdrażania infrastruktury pod aplikację
  6. Parametry SSM z nazwami ról
  7. Dokument SSM z kodem tworzenia użytkownika w bazie danych
  8. Pozostałe zasoby CICD – Bucket S3 na artefakty – Role dla AWS CodeBuild i AWS CodePipeline
  9. Projekty AWS CodeBuild: – Testowanie szablonów i zbudowanie artefaktów – Utworzenie użytkownika w bazie danych – Przesłanie plików do bucketów S3 – Specyfikacje buildspec.yaml dla każdego z projektów – Skrypty bashowe
  10. Pipeliny AWS CodePipeline – Pipeline do tworzenia zasobów Dodatkowo:
  11. Skrypt klonujący parametry środowiska (pod dodatkowe środowisko developerskie)
  12. Pipeline usuwający część zasobów
  13. AWS EventBridge rule + rola - do automatycznego uruchamiania pipeline po aktualizacji kodu na określonym branchu w określonym repozytorium kodu infrastruktury
  14. AWS EventBridge rule + rola - do uruchamiania pipelinów o określonej porze

Commands checklist

  • (3 ✏️) deploy-account-params.sh
  • () deploy-cicd-events.sh
  • (8) deploy-cicd-resources.sh
  • (6 ✏️) deploy-cicd-roles-parameters.sh
  • (5 ✏️) deploy-cicd-roles.sh
  • (9) deploy-create-db-user-project.sh
  • (12) deploy-delete-resources-pipeline.sh
  • (4) deploy-kms.sh
  • (10 ✏️) deploy-pipeline.sh
  • (7) deploy-ssm-command-create-db-user.sh
  • (9) deploy-test-config-project.sh
  • (9) deploy-upload-files-project.sh

Tworzenie zasobów CICD

obraz

Poniżej uwagi do powyższej checklisty, które nie są aż tak istotne jeśli podobnie do mnie budujesz zasoby 3 czy 4 raz :)

Rozwiń: Uwagi do budowania pipeline CICD

1 & 2. Repozytoria

Opis w oddzielnej instrukcji: create-code-repositories.pdf

Utworzyłem repozytoria na CodeCommit (odpalając skrypty z katalogu repositories), sklonowałem je (do odrębnych katalogów) poza kursowym repozytorium.

Następnie:

  • rozpakowałem kod infrastruktury memes-generator-infra.zip do katalogu z repozytorium memes-generator-shared-cicd-infra. Pliki wkomitowałem do gałęzi development.
  • rozpakowałem kod CI/CD memes-generator-cicd.zip do katalogu z repozytorium memes-generator-shared-cicd-cicd. Pliki wkomitowałem do gałęzi feature/cicd-resources-for-infra.

3. Parametry kont

Cześć parametrów w szablonie jest wykomentowana - pozostawiam jak jest. Plik parametrów należy uzupełnić o nr konta.

4. Klucz KMS

Szablon odwołuje się do nieistniejących parametrów (wykomentowanych w [3](#/3. Parametry kont)) Wykomentowuje je również tutaj.

5. Zestaw ról

Przed uruchomieniem uzupełniam parametry Arn klucza i nr konta w pliku cicd-roles-dev.json

aws cloudformation describe-stacks --stack-name memes-generator-cicd-kms-shared-dev --region eu-west-1
aws sts get-caller-identity

6. Parametry SSM z nazwami ról

W pliku parametrów cicd-roles-parameters-shared-dev.json podaje nazwy ról z outputu poprzedniego stack-a

aws cloudformation describe-stacks --region eu-west-1 --stack-name memes-generator-cicd-cicd-roles-dev

7. Dokument SSM tworzący usera DB

Odpalam skrypt. Update plików nie jest wymagany.

8. Pozostałe zasoby CICD

Odpalam skrypt. Update plików nie jest wymagany.

9. Projekty dla CodeBuild

Odpalam skrypty. Update plików nie jest wymagany.

10. Pipeline tworzący zasoby

Poprawiam nazwę akcji dla stage CreateDBUser - do szblonu wkradł się błąd Kopiego Pasta ;)

Weryfikuję, jakie parametry zostaną użyte podczas uruchomienia skryptu. Mam czyste konto - uruchamiam target stage dev. Odpalam skrypt. Update plików nie jest wymagany.

Utworzenie stack-a (a więc zasobu CodePipeline) od razu uruchamia ten pipeline. Dlatego warto spojrzeć jaki TargetStage infrastruktury aplikacji zostanie utworzony. Jeśli mamy pozostałości zasobów z poprzednich tygodni warto jest utworzyć nowy stage by nie kolidował. Klonowanie środowiska jest opisane w instrukcji.

Uruchomienie (ponownie) pipeline po utworzeniu

aws codepipeline start-pipeline-execution --name <NAZWA PIPELINE>

Efekt uruchomienia rurociągu

obraz

11. Klonowanie środowiska

Jeśli potrzeba wykonujemy z repozytorium infra gdzie sklonowane parametry trzeba wypchnąć. Całość opisana w klonowanie środowiska.

12. Pipeline usuwający część zasobów

Odpalam skrypty. Nieprawidłowa wartość dla parametru RepositoryName - kopiuje z pipeline-a tworzącego zasoby.

Usuwane zasoby

  • Autoscalling
  • Nat Gateway-e (A & B)
  • Load Balancer

obraz

Dalsze prace na bazie materiałów

1. Pipeline buduje zasoby dla Web-UI

Do pipeline-a tworzącego zasoby pod aplikację dodałem nowy stage DeployWebsiteResources a w nim akcje

  • stworzenie i uruchomienie changeset-u dla bucketu na statyczne pliki strony
  • stworzenie i uruchomienie changeset-u dla dystrybucji CloudFront i bucket policy umożliwiającej dostęp do plików strony przez CF

obraz

Zasoby do budowania strony

Do plików z zasobami CICD (aby było prościej, normalnie stworzyłbym osobny projekt) dodaję

1. Repozytorium CodeCommit dla plików źródłowych strony web

obraz

2. Bucket na zbudowane statyczne pliki

Wiaderek tworzyliśmy już tyle...

3. Do repozytorium dodaję buildspec

# some parts ommited
phases:
  install:
    runtime-versions:
      nodejs: 12.x
    commands:
      - npm install
  build:
    commands:
      - npm run build
...
# some parts ommited

4. Tworzę projekt CodeBuild

Okazuję się że wystarczy jeden projekt CodeBuild aby:

  • pobrać źródła strony z brancha develpment repozytorium,
  • wywołać instalacje zależności i budowanie statycznych zasobów (patrz buildspec),
  • umieścić pliki z folderu build w bucket-cie na pliki statyczne

Efekty

Projekt CodeBuild

Statyczne pliki