Udostępnij za pomocą


Wdróż samodzielnie hostowaną bramę usługi Azure API Management do aplikacji Azure Container Apps

DOTYCZY: Deweloper | Premium

Ten artykuł zawiera kroki wdrażania własnej bramy składnika usługi Azure API Management w celu usługi Azure Container Apps.

Wdróż bramę hostowaną samodzielnie w aplikacji kontenera, aby uzyskać dostęp do interfejsów API hostowanych w tym samym środowisku usługi Azure Container Apps.

Wymagania wstępne

Aprowizuj bramę w wystąpieniu usługi Azure API Management

Przed wdrożeniem lokalnej bramy utwórz zasób bramy w wystąpieniu usługi Azure API Management. Aby uzyskać instrukcje, zobacz Przygotowanie bramy hostowanej lokalnie. W przykładach tego artykułu brama nosi nazwę my-gateway.

Pobierz ustawienia wdrażania bramy z API Management

Aby wdrożyć bramę, potrzebne są wartości punktu końcowego tokenu i punktu końcowego konfiguracji. Można je znaleźć w witrynie Azure Portal:

  1. Zaloguj się do portalu Azure i przejdź do wystąpienia usługi Azure API Management.
  2. W menu po lewej stronie w obszarze Wdrażanie i infrastruktura wybierz pozycję Bramy hostowane samodzielnie.
  3. Wybierz aprowizowany zasób bramy, a następnie wybierz pozycję Ustawienia>Wdrożenie.
  4. Skopiuj wartości Token i Configuration punktu końcowego.

Deplojuj samodzielnie hostowaną bramę do aplikacji kontenerowej

Obraz kontenera własnej bramy można wdrożyć w aplikacji kontenera przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azurelub innych narzędzi. W tym artykule przedstawiono kroki korzystania z interfejsu wiersza polecenia platformy Azure.

Tworzenie środowiska aplikacji kontenera

Najpierw utwórz środowisko dla konteneryzowanych aplikacji używając polecenia az containerapp env create:

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

To polecenie tworzy:

  • Środowisko aplikacji kontenera o nazwie my-environment używane do grupowania aplikacji kontenera.
  • Obszar roboczy usługi Log Analytics

Stworzyć aplikację kontenera dla samodzielnie hostowanej bramy

Aby wdrożyć samodzielnie hostowaną bramę do aplikacji kontenerowej w środowisku, uruchom polecenie az containerapp create.

Najpierw ustaw zmienne dla wartości Token i punktu końcowego Konfiguracja z zasobu bramy usługi Azure API Management.

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

Utwórz aplikację kontenera przy użyciu polecenia az containerapp create:

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.9.2" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

To polecenie tworzy:

  • Aplikacja kontenera o nazwie my-gateway w grupie zasobów myResourceGroup. W tym przykładzie aplikacja kontenera używa obrazu mcr.microsoft.com/azure-api-management/gateway:2.9.2. Aby uzyskać więcej informacji na temat bramy hostowanej samodzielnie, zobacz obrazy kontenerów.

  • Obsługa zewnętrznego wejścia do aplikacji kontenerowej na porcie 8080.

  • Co najmniej 1 i maksymalnie 3 repliki aplikacji kontenera.

  • Połączenie z samodzielnie hostowanej bramy do wystąpienia usługi Azure API Management, poprzez przekazanie wartości konfiguracji w zmiennych środowiskowych. Aby uzyskać szczegółowe informacje, zapoznaj się z ustawieniami konfiguracji kontenera dla własnej bramy.

    Uwaga

    Ingers aplikacji kontenerowych Azure przekazuje żądania HTTPS do własnej aplikacji kontenera bramy jako HTTP. W tym miejscu zmienna środowiskowa net.server.http.forwarded.proto.enabled jest ustawiona na true, aby brama hostowana samodzielnie korzystała z nagłówka X-Forwarded-Proto w celu określenia oryginalnego protokołu żądania.

