Tworzenie aplikacji przy użyciu Serverless Framework, AWS i BigQuery

Opublikowany: 2021-01-28

Bezserwerowe odnosi się do aplikacji, w których zarządzanie i alokacja serwerów i zasobów jest zarządzana przez dostawcę chmury. Oznacza to, że dostawca chmury dynamicznie przydziela zasoby. Aplikacja działa w kontenerze bezstanowym, który może zostać wyzwolony przez zdarzenie. Jeden z przykładów powyższego i ten, którego będziemy używać w tym artykule, dotyczy AWS Lambda .

Krótko mówiąc, możemy określić „aplikacje bezserwerowe” jako aplikacje, które są systemami opartymi na zdarzeniach w chmurze. Aplikacja opiera się na usługach innych firm, logice po stronie klienta i wywołaniach zdalnych (bezpośrednio wywołując funkcję Function as a Service ).

Instalowanie Serverless Framework i konfigurowanie go dla Amazon AWS

logo bezserwerowe

1. Bezserwerowa platforma

Serverless Framework to platforma typu open source. Składa się z interfejsu wiersza poleceń lub CLI oraz hostowanego pulpitu nawigacyjnego, który zapewnia nam w pełni bezserwerowy system zarządzania aplikacjami. Korzystanie z platformy zapewnia mniejsze nakłady i koszty, szybkie opracowywanie i wdrażanie oraz zabezpieczanie aplikacji bezserwerowych.

Zanim przystąpisz do instalacji platformy Serverless, musisz najpierw skonfigurować NodeJS. W większości systemów operacyjnych jest to bardzo łatwe — wystarczy odwiedzić oficjalną witrynę NodeJS, aby ją pobrać i zainstalować. Pamiętaj, aby wybrać wersję wyższą niż 6.0.0.

Po zainstalowaniu możesz potwierdzić, że NodeJS jest dostępny, uruchamiając w konsoli node -v . Powinien zwrócić wersję węzła, którą zainstalowałeś:

wersja węzła

Teraz możesz już iść, więc śmiało zainstaluj platformę Serverless.

W tym celu postępuj zgodnie z dokumentacją, aby skonfigurować i skonfigurować framework. Jeśli wolisz, możesz zainstalować go tylko dla jednego projektu, ale w DevriX zazwyczaj instalujemy framework globalnie: npm install -g serverless

Poczekaj na zakończenie procesu i upewnij się, że instalacja Serverless została pomyślnie zainstalowana, uruchamiając: serverless -v

informacje bezserwerowe

2. Utwórz konto Amazon AWS

Zanim przystąpisz do tworzenia przykładowej aplikacji, powinieneś utworzyć konto w Amazon AWS . Jeśli jeszcze go nie masz, wystarczy przejść do Amazon AWS i kliknąć „Utwórz konto AWS” w prawym górnym rogu i postępować zgodnie z instrukcjami, aby utworzyć konto.

Utwórz konto Amazon AWS

Amazon wymaga podania karty kredytowej, więc nie możesz kontynuować bez podania tych informacji. Po udanej rejestracji i logowaniu powinieneś zobaczyć Konsolę Zarządzania AWS:

aws-konsola

Świetnie! Przejdźmy teraz do tworzenia Twojej aplikacji.

3. Skonfiguruj platformę Serverless Framework z dostawcą AWS i utwórz przykładową aplikację

W tym kroku musimy skonfigurować platformę Serverless z dostawcą AWS. Niektóre usługi, takie jak AWS Lambda, wymagają poświadczeń, gdy uzyskujesz do nich dostęp, aby upewnić się, że masz uprawnienia do zasobów należących do tej usługi. W tym celu AWS zaleca użycie AWS Identity and Access Manager (IAM).

Zatem pierwszą i najważniejszą rzeczą jest stworzenie użytkownika IAM w AWS , który będzie go używał w naszej aplikacji:

W konsoli AWS:

  • Wpisz IAM w polu „Znajdź usługi” .
  • Kliknij „IAM” .
  • Przejdź do „Użytkownicy” .
  • Kliknij „Dodaj użytkownika” .

iam-dodaj-użytkownika

