Mikroserwisy nie takie straszne – dzięki Azure Container Apps

Sprawdzony monolit czy mikroserwisy – oto jest pytanie. i jest ono jak najbardziej uzasadnione. Monolit kusi swoją prostotą – jedna aplikacja, jeden kod, mniej ruchomych części. Łatwiej go wdrożyć, łatwiej monitorować, a na początku – łatwiej również utrzymać. Ale co dalej, gdy system zaczyna się rozwijać? Każda zmiana wymaga ostrożności, a rozbudowa monolitu często prowadzi do skomplikowanego i trudnego w zarządzaniu kodu.

Z drugiej strony mamy mikroserwisy, które oferują elastyczność, niezależne skalowanie i możliwość rozwoju w kilku kierunkach jednocześnie. Brzmi jak strzał w dziesiątkę, prawda? Problem polega na tym, że ich wdrożenie wiąże się z wieloma wyzwaniami. Trzeba poważnie zastanowić się nad komunikacją między usługami, zapewnieniem wysokiej dostępności, monitoringiem i automatyzacją wdrożeń. To wszystko może przytłoczyć, zwłaszcza jeśli nie dysponujesz dużym zespołem DevOps i nie chcesz spędzić tygodni na konfiguracji infrastruktury.

Czy mikroserwisy to rozwiązanie wyłącznie dla największych firm? A może istnieje sposób, by uprościć ich zarządzanie i sprawić, że będą dostępne również dla mniejszych zespołów i projektów? Z pomocą przychodzi rozwiązanie Microsoftu – Azure Container Apps, z którym wdrażanie i zarządzanie mikroserwisami staje się znacznie prostsze i które eliminuje wiele problemów związanych z tradycyjnym podejściem mikroserwisów. A jak działa? O tym właśnie przeczytasz w tym artykule.

Mikroserwisy – szansa czy pułapka?

Mikroserwisy to jedno z najgorętszych pojęć w świecie architektury oprogramowania. Firmy technologiczne, blogi branżowe i konferencje IT od lat przedstawiają je jako przyszłość tworzenia skalowalnych aplikacji. Ale czy na pewno są rozwiązaniem dla każdego? Zalety takiego rozwiązania przedstawialiśmy już w artykule https://www.infinity-group.pl/blog/2024/09/04/mikroserwisy-w-praktyce-czym-sa-jakie-niosa-korzysci-i-jak-wplywaja-na-biznes/ 

Mimo wszystkich swoich zalet, mikroserwisy niosą ze sobą również poważne wyzwania:

  • Złożoność systemu – zamiast jednej aplikacji mamy dziesiątki (a nawet setki) usług, które muszą ze sobą współpracować. Wprowadza to ogromne wyzwania związane z komunikacją, wersjonowaniem API, a także spójnością danych. 
  • Zarządzanie infrastrukturą – każda usługa musi być wdrażana, monitorowana i zabezpieczona. To oznacza konieczność posiadania solidnego systemu orkiestracji kontenerów (np. Kubernetes) – to może sprawić trudność mniejszym zespołom. 
  • Zależności między usługami – w monolicie komunikacja między komponentami odbywa się lokalnie w ramach jednej aplikacji. W mikroserwisach trzeba korzystać z sieci (HTTP, gRPC, brokerów wiadomości), co może prowadzić do opóźnień, problemów z dostępnością i konieczności obsługi awarii. 
  • Koszt i czas wdrożenia – mimo że mikroserwisy pozwalają na większą swobodę, ich wdrożenie i utrzymanie wymaga znacznie większych nakładów pracy i zasobów. 

Czy mikroserwisy są dla każdego? 

Na szczęście nie trzeba rezygnować z mikroserwisów tylko dlatego, że są skomplikowane. Nowoczesne platformy, takie jak Azure Container Apps , pomagają uprościć zarządzanie i wdrażanie mikroserwisów, eliminując wiele z wyzwań związanych z infrastrukturą. W kolejnej części przyjrzymy się bliżej, jak dokładnie działa to rozwiązanie. 

Azure Container Apps – co to jest i dlaczego warto 

Azure Container Apps to w pełni zarządzana usługa kontenerowa serverless, która: 

  • Ukrywa infrastrukturę – nie musisz ręcznie tworzyć ani konfigurować klastra Kubernetes, maszyn wirtualnych czy load balancerów. 
  • Obsługuje kontenery Docker – uruchomisz dowolny obraz, który można zbudować lokalnie lub w ACR (Azure Container Registry). 
  • Wykorzystuje KEDA (Kubernetes Event-Driven Autoscaling) – dzięki temu automatycznie dopasowuje liczbę instancji do ruchu HTTP, kolejki wiadomości czy dowolnego zdarzenia. 
  • Zapewnia wbudowaną komunikację między usługami – czyli routing wewnątrz sieci domeny aplikacji bez dodatkowej konfiguracji. 

