Cloudowe SDK-i, takie jak AWS, Google Cloud czy Microsoft Azure, są często głęboko zintegrowane z kodem aplikacji. Choć takie podejście upraszcza bezpośrednią interakcję z zasobami chmurowymi, generuje także poważne wyzwania, zarówno dla zespołów deweloperskich, jak i operacyjnych (DevOps). Wprowadza to dodatkową złożoność i ogranicza elastyczność obu tych grup, a także może prowadzić do niepotrzebnych konfliktów i opóźnień w realizacji projektów.
Dlaczego SDK-i Chmurowe Mogą Być Problemem?
SDK-i chmurowe zapewniają funkcjonalności w czasie wykonywania aplikacji, co teoretycznie powinno ułatwiać deweloperom pracę. Jednakże, by z nich korzystać, wymagane jest dostarczanie szczegółów dotyczących konfiguracji zasobów chmurowych bezpośrednio w kodzie aplikacji. Taki sposób działania prowadzi do silnego powiązania między kodem aplikacji a infrastrukturą, co rodzi kilka problemów.
Po pierwsze, w momencie, gdy deweloper wprowadzi do kodu zależności od SDK-ów chmurowych, zaczyna on nie tylko pisać logikę biznesową, ale również zarządzać zasobami chmurowymi, konfiguracją i infrastrukturą. To przesuwa jego uwagę z rozwiązywania problemów biznesowych na rozwiązywanie problemów związanych z integracją z chmurą.
Po drugie, zespół operacyjny potrzebuje szczegółowej dokumentacji lub musi samodzielnie analizować kod aplikacji, aby zrozumieć, jakie zasoby są wymagane do uruchomienia aplikacji. W praktyce często prowadzi to do czasochłonnych spotkań i zwiększa ryzyko błędów komunikacyjnych.
Jak Oddzielić Odpowiedzialności?
Idealnym rozwiązaniem byłoby wyraźne oddzielenie odpowiedzialności. Deweloperzy powinni być w stanie skupić się na tworzeniu logiki aplikacji, bez konieczności martwienia się o szczegóły konfiguracji infrastruktury. Z kolei zespoły operacyjne powinny mieć pełną kontrolę nad infrastrukturą, z możliwością modyfikacji zasobów chmurowych bez konieczności przepisywania kodu aplikacji.
Aby to osiągnąć, możemy zastosować odpowiedni poziom abstrakcji nad zasobami chmurowymi. To pozwoli deweloperom opisywać, co chcą osiągnąć, bez wymuszania wyboru konkretnej technologii czy dostawcy chmurowego. Dzięki temu możliwe jest oddzielenie logiki aplikacji od infrastruktury, co daje większą elastyczność.
Krok 1: Abstrakcja nad SDK-ami Chmurowymi
Pierwszym krokiem w kierunku oddzielenia kodu aplikacji od infrastruktury jest stworzenie warstwy abstrakcji nad SDK-ami chmurowymi. Większość fundamentów chmurowych, takich jak API, bazy danych, magazyny danych, kolejki czy zadania zaplanowane, oferuje podobną funkcjonalność u różnych dostawców. Dzięki temu możemy stworzyć wspólną warstwę abstrakcji, która umożliwia korzystanie z tych zasobów bez konieczności definiowania, jak mają być one skonfigurowane.
Dla przykładu, jeśli deweloper potrzebuje zapisać dane w chmurowym magazynie, może to zrobić za pomocą biblioteki SDK, która oferuje abstrakcyjne funkcje. Zamiast bezpośrednio odnosić się do specyficznych zasobów, takich jak AWS S3, deweloper definiuje, co chce zrobić (np. „zapisz plik w magazynie”), a konfiguracja konkretnego zasobu jest przekazywana do zespołu operacyjnego.
Krok 2: Automatyzacja Specyfikacji Infrastruktury
Po skutecznym odseparowaniu kodu aplikacji od specyficznych implementacji chmurowych, konieczne jest ustanowienie sposobu komunikacji wymagań infrastrukturalnych między zespołami deweloperskimi a operacyjnymi. Tradycyjnie ten proces byłby ręczny – zespoły deweloperskie musiałyby dostarczyć szczegóły dotyczące wymaganych zasobów operacyjnych. Jednak dzięki zastosowaniu warstwy abstrakcji możemy automatycznie wygenerować specyfikację infrastruktury na podstawie kodu aplikacji.
Specyfikacja ta opisuje zasoby wykorzystywane przez aplikację w formie, która może być łatwo interpretowana przez zespoły operacyjne. Dla przykładu, specyfikacja może zawierać informacje o potrzebnym magazynie danych, kolejkach czy zadaniach zaplanowanych, ale bez szczegółowych informacji o tym, jak te zasoby powinny być skonfigurowane.
Krok 3: Wykorzystanie Modułów IaC (Infrastructure as Code)
Infrastruktura jako kod (IaC) jest naturalnym krokiem w procesie oddzielania odpowiedzialności. Dzięki niej zespoły operacyjne mogą mapować wymagania infrastrukturalne na konkretne zasoby chmurowe za pomocą modułów IaC, takich jak Terraform. W ten sposób operacje mogą decydować o tym, jak konkretnie konfigurować zasoby, dostosowując je do potrzeb organizacyjnych, takich jak koszty czy polityki bezpieczeństwa.
Podsumowanie
Abstrakcja nad SDK-ami chmurowymi umożliwia deweloperom skoncentrowanie się wyłącznie na logice aplikacji, bez obciążenia szczegółami infrastrukturalnymi. Z kolei zespoły operacyjne mogą zarządzać zasobami chmurowymi w sposób bardziej efektywny, mając pełną kontrolę nad konfiguracją i implementacją zasobów. Dzięki automatyzacji specyfikacji infrastruktury i wykorzystaniu modułów IaC, zyskujemy jasny podział odpowiedzialności, który minimalizuje ryzyko błędów i usprawnia proces wdrożenia.