W przypadku „Nazwy użytkownika” użyj, co chcesz. Na przykład używamy serverless-admin. W polu „ Typ dostępu” zaznacz „Dostęp programowy” i kliknij „Dalsze uprawnienia ”.

iam-add-user2

Następnie musimy dołączyć uprawnienia dla użytkownika, kliknąć „Dołącz istniejące zasady bezpośrednio”, wyszukaj „Dostęp administratora” i kliknij go. Kontynuuj, klikając „Dalej tagi”

iam-add-user3

Tagi są opcjonalne, więc możesz kontynuować, klikając „Następna recenzja” i „Utwórz użytkownika”. Po zakończeniu i załadowaniu na stronie pojawia się komunikat o powodzeniu z potrzebnymi nam danymi uwierzytelniającymi.

iam-add-user4

Teraz musimy uruchomić następującą komendę:
serverless config credentials --provider aws --key key --secret secret --profile serverless-admin
Zastąp klucz i klucz tajny podanym powyżej. Twoje dane logowania do AWS są tworzone jako profil. Możesz to dokładnie sprawdzić, otwierając plik ~/.aws/credentials . Powinien składać się z profili AWS. Obecnie w poniższym przykładzie jest to tylko jeden – ten, który stworzyliśmy:

aws-credentials-file

Jak dotąd świetna robota! Możesz kontynuować, tworząc jedną przykładową aplikację przy użyciu NodeJS i wbudowanych szablonów startowych.

Uwaga: Ponadto w artykule używamy polecenia sls , które jest skrótem od serverless .
Utwórz pusty katalog i wprowadź go. Uruchom polecenie

ls create --template aws-nodejs

Za pomocą polecenia create –template określ jeden z dostępnych szablonów, w tym przypadku aws-nodejs, który jest aplikacją szablonową NodeJS „Hello world”.

sls-create

Po zakończeniu twój katalog powinien składać się z następujących elementów i wyglądać tak:

sls-create-files

Stworzyliśmy nowe pliki handler.js i serverless.yml .

Plik handler.js przechowuje twoje funkcje, a serverless.yml przechowuje właściwości konfiguracyjne, które zmienisz później. Jeśli zastanawiasz się, czym jest plik .yml , w skrócie, jest to czytelny dla człowieka język serializacji danych . Warto się z nim zapoznać, gdyż jest on używany podczas wstawiania dowolnych parametrów konfiguracyjnych. Ale spójrzmy teraz, co mamy w pliku serverless.yml :

 usługa: aws-przykładowa-aplikacja
dostawca:
  nazwa: aws
  środowisko uruchomieniowe: nodejs12.x
Funkcje:
  cześć:
    handler: handler.hello
  • usługa: – Nasza nazwa usługi.
  • provider: – Obiekt, który zawiera właściwości providera i jak widzimy tutaj, naszym dostawcą jest AWS, a my używamy środowiska uruchomieniowego NodeJS.
  • funkcje: – Jest to obiekt, który zawiera wszystkie funkcje, które można wdrożyć w Lambdzie. W tym przykładzie mamy tylko jedną funkcję o nazwie hello , która wskazuje na funkcję hello handler.js.

Musisz zrobić tutaj jedną kluczową rzecz, zanim przystąpisz do wdrażania aplikacji. Wcześniej ustawiliśmy poświadczenia dla AWS z profilem (nazywaliśmy go serverless-admin ). Teraz wszystko, co musisz zrobić, to powiedzieć konfiguracji bezserwerowej , aby używała tego profilu i twojego regionu. Otwórz serverless.yml i pod właściwością providera tuż pod runtime wpisz to:

 profil: bezserwerowy-admin
region: us-wschód-2

W końcu powinniśmy mieć to:

 dostawca:
  nazwa: aws
  środowisko uruchomieniowe: nodejs12.x
  profil: bezserwerowy-admin
  region: us-wschód-2

Uwaga: Aby uzyskać region, prostym sposobem jest sprawdzenie adresu URL po zalogowaniu się do konsoli: Przykład:

region-aws

Teraz, gdy mamy niezbędne informacje o naszym wygenerowanym szablonie. Sprawdźmy, jak możemy wywołać funkcję lokalnie i wdrożyć ją w AWS Lambda.
Możemy od razu przetestować aplikację, wywołując funkcję lokalnie:

sls invoke local -f hello

Wywołuje funkcję (ale tylko lokalnie!) i zwraca dane wyjściowe do konsoli:

sls-invoke-local

Teraz, jeśli wszystko poszło dobrze, możesz spróbować wdrożyć swoją funkcję w AWS Lambda .

Czy to było skomplikowane? Nie, nie było! Dzięki Serverless Framework jest to tylko jednowierszowy kod:

sls deploy -v

Poczekaj, aż wszystko się skończy, może to potrwać kilka minut, jeśli wszystko jest w porządku, powinieneś zakończyć coś takiego:

sls-deploy-finished

Sprawdźmy teraz, co się stało w AWS. Przejdź do Lambda (w „ Find Services ” wpisz Lambda ) i powinieneś zobaczyć utworzoną funkcję Lambda .

aws-lambda-stworzony

Teraz możesz spróbować wywołać swoją funkcję z AWS Lambda. W typie terminala
sls invoke -f hello
Powinien zwrócić to samo wyjście, co wcześniej (gdy testujemy lokalnie):

sls-invoke

Możesz sprawdzić, czy uruchomiłeś funkcję AWS, otwierając funkcję w AWS Lambda i przechodząc do zakładki „ Monitorowanie ” i klikając „ Wyświetl logi w CloudWatch. “.

lambda-cloudwatch-logi

Powinieneś mieć tam jeden dziennik.

W Twojej aplikacji wciąż brakuje jednej rzeczy, ale co to jest…? Cóż, nie masz punktu końcowego, do którego można uzyskać dostęp dla swojej aplikacji, więc utwórzmy go przy użyciu bramy API AWS.

Musisz najpierw otworzyć plik serverless.yml i wyczyścić komentarze. Musisz dodać właściwość zdarzeń do naszej funkcji i pod jej właściwością http . To nakazuje frameworkowi Serverless utworzyć bramę API i dołączyć ją do naszej funkcji Lambda podczas wdrażania aplikacji. Nasz plik konfiguracyjny powinien kończyć się w ten sposób:

 usługa: aws-przykładowa-aplikacja
dostawca:
  nazwa: aws
  środowisko uruchomieniowe: nodejs12.x
  profil: bezserwerowy-admin
  region: us-wschód-2
Funkcje:
  cześć:
    handler: handler.hello
    wydarzenia:
      - http:
          ścieżka: /cześć
          metoda: zdobądź

W http podajemy ścieżkę i metodę HTTP.
To wszystko, wdróżmy ponownie naszą aplikację, uruchamiając sls deploy -v

Po zakończeniu w terminalu wyjściowym powinna pojawić się jedna nowa rzecz, a jest to utworzony punkt końcowy:

http-punkt końcowy

Otwórzmy punkt końcowy:

http-endpoint-wykonany

Powinieneś zobaczyć, że twoja funkcja jest wykonywana, zwraca dane wyjściowe i pewne informacje o żądaniu. Sprawdźmy, co się zmienia w naszej funkcji Lambda.

Otwórz AWS Lambda i kliknij swoją funkcję.

aws-lambda-api-gateway

Widzimy pod zakładką „ Designer ”, że mamy API Gateway dołączoną do naszej Lambdy i API Endpoint.

Świetnie! Stworzyłeś bardzo prostą aplikację bezserwerową, wdrożyłeś ją w AWS Lambda i przetestowałeś jej funkcjonalność. Ponadto dodaliśmy punkt końcowy za pomocą AWS API Gateway .

4. Jak uruchomić aplikację w trybie offline

Do tej pory wiemy, że możemy wywoływać funkcje lokalnie, ale także możemy uruchomić całą naszą aplikację w trybie offline za pomocą wtyczki serverless-offline.

Wtyczka emuluje AWS Lambda i API Gateway na twojej lokalnej/deweloperskiej maszynie. Uruchamia serwer HTTP, który obsługuje żądania i wywołuje Twoje programy obsługi.

Aby zainstalować wtyczkę, uruchom poniższe polecenie w katalogu aplikacji

npm install serverless-offline --save-dev

Następnie w pliku serverless.yml projektu otwórz plik i dodaj właściwość plugins :

 wtyczki:
  - bezserwerowy-offline