Azure Container Apps (ACA) oferuje dwa główne tryby rozliczenia i wdrożenia: 

  • Consumption plan – tryb serverless, w którym jedyną opłatą jest ta za rzeczywiste zużycie CPU/RAM, a usługi mogą skalować się do zera. 
  • Dedicated plan – wariant z dedykowanym klastrem Kubernetes, rezerwacją zasobów i pełną integracją z VNet. To tryb stworzony z myślą o korporacyjnych wymaganiach bezpieczeństwa i zgodności. 

Tryb Consumption zapewnia możliwość szybkiego wdrożenia i oszczędność kosztów i niewątpliwie są to plusy. Jednak w dzisiejszych czasach dla wielu organizacji to za mało – izolacja sieciowa, zgodność z politykami bezpieczeństwa i pełna kontrola nad infrastrukturą również odgrywają kluczową rolę. W takiej sytuacji najlepszym wyborem w Azure Container Apps (ACA) jest Dedicated plan, który umożliwia zaawansowane scenariusze korporacyjne. W dalszej części artykułu skupimy się głównie na tym podejściu.

Dedicated plan w ACA 

Dedicated plan to wariant usługi ACA oparty na w pełni zarządzanym klastrze Kubernetes w Twojej subskrypcji Azure. W przeciwieństwie do wariantu Consumption Dedicated plan oferuje: 

  • Stałe zasoby – rezerwujesz klastry o określonej wielkości (ilość nodów, vCPU, RAM), co daje przewidywalność wydajności. 
  • VNet integration – możesz dołączyć klaster do wirtualnej sieci (VNet), co pozwoli na korzystanie z prywatnych endpointów i peeringu, oraz zapewni pełną izolację ruchu. 
  • Private Link – serwisy komunikują się wewnątrz Twojej prywatnej sieci, zgodnie z korporacyjnymi wymaganiami. 
  • Zgodność i polityki – Dedicated plan wspiera Azure Policy, Azure Defender i inne mechanizmy Azure Security Center. 

Tabela poniżej opisuje kluczowe korzyści planu Dedicated.

Cechy Korzyści w środowisku korporacyjnym 
VNet Integration Izolacja sieciowa, dostęp tylko przez prywatne adresy IP. 
Private Link / Endpointy Cały ruch do rejestrów kontenerów i serwisów ACA w sieci prywatnej. 
Rezerwacja zasobów Gwarantowana wydajność i SLA na poziomie korporacyjnym. 
Azure Policy Wymuszanie tagowania, audytu i reguł bezpieczeństwa. 
Płatność za alokację Stabilny model kosztowy — opłacasz zarezerwowane zasoby. 

Bezpieczeństwo i zgodność 

  1. Izolacja sieci 
  • Dedykowany klaster w Twojej VNet z wyłączonym bezpośrednim dostępem z Internetem i dostępem tylko przez prywatne łącza. 
  • Możliwość zastosowania Azure Firewall lub Network Security Groups (NSG) do kontrolowania ruchu. 
  1. Kontrola tożsamości 
  • Integracja z Azure Active Directory, Managed Identities i Role-Based Access Control (RBAC) na poziomie środowiska i poszczególnych aplikacji. 
  • Możliwość przypisywania różnych ról i uprawnień dla zespołów pracujących nad różnymi aplikacjami w ramach tego samego środowiska. 
  1. Audyt i polityki 

Azure Policy pozwala automatycznie wymuszać:

  • Wymagane skanowanie obrazów kontenerów (Defender for Containers). 
  • Tagowanie zasobów i reguły naming convention. 
  • Ograniczenia IP źródłowych/destynacyjnych. 

Pełna integracja z Azure DevOps 

