Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

18 sierpnia 2023

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

W ubiegłym tygodniu zespół Developer Tools ogłosił, że AWS CodeBuild obsługuje teraz GitHub Actions. AWS CodeBuild to w pełni zarządzana usługa ciągłej integracji, która umożliwia budowanie i testowanie kodu. Kompilacje CodeBuild są definiowane jako zbiór poleceń kompilacji i powiązanych ustawień w formacie YAML, o nazwie BuildSpec. Możesz teraz definiować kroki GitHub Actions bezpośrednio w BuildSpec i uruchamiać je razem z poleceniami CodeBuild. W tym artykule autorzy użyją akcji Liquibase GitHub do wdrożenia zmian w bazie danych Amazon Aurora w prywatnej podsieci.

Tło

GitHub Marketplace zawiera duży katalog działań opracowanych przez inne firmy i społeczność open source. W chwili pisania tego tekstu na rynku dostępnych jest prawie 20 000 akcji. Korzystanie z akcji z rynku może zaoszczędzić czas i wysiłek, które zostałyby poświęcone na tworzenie skryptów instalacji i konfiguracji różnych narzędzi wymaganych w procesie kompilacji.

Chociaż twórcy uwielbiają działania GitHub, często chcą uruchomić moją kompilację w AWS. Na przykład mogą chcieć uzyskać dostęp do zasobu w prywatnym VPC lub po prostu zmniejszyć opóźnienie między usługą kompilacji a moimi zasobami. Mogliby to osiągnąć, udostępniając GitHub Action Runner na Amazon Elastic Compute Cloud (Amazon EC2). Jednak hostowanie elementu uruchamiającego GitHub Action wymaga dodatkowego nakładu pracy w celu skonfigurowania i utrzymania środowiska, w którym znajduje się element uruchamiający.

AWS CodeBuild to w pełni zarządzana usługa ciągłej integracji. CodeBuild nie wymaga ciągłej konserwacji i może uzyskiwać dostęp do zasobów w prywatnej podsieci. Możesz teraz używać GitHub Actions w AWS CodeBuild. Ta funkcja zapewnia uproszczoną konfigurację i zarządzanie CodeBuild z bogatym rynkiem GitHub Actions. W poniższej sekcji dowiesz się, jak skonfigurować CodeBuild do uruchamiania akcji GitHub.

Przewodnik

W tym instruktażu autorzy skonfigurują AWS CodeBuild, aby używał akcji Liquibase GitHub do wdrażania dzienników zmian w bazie danych PostgreSQL hostowanej na Amazon Aurora w prywatnej podsieci. Jak pokazano na poniższym obrazku, AWS CodeBuild zostanie skonfigurowany do działania w prywatnej podsieci wraz z moją instancją Aurora. Najpierw CodeBuild pobierze akcję GitHub przy użyciu bramy NAT w celu uzyskania dostępu do Internetu. Po drugie, CodeBuild zastosuje dziennik zmian do instancji Aurora w prywatnej podsieci.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Masz już repozytorium GitHub z właściwościami konfiguracyjnymi Liquibase i dziennikami zmian pokazanymi na poniższym obrazku. Konfiguracja Liquibase nie jest tematem tego wpisu na blogu, ale możesz przeczytać więcej w Wprowadzenie do Liquibase. Omawiane źródło zawiera również plik buildspec.yaml, który zostanie wyjaśniony w dalszej części tego wpisu.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Aby utworzyć swój projekt kompilacji, otwórz CodeBuild w konsoli AWS i wybierz Create build project. Następnie podaj nazwę i opcjonalny opis kompilacji. Twój przykładowy projekt nazywa się liquibase-blog-post.

Jeśli masz już połączenie z GitHub, możesz połączyć się przy użyciu osobistego tokenu dostępu, jak pokazano na poniższej ilustracji.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Po pomyślnym połączeniu z GitHub możesz wkleić adres URL do mojego repozytorium, jak pokazano na poniższym obrazku.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Skonfiguruj swoje środowisko kompilacji tak, aby korzystało ze standardowego środowiska kompilacji w Amazon Linux 2. Akcje GitHub są budowane przy użyciu JavaScript lub kontenera Docker. Jeśli akcja używa kontenera platformy Docker, musisz włączyć flagę Privileged. Obraz Liquibase używa kontenera Docker, dlatego zaznacz pole, aby włączyć tryb uprzywilejowany.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

W przypadku konfiguracji VPC wybierz VPC i prywatną podsieć, w której hostowana jest Twoja instancja Aurora, a następnie kliknij Validate VPC Settings, aby upewnić się, że Twoja konfiguracja jest poprawna.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Twój plik Buildspec jest zawarty w źródle. Dlatego wybierz Use a buildspec file i wpisz ścieżkę do pliku buildspec w repozytorium.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Twój plik buildspec.yaml zawiera następującą treść. Zauważ, że faza pre_build indukuje serię poleceń. Polecenia zawsze były obsługiwane w CodeBuild i obejmują serię poleceń wiersza poleceń do uruchomienia. W tym przypadku po prostu zarejestruj kilka zmiennych środowiskowych do późniejszego debugowania.

version: 0.2
phases:
  pre_build:
    commands:
      - echo $AWS_DEFAULT_REGION
      - echo $URL
  build: 
    steps:
      - uses: liquibase-github-actions/update@v4.21.1
        with:
          changelogFile: changelog-root.xml
          url: ${{ env.URL }}
          username: postgres
          password: ${{ $env.PASSWORD }}
          headless: true