Konfiguracja powinna wyglądać tak:

 usługa: aws-przykładowa-aplikacja
dostawca:
  nazwa: aws
  środowisko uruchomieniowe: nodejs12.x
  profil: bezserwerowy-admin
  region: us-wschód-2
Funkcje:
  cześć:
    handler: handler.hello
    wydarzenia:
      - http:
          ścieżka: /cześć
          metoda: zdobądź
wtyczki:
  - bezserwerowy-offline

Aby sprawdzić, czy pomyślnie zainstalowaliśmy i skonfigurowaliśmy uruchomienie wtyczki

sls --verbose

Powinieneś to zobaczyć:

sls-verbose

Teraz w katalogu głównym projektu uruchom polecenie

sls offline

sls-offline

Jak widać, serwer HTTP nasłuchuje na porcie 3000 i możesz uzyskać dostęp do swoich funkcji, na przykład tutaj mamy http://localhost:3000/dev/hello dla naszej funkcji hello. Otwarcie, które mamy taką samą odpowiedź jak z API Gateway , które stworzyliśmy wcześniej.

sls-offline2

Dodaj integrację z Google BigQuery

wielkie zapytanie

Do tej pory wykonałeś świetną robotę! Masz w pełni działającą aplikację korzystającą z opcji Serverless. Rozszerzmy naszą aplikację i dodajmy do niej integrację BigQuery , aby zobaczyć, jak działa i jak przebiega integracja.

BigQuery to bezserwerowe oprogramowanie jako usługa (SaaS), czyli opłacalna i szybka hurtownia danych obsługująca zapytania. Zanim będziemy kontynuować integrację z naszą aplikacją NodeJS, musimy utworzyć konto, więc przejdźmy dalej.

1. Skonfiguruj konsolę Google Cloud

Wejdź na https://cloud.google.com i zaloguj się na swoje konto, jeśli jeszcze tego nie zrobiłeś – utwórz konto i kontynuuj.

Kiedy logujesz się do Google Cloud Console, musisz utworzyć nowy projekt. Kliknij trzy kropki obok logo, a otworzy się modalne okno, w którym wybierzesz „ Nowy projekt.

gc-create-projekt

Wpisz nazwę swojego projektu. Użyjemy bigquery-example . Po utworzeniu projektu przejdź do BigQuery , korzystając z szuflady:

gc-bq

Po załadowaniu BigQuery po lewej stronie zobaczysz dane projektu, do których masz dostęp, a także publiczne zbiory danych. W tym przykładzie używamy publicznego zestawu danych. Nazywa się covid19_ecdc :

bigquery-covid-dataset

Baw się zbiorem danych i dostępnymi tabelami. Wyświetl podgląd danych w nim. To publiczny zbiór danych, który jest aktualizowany co godzinę i zawiera informacje o ogólnoświatowych danych dotyczących COVID-19 .

Aby uzyskać dostęp do danych, musimy utworzyć użytkownika IAM -> Konto usługi. W menu kliknij „IAM i administrator”, a następnie „Konta usług”.

bq-usługa-konto

Kliknij przycisk „Utwórz konto usługi” , wprowadź nazwę konta usługi i kliknij „Utwórz”. Następnie przejdź do „ Uprawnienia konta usługi” , wyszukaj i wybierz „Administrator BigQuery” .

bq-service-account-uprawnienia

Kliknij „ Kontynuuj ”, to ostatni krok, tutaj potrzebujesz kluczy, więc kliknij przycisk tworzenia pod „ Klucze ” i wyeksportuj jako JSON . Zapisz to w bezpiecznym miejscu, będzie nam potrzebne później. Kliknij Gotowe , aby zakończyć tworzenie konta usługi.

bigquery-service-konto-utworzono

Teraz użyjemy wygenerowanych tutaj poświadczeń, aby połączyć bibliotekę NodeJS BigQuery.

2. Zainstaluj bibliotekę NodeJS BigQuery

Musisz zainstalować bibliotekę BigQuery NodeJS, aby używać jej w właśnie utworzonym projekcie. Uruchom poniższe polecenia w katalogu aplikacji:

Najpierw zainicjuj npm, uruchamiając npm init

Wypełnij wszystkie pytania i kontynuuj instalację biblioteki BigQuery :
npm install @google-cloud/bigquery