Integracja Azure Container Apps z Azure DevOps pozwala firmom wdrażać aplikacje mikroserwisowe w sposób powtarzalny, bezpieczny i w pełni zautomatyzowany. Dzięki wykorzystaniu infrastruktury jako kodu (IaC) oraz rozbudowanego mechanizmu pipeline’ów CI/CD, możesz zyskać: 

  • Pełną automatyzację wdrożeń – zmiany w kodzie lub plikach Bicep wyzwalają automatyczne pipeline’y, które budują obrazy kontenerów, przesyłają je do Azure Container Registry i wdrażają do ACA. 
  • Powtarzalność i zgodność z politykami IT – infrastruktura i konfiguracja środowisk są zdefiniowane jako kod – wdrażasz je w każdym środowisku identycznie, z uwzględnieniem polityk korporacyjnych. 
  • Bezpieczne połączenie z VNet – Azure DevOps może korzystać z private agentów zainstalowanych w Twojej VNet, co pozwala wdrażać zasoby ACA Dedicated w jeszcze bardziej bezpieczny sposób. 
  • Wersjonowanie infrastruktury – pliki Bicep i konfiguracje pipeline’ów przechowywane w repozytorium Git umożliwiają śledzenie zmian i szybki rollback na wypadek problemów. 
  • Zintegrowane testy i walidacje – możesz dodać kroki walidujące szablony Bicep (az bicep build, what-if), testujące aplikację po wdrożeniu lub wykonujące skany bezpieczeństwa. 
  • Kontrola dostępu – dzięki integracji z Azure Active Directory i RBAC w DevOps, masz precyzyjną kontrolę nad tym, kto może zatwierdzać zmiany, uruchamiać pipeline’y czy modyfikować szablony infrastruktury. 

Monitorowanie aplikacji z wykorzystaniem narzędzi Azure 

Dla środowisk korporacyjnych, w których kluczowe są niezawodność i szybka reakcja na incydenty, nieodzownym elementem jest skuteczne monitorowanie. Azure Container Apps oferuje pełną integrację z narzędziami do obserwowalności, dzięki czemu możesz w prosty sposób analizować stan aplikacji, wykrywać błędy i reagować na nie w czasie rzeczywistym. 

Azure Monitor i Log Analytics 

  • Zbieranie logów i metryk – każda aplikacja uruchomiona w ACA może automatycznie przesyłać dane diagnostyczne do Azure Monitor. Logi, metryki i zdarzenia są centralizowane w Log Analytics Workspace, co umożliwia zaawansowaną analizę. 
  • Kwerendy Kusto (KQL) – możesz tworzyć złożone zapytania w języku KQL, by analizować konkretne zachowania aplikacji, np. liczbę błędów HTTP 500 w ciągu ostatniej doby czy czasy odpowiedzi poszczególnych usług. 
  • Wizualizacja danych – dane z Log Analytics można wizualizować, dzięki czemu zespoły operacyjne mają wgląd w kluczowe wskaźniki w czasie rzeczywistym. 

Alerty i automatyzacja reakcji 

  • Alerty metryczne i logowe – możesz ustawić reguły, które będą automatycznie uruchamiać alerty na podstawie metryk (np. CPU > 80% przez 5 minut) lub danych z logów (np. wystąpienie wyjątku). 
  • Integracja z ITSM i DevOps – alerty mogą być przekazywane do Microsoft Teams, ServiceNow, Jira lub innych systemów ITSM, co przyspiesza reakcję zespołów. 
  • Akcje automatyczne – możliwość uruchamiania Logic Apps, runbooków lub webhooków jako odpowiedzi na zdarzenie – np. restart kontenera, skalowanie aplikacji lub powiadomienie administratora.

Przykładowa architektura rozwiązania z Azure Container Apps 

No dobrze, omówiliśmy podstawy działania Azure Container Apps. Teraz warto również spojrzeć na realny przykład wykorzystania tej platformy w architekturze aplikacji. Poniższy diagram prezentuje uproszczony model systemu opartego na mikrousługach – zbudowanego z wykorzystaniem usług Azure w środowisku dedykowanym ACA.

mikroserwisy nie takie straszne – dzięki azure container apps 1

W tym przykładzie, kluczowe komponenty aplikacji – frontend (React), usługi API (Customers, Products), integracje (DB Service, Integration Service) oraz system zarządzania treścią – zostały rozdzielone na osobne aplikacje kontenerowe i uruchomione we wspólnym środowisku Azure Container Apps. Całość działa w Dedicated planie, z pełną integracją z prywatną siecią VNet. 

Komunikacja z użytkownikami końcowymi odbywa się przez Azure Front Door z aktywnym WAF/CDN, co zapewnia bezpieczeństwo i wysoką dostępność. System korzysta z różnych zasobów platformy Azure, takich jak: 

  • Azure SQL Database – dla warstwy danych aplikacji. 
  • Azure Key Vault – do bezpiecznego przechowywania sekretów, z dostępem przez Managed Identities. 
  • Azure Cache for Redis – realizujacy cache aplikacyjny. 
  • Azure Log Analytics – do centralnego monitorowania, alertowania i analizy logów. 
  • Azure Storage – jako repozytorium plików monitorowane poprzez usługę skanowania plików dostarczaną przez Microsoft Defender for Cloud. 