Upewnij się, że aplikacja kontenera jest uruchomiona

  1. Zaloguj się do witryny Azure Portal i przejdź do aplikacji kontenera.

  2. Na stronie przeglądu aplikacji kontenera sprawdź, czy stan jest uruchomiona.

  3. Wyślij żądanie testowe do punktu końcowego stanu w /status-012345678990abcdef. Na przykład użyj curl polecenia podobnego do poniższego polecenia.

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    Pomyślne żądanie zwraca odpowiedź 200 OK.

Wskazówka

Za pomocą interfejsu wiersza polecenia można również uruchomić polecenie az containerapp show w celu sprawdzenia stanu aplikacji kontenerowej.

Upewnij się, że brama jest w dobrej kondycji

  1. Zaloguj się do portalu Azure i przejdź do wystąpienia usługi Azure API Management.

  2. W menu po lewej stronie w obszarze Wdrażanie i infrastruktura wybierz pozycję Bramy hostowane samodzielnie.

  3. Na stronie Przegląd sprawdź stan bramy. Jeśli brama jest w dobrej kondycji, zgłasza regularne pulsy bramy.

    Zrzut ekranu przedstawiający stan bramy w portalu.

Przykładowy scenariusz

W poniższym przykładzie pokazano, jak za pomocą własnej bramy uzyskać dostęp do interfejsu API hostowanego w aplikacji kontenera w tym samym środowisku. Jak pokazano na poniższym diagramie, brama hostowana samodzielnie może być dostępna z Internetu, natomiast interfejs API jest dostępny tylko w środowisku aplikacji kontenera.

Diagram przykładowego scenariusza z bramą hostowaną samodzielnie.

  1. Wdróż aplikację kontenera hostująca interfejs API w tym samym środowisku co brama hostowana samodzielnie.
  2. Dodaj API do instancji usługi Azure API Management.
  3. Wywołaj interfejs API za pośrednictwem bramy hostowanej samodzielnie.

Wdrażanie aplikacji kontenerowej hostującej API w tym samym środowisku co brama hostowana samodzielnie

W tym przykładzie wdrożysz przykładowy interfejs API albumu muzycznego w aplikacji kontenera. Aby później uzyskać dostęp do interfejsu API za pomocą samodzielnie hostowanej bramy, wdróż interfejs API w tym samym środowisku, co brama. Aby uzyskać szczegółowe instrukcje i informacje o zasobach używanych w tym przykładzie, zobacz Szybki start: kompilowanie i wdrażanie z lokalnego kodu źródłowego do usługi Azure Container Apps. Wykonaj skrócone kroki:

  1. Pobierz kod źródłowy języka Python na komputer lokalny. Jeśli wolisz, pobierz kod źródłowy w innym wybranym języku.

  2. Wyodrębnij kod źródłowy do folderu lokalnego i przejdź do folderu containerapps-albumapi-python-main/src.

  3. Uruchom następujące polecenie az containerapp up, aby wdrożyć API w aplikacji kontenerowej w tym samym środowisku co bramą hostowaną lokalnie. Zanotuj . na końcu polecenia, które określa bieżący folder jako źródło aplikacji kontenera.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Upewnij się, że aplikacja kontenera jest uruchomiona i dostępna zewnętrznie w nazwie FQDN zwróconej w danych wyjściowych polecenia. Domyślnie interfejs API jest dostępny w punkcie końcowym /albums. Przykład: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Skonfiguruj API dla wewnętrznego ruchu przychodzącego

Teraz zaktualizuj aplikację kontenerową hostującą przykładowy interfejs API, aby umożliwić ruch sieciowy tylko w środowisku kontenerowym. To ustawienie ogranicza dostęp do API tylko z samodzielnie hostowanej bramy, którą wdrożyłeś.

  1. Zaloguj się do witryny Azure Portal i przejdź do aplikacji kontenera.
  2. W menu po lewej stronie wybierz pozycję Sieci>Ruch przychodzący.
  3. Ustaw Ruch przychodzący na Włączone.
  4. W ruchu przychodzącegowybierz pozycję Ograniczone do środowiska usługi Container Apps Environment.
  5. Przejrzyj pozostałe ustawienia i wybierz pozycję Zapisz.