Zanim przejdziemy dalej do zmiany naszego modułu obsługi funkcji, musimy przenieść klucz prywatny z utworzonego wcześniej pliku JSON. W tym celu użyjemy zmiennych środowiskowych Serverless . Więcej informacji znajdziesz tutaj.

Otwórz serverless.yml i we właściwości dostawcy dodaj właściwość środowiska w następujący sposób:

 środowisko:
ID_PROJEKTU: ${plik(./config/bigquery-config.json):identyfikator_projektu}
CLIENT_EMAIL: ${plik(./config/bigquery-config.json):client_email}
KLUCZ_PRYWATNY: ${plik(./config/bigquery-config.json):klucz_prywatny}

Utwórz zmienne środowiskowe PROJECT_ID, PRIVATE_KEY i CLIENT_EMAIL , które pobierają te same właściwości (małe litery) z wygenerowanego przez nas pliku JSON. Umieściliśmy go w folderze config i nazwaliśmy go bigquery-config.json .

W tej chwili powinieneś otrzymać plik serverless.yml wyglądający tak:

 usługa: aws-przykładowa-aplikacja
dostawca:
  nazwa: aws
  środowisko uruchomieniowe: nodejs12.x
  profil: bezserwerowy-admin
  region: us-wschód-2
  środowisko:
    ID_PROJEKTU: ${plik(./config/bigquery-config.json):identyfikator_projektu}
    CLIENT_EMAIL: ${plik(./config/bigquery-config.json):client_email}
    KLUCZ_PRYWATNY: ${plik(./config/bigquery-config.json):klucz_prywatny}
Funkcje:
  cześć:
    handler: handler.hello
    wydarzenia:
      - http:
          ścieżka: /cześć
          metoda: zdobądź
wtyczki:
  - bezserwerowy-offline

Teraz otwórz handler.js i zaimportuj bibliotekę BigQuery, na górze pliku w sekcji „use strict” dodaj następujący wiersz:

const {BigQuery} = require('@google-cloud/bigquery');

Teraz musimy przekazać bibliotece BigQuery dane uwierzytelniające. W tym celu utwórz nową stałą, która tworzy instancję BigQuery z poświadczeniami:

 const bigQueryClient = new BigQuery({
    id projektu: process.env.PROJECT_ID,
    referencje: {
        client_email: process.env.CLIENT_EMAIL,
        private_key: process.env.PRIVATE_KEY
    }
});

Następnie utwórzmy nasze zapytanie BigQuery SQL. Chcemy uzyskać najnowsze informacje o przypadkach COVID-19 w Bułgarii. Używamy edytora zapytań BigQuery, aby przetestować go, zanim przejdziemy dalej, więc utworzyliśmy zapytanie niestandardowe:

 WYBIERZ * FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` GDZIE geo_ ZAMÓW WG daty LIMIT 1 

bigquery-zapytanie-wyniki

Dobry! Teraz zaimplementujmy to w naszej aplikacji NodeJS.
Otwórz handler.js i wklej poniższy kod

 const query = 'SELECT * FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` WHERE geo_id = \'BG\' ORDER BY date DESC LIMIT 1';
stałe opcje = {
    zapytanie: zapytanie
}

const [zadanie] = czekaj bigQueryClient.createQueryJob(opcje);
const [wiersze] = await job.getQueryResults();

Stworzyliśmy stałe zapytań i opcji . Następnie uruchamiamy zapytanie jako zadanie i pobieramy z niego wyniki.

Zmieńmy też nasz moduł obsługi zwrotów, aby zwracał wygenerowane wiersze z zapytania:

 powrót {
    kod statusu: 200,
    treść: JSON.stringify(
        {
            wydziwianie
        },
        zero,
        2
    ),
};

Zobaczmy pełny handler.js :

 „użyj ściśle”;

const {BigQuery} = require('@google-cloud/bigquery');
const bigQueryClient = new BigQuery({
    id projektu: process.env.PROJECT_ID,
    referencje: {
        client_email: process.env.CLIENT_EMAIL,
        private_key: process.env.PRIVATE_KEY
    }
});

