Jakich narzędzi programistycznych używałem, pracując jako w Amazonie

W firmach, takich jak Amazon, wewnętrzne narzędzia to konieczność. Projekty stają się większe i trudniejsze do utrzymania, jeśli każdy robi coś na swój własny sposób lub jeśli np. przykładasz większą wagę, do powiedzmy GitHub Actions.
W Amazonie istnieje wiele narzędzi, z których korzystają programiści, ale jest tam jedno szczególne, z którym pracują prawie wszyscy pracownicy Amazona i które jest gwiazdką z nieba dla programistów... i nie jest to narzędzie wewnętrzne. Zgadza się! Jest to piękne narzędzie zewnętrzne, z którego każdy może skorzystać.
Chociaż pewnie odnosisz wrażenie, że jest to jakaś reklama, to w żaden sposób nie mówię w imieniu Amazona, ani nie jestem przez nich sponsorowany. Po prostu bardzo lubię to narzędzie i piszę ten artykuł po to, aby więcej programistów wyszło z jaskini Terraform, lub (litości) używania UI AWS.
Problem
Pozwólcie, że opowiem wam pewną historię, to historia programisty żółtodzioba. Uczył się JavaScriptu dla frontendu i Pythona dla backendu, ale gotowy jest na interfejs z bazą danych. Problem w tym, że bazy danych nie są darmowe i są trudne do zarządzania. Taki tok myślenia doprowadza młody umysł programisty do AWS. Poznają AWS i zostają zaznajomieni z zawrotną liczbą usług: SNS, SQS, S3, DynamoDB, ECS, Snowball.
Każdy z nas znalazł się w takiej sytuacji. Jest to trochę taka inicjacja dla współczesnego programisty. Myślałem wtedy o tym, jak trudno byłoby zarządzać wieloma z tych serwisów na większą skalę. Samo uruchomienie stosu ECS, S3 i RDS zajęło mi długie godziny — co, jeśli chciałbym klaster VPC, ECS albo VPN? Ustawienie ich byłoby męczarnią.
Szybko przerzuciłem się więc na Terraform. Terraform jest świetny i wiadomo, robi to, co robi, ale jest trudny w użyciu. Musisz nauczyć się HCL, zagmatwanego i trudnego języka znaczników. Nie posiada autouzupełniania, tak więc jesteś zdany tylko na siebie i musisz upewnić się, że wszystko robisz dobrze. Same koncepty są trudne do opanowania — HCL wydaje się po prostu zacofany, a wiele norm obowiązujących w krainie Terraform jest po prostu... dziwnych. Tak dziwnych, że wielu kieruje się po pomoc do Terragrunt.
Jak to wszystko rozwiązać?
Tak samo, jak na problemy internetowe: Amazon ma rozwiązanie.
AWS CDK
AWS CDK to fenomenalne narzędzie, które, z tego, co się do tej pory dowiedziałem, rozwiązuje w sposób precyzyjny wszystkie problemy z Terraform lub ręcznym tworzeniem stosu.
Używając TypeScripta (inne języki mają interfejs z systemem CDK, ale TS jest zdecydowanie moim ulubionym) zamiast HCL lub innych niestandardowych tworów, pozwalamy programistom czuć się bardziej komfortowo w pracy. Nie pracują już z nowym i przerażającym językiem z przestarzałym systemem: piszą i debugują kod bezpośrednio w języku, który jest dla nich do opanowania.
Wszystko jest tutaj jawne. W CDK nic się nie ukrywa. Jeśli używasz konsoli AWS, staje się jeszcze bardziej prawdopodobne, że przegapisz jakiś krok konfiguracyjny lub utkniesz w jakimś miejscu i cały twój stos stanie się stosem oddzielonych od siebie części. Terraform jest krokiem we właściwym kierunku, ale jako dynamicznie typowana konstrukcja możesz umieścić cokolwiek gdziekolwiek, a linter nie powie ci “Ta zmienna jest niezdefiniowana!” lub “Ten parametr nie istnieje!”. Po prostu zakończy się to błędem w runtimie. TypeScript jest zaprojektowany jako język dla początkujących programistów, z IntelliSense jako typ pierwszoklasowy i z dużym asortymentem narzędzi.
Jeśli jesteś anty-AWSowcem (spoko — ja też mam kilka zastrzeżeń do AWS!), masz szczęście — istnieje wiele fantastycznych dostawców IaC, takich jak Serverless i Pulumi. IaC, czyli infrastruktura jako kod, ogólnie rzecz biorąc, to niezły pomysł, jest korzystna dla programistów i ich biznesowych panów i władców.
Ja jednak trzymałbym się z dala od Terraform i Ansible. Zbyt wiele zainwestowano w narzędzia, których deweloperzy używają, a które całkowicie ich pomijają. Fakt, że możesz łatwo napisać testy jednostkowe dla swojej infrastruktury — oznacza, że nie musisz martwić się, że zaśniesz i przypadkowo nabijesz milion dolarów na rachunku za AWS.
Jedną z najwspanialszych rzeczy w CDK jest to, że jeśli tworzysz wiele środowisk (beta, alpha, prod, QA, itd.), to wszystko, co musisz zrobić to owinąć CDK w pętlę for
i sprawić, by zmienne przyjmowały ciąg wejściowy: zamiast vpcName = 'vpc'
, wykonaj interpolację ciągu znaków i zrób coś takiego vpcName = `{stage}-vpc`
.
Ze wszystkich narzędzi, z których nauczyłem się korzystać w Amazonie, CDK jest moim ulubionym. Użyteczność jest bezkonkurencyjna. Jeśli kiedykolwiek jeszcze stworzę projekt w chmurze, możesz się założyć, że stworzę paczkę CDK.
Oryginał tekstu w języku angielskim przeczytasz tutaj.