Dodawanie interfejsu API do wystąpienia usługi Azure API Management

W poniższych krokach pokazano, jak dodać API do wystąpienia usługi Azure API Management i skonfigurować zaplecze API. Aby uzyskać więcej informacji, zobacz Dodawanie interfejsu API do usługi Azure API Management.

Dodawanie interfejsu API do wystąpienia usługi API Management

  1. W portalu Azure przejdź do instancji zarządzania interfejsem API, w której skonfigurowano bramę lokalnie hostowaną.
  2. W menu po lewej stronie wybierz pozycję API>API>+ Dodaj API.
  3. Wybierz HTTP i Full. Wprowadź następujące ustawienia:
    1. nazwa wyświetlana: wprowadź opisową nazwę. Przykład: interfejs API albumów .
    2. adres URL usługi sieci Web: wprowadź wewnętrzną nazwę FQDN aplikacji kontenera hostowania interfejsu API. Przykład: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. schemat adresów URL: wybierz HTTP(S).
    4. sufiks adresu URL interfejsu API: wprowadź wybrany sufiks. Przykład: albumapi.
    5. Bramy: Wybierz lokalnie hostowaną bramę, którą aprowizowałeś. Przykład: my-gateway.
  4. Skonfiguruj inne ustawienia interfejsu API zgodnie ze scenariuszem. Wybierz Utwórz.

Dodawanie operacji interfejsu API

  1. W menu po lewej stronie wybierz API>API albumów.
  2. Wybierz pozycję + Dodaj operację.
  3. Wprowadź ustawienia operacji:
    1. nazwa wyświetlana: wprowadź opisową nazwę operacji. Przykład: Pobierz albumy.
    2. adres URL: wybierz Pobierz i wprowadź /albums jako punkt końcowy.
    3. Wybierz Zapisz.

Wywoływanie interfejsu API za pośrednictwem bramy hostowanej samodzielnie

Wywołaj interfejs API przy użyciu FQDN bramy samoobsługowej działającej w aplikacji kontenerowej. Znajdź nazwę FQDN na stronie Przegląd aplikacji kontenera w portalu Azure lub uruchom następujące polecenie az containerapp show.

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

Uruchom na przykład następujące polecenie curl, aby wywołać interfejs API w punkcie końcowym /albumapi/albums. Jeśli API wymaga klucza subskrypcji, przekaż prawidłowy klucz subskrypcji dla wystąpienia API Management w nagłówku żądania:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

Po pomyślnym zakończeniu testu zaplecze odpowiada z pomyślnym kodem odpowiedzi HTTP i pewnymi danymi.

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

Wskazówka

Jeśli włączysz rejestrowanie dla interfejsu API w usłudze Application Insights, możesz przeglądać dzienniki, aby wyświetlić żądania i odpowiedzi.

Ograniczenia

Wystąpienia bramy hostowanej samodzielnie korzystają z protokołu UDP na potrzeby sygnalizacji aktywności i komunikacji ograniczeń szybkości. Ponieważ usługa Azure Container Apps obecnie nie obsługuje protokołu UDP, ani dla ruchu przychodzącego, ani wewnętrznego, polityka rate-limit nie może synchronizować swojego licznika między wystąpieniami. W związku z tym utrzymywanie trzech replik samodzielnie hostowanej aplikacji kontenera bramy z limitem X może spowodować trzykrotnie większy ruch do momentu osiągnięcia limitu X.

Azure Container Apps dystrybuuje żądania równomiernie między każdą dostępną i sprawną repliką. Aby zaimplementować ograniczanie szybkości, można podzielić żądany limit przez liczbę replik, które chcesz uruchomić, i ustawić wynikową wartość w konfiguracji. Takie podejście ma własne wady, ponieważ możesz nie być w stanie uwzględnić dostosowanych liczników, jeśli i kiedy aplikacje kontenera są skalowane.