module.exports.hello = zdarzenie asynchroniczne => {
    const query = 'SELECT * FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` WHERE geo_id = \'BG\' ORDER BY date DESC LIMIT 1';
    stałe opcje = {
        zapytanie: zapytanie
    }

    const [zadanie] = czekaj bigQueryClient.createQueryJob(opcje);
    const [wiersze] = await job.getQueryResults();

    powrót {
        kod statusu: 200,
        treść: JSON.stringify(
            {
                wydziwianie
            },
            zero,
            2
        ),
    };
};

Dobra! Przetestujmy naszą funkcję lokalnie:
sls invoke local -f hello
Powinniśmy zobaczyć wynik:

bigquery-hello-invoke

Kontynuuj wdrażanie aplikacji, aby przetestować ją za pośrednictwem punktów końcowych HTTP, więc uruchom sls deploy -v

Poczekaj, aż się zakończy i otwórz punkt końcowy. Oto wyniki:

bigquery-punkt końcowy

Dobrze zrobiony! Mamy teraz aplikację do pobierania danych z BigQuery i zwracania odpowiedzi! Sprawdźmy wreszcie, czy działa w trybie offline. Uruchom sls offline

I załaduj lokalny punkt końcowy:

bigquery-offline

Dobra robota. Jesteśmy prawie na końcu procesu. Ostatnim krokiem jest nieznaczna zmiana aplikacji i zachowania. Zamiast AWS API Gateway chcemy użyć Application Load Balancer . Zobaczmy, jak to osiągnąć w następnym rozdziale.

ALB — system równoważenia obciążenia aplikacji w AWS

Stworzyliśmy naszą aplikację korzystając z AWS API Gateway. W tym rozdziale omówimy, jak zastąpić bramę interfejsu API modułem równoważenia obciążenia aplikacji (ALB).

Najpierw zobaczmy, jak działa load balancer aplikacji w porównaniu z API Gateway:

W load balancerze aplikacji mapujemy konkretną ścieżkę (np. /hello/ ) na grupę docelową – grupę zasobów, w naszym przypadku funkcję Lambda .

Z grupą docelową może być powiązana tylko jedna funkcja Lambda. Za każdym razem, gdy grupa docelowa musi odpowiedzieć, load balancer aplikacji wysyła żądanie do Lambda, a funkcja musi odpowiedzieć obiektem odpowiedzi. Podobnie jak brama interfejsu API, ALB obsługuje wszystkie żądania HTTP.

Istnieją pewne różnice między ALB i API Gateway . Jedną z głównych różnic jest to, że API Gateway obsługuje tylko HTTPS (SSL), podczas gdy ALB obsługuje zarówno HTTP, jak i HTTPS.

Zobaczmy jednak kilka zalet i wad bramy API:

Brama API:

Plusy:

  • Doskonałe bezpieczeństwo.
  • To proste do wdrożenia.
  • Jest szybki do wdrożenia i gotowy w ciągu minuty.
  • Skalowalność i dostępność.

Cons:

  • W obliczu dużego natężenia ruchu może stać się dość drogie.
  • Wymaga trochę więcej orkiestracji, co zwiększa poziom trudności dla programistów.
  • Pogorszenie wydajności ze względu na scenariusze API może wpłynąć na szybkość i niezawodność aplikacji.

Kontynuujmy tworzenie ALB i przełączanie się na niego zamiast korzystania z API Gateway:

1. Co to jest ALB?

System równoważenia obciążenia aplikacji umożliwia programiście konfigurowanie i kierowanie ruchu przychodzącego. Jest to cecha „ elastycznego równoważenia obciążenia”. Służy jako pojedynczy punkt kontaktu dla klientów, rozdziela przychodzący ruch aplikacji na wiele celów, takich jak instancje EC2 w wielu strefach.

2. Utwórz system równoważenia obciążenia aplikacji za pomocą interfejsu użytkownika AWS

Utwórzmy nasz system równoważenia obciążenia aplikacji (ALB) za pomocą interfejsu użytkownika w Amazon AWS. Zaloguj się do Konsoli AWS w zakładce „ Znajdź usługi. ” wpisz „ EC2 ” i znajdź „ Load Balancer .

aws-alb