System integruje się także z usługami zewnętrznymi, takimi jak SendGrid i SMS API – pozwala to na wysyłkę e-maili i powiadomień SMS. Dostęp administracyjny odbywa się przez bezpieczne połączenie VPN. 

Taka architektura to jedynie prosty przykład, który pokazuje, jak można wykorzystać Azure Container Apps w architekturze opartej o mikroserwisy. Powyższa architektura aplikacji zbudowanej w oparciu o Azure Container Apps może zostać skutecznie zintegrowana z Azure DevOps, co pozwala w pełni zautomatyzować procesy budowania, testowania i wdrażania kodu oraz infrastruktury. Z kolei na poniższym diagramie przedstawiono uproszczony przepływ DevOps dla tej architektury:

mikroserwisy nie takie straszne – dzięki azure container apps 3

Repozytoria kodu źródłowego (Azure Repos) przechowują aplikacje frontendowe i backendowe (np. React, .NET) oraz definicje infrastruktury jako kod (np. w plikach Bicep). Azure Piplines pozwala na stworzenie pipeline CI/CD, które: 

  • budują aplikację i kontenery, 
  • publikują artefakty i obrazy do Azure Container Registry, 
  • wdrażają środowisko na podstawie plików Bicep. 

Proces może być dodatkowo rozszerzony o walidację szablonów Bicep, skanowanie bezpieczeństwa, podpisywanie artefaktów, czy automatyczne rollbacki. Wdrożenia mogą być realizowane z użyciem self-hosted agenta działającego wewnątrz tej samej sieci VNet co środowisko ACA, co pozwala zachować pełną izolację sieciową i zgodność z politykami bezpieczeństwa. Takie podejście gwarantuje pełną kontrolę nad całym cyklem życia aplikacji – od kodu źródłowego poprzez testy aż po automatyczne, bezpieczne i powtarzalne wdrożenia na poszczególne środowiska. 

Kiedy warto sięgnąć po Azure Container Apps? 

Wprowadzenie mikroserwisów do organizacji to poważna decyzja architektoniczna, która wymaga nie tylko przemyślenia podziału systemu na usługi, ale też dobrania odpowiedniego modelu wdrożenia i narzędzi. Azure Container Apps stanowi interesującą alternatywę dla klasycznego Kubernetes – szczególnie dla organizacji, które chcą skupić się na rozwoju aplikacji, a nie zarządzaniu infrastrukturą. 

Kiedy warto? 

  • Gdy zależy Ci na szybkim wdrażaniu mikroserwisów, bez konieczności utrzymywania klastra Kubernetes. 
  • Gdy chcesz uruchamiać kontenery w izolowanym, bezpiecznym środowisku zgodnym z korporacyjnymi politykami (np. VNet, RBAC, Azure Policy). 
  • Gdy Twoje aplikacje mają dynamiczne obciążenie – ACA wspiera automatyczne skalowanie, w tym do zera. 
  • Gdy budujesz środowisko CI/CD w oparciu o Azure DevOps i chcesz stosować Infrastructure as Code (np. Bicep). 
  • Gdy korzystasz już z usług platformy Azure i chcesz zachować spójność środowiska.

Kiedy lepiej rozważyć inne podejście? 

  • Gdy potrzebujesz pełnej kontroli nad klastrą i konfiguracją orkiestracji. 
  • Gdy planujesz zaawansowane scenariusze sieciowe.
  • Gdy Twoje aplikacje nie korzystają z kontenerów i lepiej pasują do modelu opartym np. wirtualnych maszynach lub innych cloudowych rozwiązaniach typu azure App Services. 

Podsumowanie 

Azure Container Apps to dojrzała platforma, która w połączeniu z Azure DevOps, Bicep i ekosystemem Azure, umożliwia budowanie nowoczesnych, skalowalnych i bezpiecznych środowisk mikroserwisowych – bez potrzeby posiadania zespołu DevOps na pełny etat. Dzięki trybowi Dedicated, ACA staje się realną alternatywą dla Kubernetes w środowiskach o zwiększonych wymogach bezpieczeństwa, gdzie istotne są: integracja z VNet, zgodność z politykami, monitorowanie, kontrola kosztów i automatyzacja. To rozwiązanie, które zdejmuje z barków zespołów projektowych ciężar infrastruktury, pozwalając im skupić się na dostarczaniu wartości biznesowej. 

Nasi eksperci specjalizują się w wielu dziedzinach – również we wdrożeniach architektury mikroserwisowej. Jeżeli jest to rozwiązanie, które chcesz zobaczyć w swojej organizacji – wypełnij poniższy formularz.

Skontaktuj się z nami

Previous Post