Zauważ również, że faza kompilacji obejmuje szereg kroków. Kroki są nowe i służą do uruchamiania akcji GitHub. Każda faza kompilacji obsługuje listę poleceń lub listę kroków, ale nie oba jednocześnie. W tym przykładzie określ akcję aktualizacji Liquibase (liquibase-github-actions/update) z kilkoma parametrami konfiguracyjnymi. Możesz zobaczyć pełną listę parametrów w repozytorium Liquibase Update Action na GitHub.

Zwróć uwagę na zmienne środowiskowe używane w pliku buildspec.yml. Pamiętaj, że przekazujesz adres URL i HASŁO do swojej bazy danych jako zmienne środowiskowe. Pozwala to łatwo zmieniać te wartości z jednego środowiska do drugiego. Skonfigurowałeś te zmienne środowiskowe w definicji projektu CodeBuild, jak pokazano na poniższym obrazku. Adres URL jest skonfigurowany jako Zwykły tekst, a HASŁO jest skonfigurowane jako Secrets Manager. Uruchomienie akcji GitHub w CodeBuild ma tę dodatkową zaletę, że masz łatwy dostęp do sekretów przechowywanych w AWS Secrets Manager i danych konfiguracyjnych przechowywanych w AWS Systems Manager Parameter Store.

Uruchamianie GitHub Actions w prywatnej podsieci z AWS CodeBuild

Należy również zauważyć, że składnia używana do uzyskiwania dostępu do zmiennych środowiskowych w pliku buildspec.yaml jest inna w przypadku korzystania z akcji GitHub. Akcje GitHub uzyskują dostęp do zmiennych środowiskowych przy użyciu kontekstu środowiska. Dlatego w fazie pre_build używasz składni CodeBuild w formacie $NAME. Natomiast w fazie kompilacji użyj składni GitHub w formacie ${{env:NAME}}.

Po zakończeniu konfiguracji wybierz Create build project, a następnie ręcznie uruchom kompilację, aby przetestować konfigurację. W poniższym przykładzie możesz zobaczyć logi z aktualizacji Liquibase. Zauważ, że dwa zestawy zmian zostały pomyślnie zastosowane do bazy danych.


####################################################
##   _     _             _ _                      ##
##  | |   (_)           (_) |                     ##
##  | |    _  __ _ _   _ _| |__   __ _ ___  ___   ##
##  | |   | |/ _` | | | | | '_ \ / _` / __|/ _ \  ##
##  | |___| | (_| | |_| | | |_) | (_| \__ \  __/  ##
##  \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|  ##
##              | |                               ##
##              |_|                               ##
##                                                ##
##  Get documentation at docs.liquibase.com       ##
##  Get certified courses at learn.liquibase.com  ##
##  Free schema change activity reports at        ##
##      https://hub.liquibase.com                 ##
##                                                ##
####################################################
Starting Liquibase at 18:33:23 (version 4.21.1 #9070)
Liquibase Version: 4.21.1
Liquibase Open Source 4.21.1 by Liquibase
Running Changeset: changelogs/changelog-1.0.0.xml::1::BobR
Running Changeset: changelogs/changelog-1.0.1.xml::2::BobR
  
UPDATE SUMMARY
Run: 2
Previously run: 0
Filtered out: 0
-------------------------------
Total change sets: 2
  
Liquibase: Update has been successful.
Liquibase command 'update' was executed successfully.
  
Phase complete: BUILD State: SUCCEEDED
Phase context status code: Message:
Entering phase POST_BUILD

Jeśli połączysz się z bazą danych Aurora i opiszesz tabele, zobaczysz, że Liquibase utworzyła tabelę aktorów (zgodnie z definicją w Liquibase Quick Start) wraz z tabelami audytu Liquibase databasechangelog i databasechangeloglock. Wszystko działa tak jak zakładałeś i nie musiałeś instalować i konfigurować Liquibase!


mydatabase=> \dt
List of relations
Schema  |         Name          | Type  |  Owner
--------+-----------------------+-------+----------
public  | actor                 | table | postgres
public  | databasechangelog     | table | postgres
public  | databasechangeloglock | table | postgres
(3 rows)

Na podstawie tego przykładu dowiedziałeś się, jak zaktualizować bazę danych Aurora w prywatnej podsieci za pomocą akcji Liquibase GitHub działającej w CodeBuild. Akcje GitHub zapewniają bogaty katalog wstępnie skonfigurowanych akcji upraszczających konfigurację. CodeBuild zapewnia zarządzaną usługę, która upraszcza konfigurację i konserwację Twojego środowiska kompilacji. Używane razem, mogą uzyskać najlepsze funkcje zarówno CodeBuild, jak i GitHub Actions.

Porządkowanie

W tym instruktażu autorzy zaprezentowali Ci, jak stworzyć projekt CodeBuild. Jeśli nie potrzebujesz już projektu, możesz go po prostu usunąć w konsoli. Jeśli utworzyłeś inne zasoby, na przykład bazę danych Aurora, które nie zostały wyjaśnione w tym poście, powinieneś je również usunąć.

Wnioski

GitHub Marketplace zawiera katalog prawie 20 000 działań opracowanych przez strony trzecie i społeczność open source. AWS CodeBuild to w pełni zarządzana usługa ciągłej integracji, która ściśle integruje się z innymi usługami AWS. W tym artykule autorzy użyli akcji GitHub dla Liquibase do wdrożenia aktualizacji bazy danych w prywatnej podsieci. Autorzy z chęcią dowiedzą się, co uda Ci się dokonać dzięki obsłudze GitHub Actions w CodeBuild. Możesz przeczytać więcej o tej ekscytującej nowej funkcji w GitHub Action runner w AWS CodeBuild.

 

Źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.