Kliknij „ Utwórz system równoważenia obciążenia ” w sekcji „ System równoważenia obciążenia aplikacji ” wybierz „ Utwórz ”. Jako nazwę wprowadź swój wybór, użyliśmy „ przykładowa-alb”, wybierz Schemat „ dostęp do Internetu ”, Typ adresu IP ipv4.

W „ Listeners ” pozostaw to tak, jak jest – HTTP i port 80. Można go skonfigurować dla HTTPS, chociaż musisz mieć domenę i potwierdzić ją, zanim będziesz mógł korzystać z HTTPS.

Strefy dostępności — w przypadku VPC wybierz tę, którą masz z listy rozwijanej i zaznacz wszystkie „ Strefy dostępności” :

aws-alb-create1

Kliknij „ Dalej Skonfiguruj ustawienia zabezpieczeń ”, aby wyświetlić monit o poprawienie zabezpieczeń systemu równoważenia obciążenia. Kliknij Następny.

W „ Krok 3. Skonfiguruj grupy zabezpieczeń ”, w Przypisz grupę zabezpieczeń, aby wybrać „Utwórz nową grupę zabezpieczeń”. Kontynuuj, klikając „ Dalej: Konfiguruj routing. “. W kroku 4 skonfiguruj go tak, jak pokazano na powyższym zrzucie ekranu:

aws-alb-routing

Kliknij Dalej , Dalej i Utwórz .

Wróć do systemów równoważenia obciążenia i skopiuj ARN, jak pokazano na zrzucie ekranu:

aws-alb-arn

Teraz musimy zmienić nasz serverless.yml i usunąć właściwość http API Gateway. We właściwości zdarzenia usuń właściwość http i dodaj właściwość alb. Obiekt funkcji powinien kończyć się tak:

 cześć:
  handler: handler.hello
  wydarzenia:
    - alba:
        listenerArn: arn:aws:elasticloadbalancing:us-east-2:115129174008:listener/app/sample-alb/ae6e398a898c48e6/67ce6bf319d0513d
        priorytet: 1
        warunki:
          ścieżka: /cześć

Zapisz plik i uruchom polecenie wdrożenia aplikacji
sls deploy -v

Po pomyślnym wdrożeniu wróć do AWS Load Balancers i znajdź swoją nazwę DNS, jak pokazano na zrzucie ekranu:

aws-alb-dns

Skopiuj nazwę DNS i wpisz ścieżkę /hello .

Powinno działać i ostatecznie oferować opcję pobierania treści :). Jak dotąd load balancer aplikacji działa znakomicie, ale aplikacja musi zwrócić odpowiednią odpowiedź dla naszych użytkowników końcowych. Aby to zrobić, otwórz handler.js i zastąp instrukcję return następującą:

 powrót {
    kod statusu: 200,
    statusOpis: "200 OK",
    nagłówki: {
        "Content-Type": "aplikacja/json"
    },
    isBase64Encoded: fałsz,
    treść: JSON.stringify(wiersze)
}

Różnica ALB polega na tym, że odpowiedź musi zawierać statusDescription, nagłówki i isBase64Encoded kontenera. Zapisz plik i wdróż ponownie, ale tym razem nie całą aplikację, ale tylko zmienioną przez nas funkcję. Uruchom poniższe polecenie:
sls deploy -f hello

W ten sposób definiujemy tylko funkcję hello do wdrożenia. Po pomyślnym wdrożeniu ponownie odwiedź nazwę DNS ze ścieżką i powinieneś otrzymać poprawną odpowiedź!

aws-alb-odpowiedź

Świetnie! Teraz zastąpiliśmy API Gateway modułem Application Load Balancer. Load balancer aplikacji jest tańszy niż API Gateway, a teraz możemy rozszerzyć naszą aplikację tak, aby spełniała nasze potrzeby, zwłaszcza jeśli spodziewamy się większego ruchu.

Ostatnie słowa

Stworzyliśmy prostą aplikację przy użyciu platformy Serverless Framework, AWS i BigQuery i omówiliśmy jej podstawowe zastosowanie. Bezserwerowe to przyszłość i obsługa aplikacji za jej pomocą jest łatwa. Kontynuuj naukę i zanurz się w frameworku bezserwerowym, aby poznać wszystkie jego funkcje i sekrety, które posiada. Jest to również całkiem proste i wygodne narzędzie.