{"id":37586,"date":"2019-10-31T22:18:27","date_gmt":"2019-10-31T19:18:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/infrastructure-as-code-pervoe-znakomstvo\/"},"modified":"2019-10-31T22:18:27","modified_gmt":"2019-10-31T19:18:27","slug":"infrastructure-as-code-pervoe-znakomstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","title":{"rendered":"Infrastructure as code: pierwsze kroki","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>W naszej firmie trwa proces onboardingu zespo\u0142u SRE. Zaczyna\u0142em t\u0119 przygod\u0119 od strony programowania. W trakcie tego procesu mia\u0142em przemy\u015blenia i spostrze\u017cenia, kt\u00f3rymi chcia\u0142bym podzieli\u0107 si\u0119 z innymi programistami. W tym artykule-refleksji m\u00f3wi\u0119 o tym, co si\u0119 dzieje, jak to si\u0119 dzieje i jak wszyscy powinni sobie z tym radzi\u0107 w przysz\u0142o\u015bci. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/d154a2fbbd0dd846c763db178f02702e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Ci\u0105g dalszy serii artyku\u0142\u00f3w napisanych na podstawie wyst\u0105pie\u0144 na naszym wewn\u0119trznym wydarzeniu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/462033\/\">DevForum<\/a><\/noindex><\/b>: <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/463469\/\">1. Kot Schr\u00f6dingera bez pude\u0142ka: problem konsensusu w systemach rozproszonych.<\/a><\/noindex><br \/>\n2. Infrastructure as code. (Jeste\u015b tutaj)<br \/>\n3. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f Typescript \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043f\u043e c# \u043c\u043e\u0434\u0435\u043b\u044f\u043c. (In progress&#8230;)<br \/>\n4. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Raft. (In progress&#8230;)<br \/>\n\u2026<\/p><\/blockquote>\n<p>\nPostanowili\u015bmy stworzy\u0107 zesp\u00f3\u0142 SRE, wcielaj\u0105c idee <noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/books\/\">google sre<\/a><\/noindex>. Zatrudnili\u015bmy programist\u00f3w z naszego zespo\u0142u i wys\u0142ali\u015bmy ich na kilka miesi\u0119cy na szkolenie. <\/p>\n<p>Przed zespo\u0142em stan\u0119\u0142y nast\u0119puj\u0105ce zadania edukacyjne:<\/p>\n<ul>\n<li>Opisa\u0107 nasz\u0105 infrastruktur\u0119, kt\u00f3ra w przewa\u017caj\u0105cej cz\u0119\u015bci znajduje si\u0119 w Microsoft Azure, w formie kodu (Terraform i wszystko, co z tym zwi\u0105zane). <\/li>\n<li>Nauczy\u0107 programist\u00f3w pracy z infrastruktur\u0105. <\/li>\n<li>Przygotowa\u0107 programist\u00f3w do dy\u017cur\u00f3w.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Wprowadzamy poj\u0119cie Infrastructure as code<\/h2>\n<p>\nW klasycznym modelu \u015bwiata (klasycznym administracji) wiedza o infrastrukturze znajduje si\u0119 w dw\u00f3ch miejscach:<\/p>\n<ol>\n<li>Albo w g\u0142owach ekspert\u00f3w.<img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/2400dea0a90c24b05c275b709bbd2057.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Albo te informacje znajduj\u0105 si\u0119 na r\u00f3\u017cnych maszynach, z kt\u00f3rych cz\u0119\u015b\u0107 zna tylko ekspert. Ale nie ma pewno\u015bci, \u017ce osoba z zewn\u0105trz (w przypadku, gdyby nasz zesp\u00f3\u0142 nagle umar\u0142) zdo\u0142a zrozumie\u0107, co i jak dzia\u0142a. Na maszynie mo\u017ce by\u0107 wiele informacji: dost\u0119p\u00f3w, cron job\u00f3w, podmontowanego (zobacz <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Mount_(computing)\">disk mounting<\/a><\/noindex>) dysku i po prostu niesko\u0144czony wykaz tego, co mo\u017ce si\u0119 dzia\u0107. Ci\u0119\u017cko jest zrozumie\u0107, co w rzeczywisto\u015bci si\u0119 dzieje.<img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/37bafea85a641c48683c35975f67f24d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\nW obu przypadkach znajdujemy si\u0119 w pu\u0142apce, staj\u0105c si\u0119 zale\u017cnymi:<\/p>\n<ul>\n<li>albo od cz\u0142owieka, kt\u00f3ry jest \u015bmiertelny, podatny na choroby, zakochania, wahania nastroju, a tak\u017ce po prostu na banalne zwolnienia;<\/li>\n<li>albo od fizycznie dzia\u0142aj\u0105cej maszyny, kt\u00f3ra r\u00f3wnie\u017c mo\u017ce si\u0119 zepsu\u0107, zosta\u0107 skradziona, stwarza\u0107 niespodzianki i niewygody. <\/li>\n<\/ul>\n<p>\nNaturalnie nasuwa si\u0119 rozwi\u0105zanie, aby w idealnym \u015bwiecie wszystko przeku\u0107 w kod zrozumia\u0142y dla ludzi, \u0142atwy do utrzymania i dobrze napisany. <\/p>\n<p>Tak wi\u0119c infrastruktura jako kod (Infrastructure as Code \u2013 IaC) to opis ca\u0142ej istniej\u0105cej infrastruktury w postaci kodu oraz towarzysz\u0105ce narz\u0119dzia do pracy z nim i przekszta\u0142cania go w rzeczywist\u0105 infrastruktur\u0119.<\/p>\n<p><b class=\"spoiler_title\">Dlaczego warto wszystko zamienia\u0107 na kod<\/b>Ludzie to nie maszyny. Nie mog\u0105 zapami\u0119ta\u0107 wszystkiego. Reakcja cz\u0142owieka i maszyny jest r\u00f3\u017cna. Wszystko, co jest zautomatyzowane, zazwyczaj dzia\u0142a szybciej ni\u017c to, co robi cz\u0142owiek. Najwa\u017cniejsze to mie\u0107 jedno \u017ar\u00f3d\u0142o prawdy (single source of truth). <\/p>\n<p><b class=\"spoiler_title\">Sk\u0105d bior\u0105 si\u0119 nowi in\u017cynierowie SRE<\/b>Zdecydowali\u015bmy si\u0119 na zatrudnienie nowych in\u017cynier\u00f3w SRE, ale sk\u0105d ich wzi\u0105\u0107? Ksi\u0105\u017cka z poprawnymi odpowiedziami (<noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/books\/\">Google SRE Book<\/a><\/noindex>) m\u00f3wi: od programist\u00f3w. Pracuj\u0105 z kodem, a ty osi\u0105gasz idealny stan.<\/p>\n<p>Du\u017co szukali\u015bmy ich na rynku pracy poza nasz\u0105 firm\u0105. Ale musimy przyzna\u0107, \u017ce nie znale\u017ali\u015bmy \u017cadnego, kt\u00f3ry spe\u0142nia\u0142by nasze wymagania. Musieli\u015bmy rozejrze\u0107 si\u0119 w\u015br\u00f3d w\u0142asnych zasob\u00f3w. <\/p>\n<h2>Problemy infrastruktury jako kod<\/h2>\n<p>\nTeraz przyjrzyjmy si\u0119 przyk\u0142adom, jak infrastruktura mo\u017ce by\u0107 zakodowana. Kod powinien by\u0107 dobrze napisany, jako\u015bciowy, z komentarzami i wci\u0119ciami. <\/p>\n<p>Przyk\u0142ad kodu z Terraform.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/1a0bbca47e88fb12e97c0f270efba177.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrzyk\u0142ad kodu z Ansible.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/358fad8f5944bca1b97b2d6e37b2ee5e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSzanowni Pa\u0144stwo, ale gdyby to by\u0142o takie proste! Jeste\u015bmy w rzeczywistym \u015bwiecie, a on zawsze jest gotowy zaskoczy\u0107 was, dostarczy\u0107 niespodzianek, problem\u00f3w. Tutaj r\u00f3wnie\u017c ich nie brakuje.<\/p>\n<p><b>1. Pierwszy problem polega na tym, \u017ce w wi\u0119kszo\u015bci przypadk\u00f3w IaC to jaki\u015b DSL.<\/b><\/p>\n<p>A DSL z kolei to opis struktury. Dok\u0142adniej m\u00f3wi\u0105c, tego, co powiniene\u015b mie\u0107: Json, Yaml, modyfikacje od r\u00f3\u017cnych du\u017cych firm, kt\u00f3re wymy\u015bli\u0142y swoje DSL (w Terraformie u\u017cywa si\u0119 HCL). <\/p>\n<p>Problem w tym, \u017ce mog\u0105 w nim \u0142atwo brakowa\u0107 takich znanych nam element\u00f3w jak:<\/p>\n<ul>\n<li>zmienne;<\/li>\n<li>warunki;<\/li>\n<li>gdzie\u015b brakuje komentarzy, na przyk\u0142ad w Json, domy\u015blnie ich nie przewidziano;<\/li>\n<li>funkcje;<\/li>\n<li>a to jeszcze nie m\u00f3wi\u0119 o takich rzeczach na wy\u017cszym poziomie jak klasy, dziedziczenie i inne tego typu.<\/li>\n<\/ul>\n<p>\n <b>2. Drugi problem tego kodu \u2013 najcz\u0119\u015bciej jest to heterogeniczne \u015brodowisko.<\/b>. Zwykle siedzisz i pracujesz w C#, czyli z jednym j\u0119zykiem, jednym stosie, jedn\u0105 ekosystem\u0105. A tu masz ogromn\u0105 r\u00f3\u017cnorodno\u015b\u0107 technologii. <\/p>\n<p>Ca\u0142kowicie realna sytuacja, kiedy bash z Pythonem uruchamia jaki\u015b proces, do kt\u00f3rego podtykany jest Json. Analizujesz go, a potem jaki\u015b generator wydaje jeszcze 30 plik\u00f3w. Wszystkie te dane wej\u015bciowe pochodz\u0105 z Azure Key Vault, kt\u00f3re s\u0105 pobierane przez wtyczk\u0119 do drone.io, napisan\u0105 w Go, a te zmienne przechodz\u0105 przez yaml, kt\u00f3ry powsta\u0142 w wyniku generacji z silnika szablon\u00f3w jsonnet. Dosy\u0107 trudno mie\u0107 \u015bci\u015ble opisany kod, gdy masz tak r\u00f3\u017cnorodne \u015brodowisko. <\/p>\n<p>Tradycyjny rozw\u00f3j w ramach jednego zadania odbywa si\u0119 w jednym j\u0119zyku. Tutaj pracujemy natomiast z wieloma j\u0119zykami. <\/p>\n<p><b>3. Trzeci problem \u2013 to narz\u0119dzia.<\/b>. Przywykli\u015bmy do \u015bwietnych edytor\u00f3w (Ms Visual Studio, Jetbrains Rider), kt\u00f3re wszystko za nas robi\u0105. I nawet, je\u015bli pope\u0142nimy b\u0142\u0105d, one powiedz\u0105, \u017ce to nie tak. Wygl\u0105da na to, \u017ce to normalne i naturalne. <\/p>\n<p>Ale gdzie\u015b obok jest VSCode, w kt\u00f3rym s\u0105 jakie\u015b wtyczki, kt\u00f3re w jaki\u015b spos\u00f3b si\u0119 instaluj\u0105, s\u0105 wspierane albo nie. Wysz\u0142y nowe wersje, a ich nie wsparto. Banale przej\u015bcie do implementacji funkcji (nawet je\u015bli taka istnieje) staje si\u0119 trudnym i nietrywialnym problemem. Prosta zmiana nazwy zmiennej \u2013 to zamiana w projekcie z dziesi\u0105tek plik\u00f3w. Mo\u017ce si\u0119 uda, je\u015bli zrobi to, co trzeba. Oczywi\u015bcie niekt\u00f3re miejsca maj\u0105 pod\u015bwietlanie, jest automatyczne uzupe\u0142nianie, gdzie\u015b jest formatowanie (chocia\u017c u mnie w Terraformie na Windowsie nie zadzia\u0142a\u0142o). <\/p>\n<p>W momencie pisania artyku\u0142u <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mauve\/vscode-terraform\">vscode-terraform plugin<\/a><\/noindex> jeszcze nie wydano wsparcia dla wersji 0.12, chocia\u017c zosta\u0142a ju\u017c wydana od 3 miesi\u0119cy.<\/p>\n<h2>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0431\u044b\u0442\u044c \u043e&#8230;<\/h2>\n<p><\/p>\n<ol>\n<li>Debugowaniu.<\/li>\n<li>Narz\u0119dziu do refaktoryzacji.<\/li>\n<li>Automatycznym uzupe\u0142nianiu.<\/li>\n<li>Wykrywaniu b\u0142\u0119d\u00f3w przy kompilacji.<\/li>\n<\/ol>\n<p>\n\u015amieszne, ale to wyd\u0142u\u017ca czas pracy nad projektem i zwi\u0119ksza liczb\u0119 b\u0142\u0119d\u00f3w, kt\u00f3re s\u0105 nieuchronne. <\/p>\n<p>Najgorsze jest to, \u017ce zmuszeni jeste\u015bmy my\u015ble\u0107 nie o tym, jak zaprojektowa\u0107, uporz\u0105dkowa\u0107 pliki w folderach, dekomponowa\u0107, uczyni\u0107 kod czytelnym i tak dalej, ale o tym, jak poprawnie napisa\u0107 t\u0119 komend\u0119, poniewa\u017c jako\u015b j\u0105 \u017ale napisa\u0142em. <\/p>\n<p>Jako nowicjusz pr\u00f3bujesz zg\u0142\u0119bi\u0107 Terraform, a IDE w tym wcale Ci nie pomaga. Gdy jest dokumentacja \u2013 wchodzisz, patrzysz. Ale gdyby\u015b uczy\u0142 si\u0119 nowego j\u0119zyka programowania, to IDE podpowiedzia\u0142oby, \u017ce istnieje taki typ, a tamtego nie ma. Przynajmniej na poziomie int lub string. To cz\u0119sto bywa przydatne. <\/p>\n<h2>A co z testami?<\/h2>\n<p>\nZadajecie pytanie: \u201eA co z testami, panowie programi\u015bci?\u201d Powa\u017cni go\u015bcie testuj\u0105 wszystko na produkcji, i to ostro. Oto przyk\u0142ad testu jednostkowego dla modu\u0142u Terraform ze strony. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/azure\/terraform\/terratest-in-terraform-modules\">Microsoft<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/b9391409941e14f7e3cf6f8d964a2668.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMaj\u0105 dobr\u0105 dokumentacj\u0119. Microsoft zawsze mi si\u0119 podoba\u0142 swoim podej\u015bciem do dokumentacji i szkole\u0144. Ale nie trzeba by\u0107 wujkiem Bobem, \u017ceby zrozumie\u0107, \u017ce kod tutaj nie jest idealny. Zwr\u00f3\u0107 uwag\u0119 na walidacj\u0119, kt\u00f3ra zosta\u0142a przeniesiona w prawo. <\/p>\n<p>Problem z testem jednostkowym polega na tym, \u017ce mo\u017cemy sprawdzi\u0107 poprawno\u015b\u0107 JSON-a na wyj\u015bciu. Wprowadzi\u0142em 5 parametr\u00f3w, a otrzyma\u0142em 2000-liniow\u0105 porcj\u0119 JSON-a. Mog\u0119 przeanalizowa\u0107, co si\u0119 tutaj dzieje, walidowa\u0107 wynik testu\u2026 <\/p>\n<p>Trudno jest analizowa\u0107 JSON w Go. A trzeba pisa\u0107 w Go, poniewa\u017c Terraform w Go to dobra praktyka testowania w tym j\u0119zyku, w kt\u00f3rym piszesz. Organizacja kodu jest bardzo s\u0142aba. Mimo to, to najlepsza biblioteka do testowania. <\/p>\n<p>Sami Microsoft pisz\u0105 swoje modu\u0142y, testuj\u0105c je w ten spos\u00f3b. Oczywi\u015bcie, jest to Open Source. Wszystko, o czym m\u00f3wi\u0119, mo\u017cesz przyj\u015b\u0107 i naprawi\u0107. Mog\u0119 usi\u0105\u015b\u0107 i w tydzie\u0144 wszystko naprawi\u0107, otworzy\u0107 \u017ar\u00f3d\u0142a wtyczek VS Code, Terraform, stworzy\u0107 plugin dla Ride, mo\u017ce napisa\u0107 kilka analizator\u00f3w, pod\u0142\u0105czy\u0107 lintery, wnie\u015b\u0107 wk\u0142ad do biblioteki testowej. Mog\u0119 wszystko zrobi\u0107. Ale nie o to powinienem si\u0119 zajmowa\u0107. <\/p>\n<h2>Najlepsze praktyki Infrastructure as Code<\/h2>\n<p>\nJedziemy dalej. Je\u015bli w IaC nie ma test\u00f3w, IDE i narz\u0119dzia s\u0105 s\u0142abe, to powinny by\u0107 przynajmniej najlepsze praktyki. Po prostu poszed\u0142em na Google Analytics i przeprowadzi\u0142em por\u00f3wnanie dw\u00f3ch zapyta\u0144: Terraform best practices i C# best practices. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/3d0e8cd626596deea99324285321a0ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCo widzimy? Bezwzgl\u0119dn\u0105 statystyk\u0119 nie na nasz\u0105 korzy\u015b\u0107. Pod wzgl\u0119dem ilo\u015bci materia\u0142\u00f3w \u2013 sytuacja jest ta sama. W rozwoju C# po prostu ton\u0105 w materia\u0142ach, mamy super najlepsze praktyki, s\u0105 ksi\u0105\u017cki napisane przez ekspert\u00f3w oraz ksi\u0105\u017cki pisane przez innych ekspert\u00f3w, kt\u00f3re krytykuj\u0105 te pierwsze. Mn\u00f3stwo oficjalnej dokumentacji, artyku\u0142\u00f3w, kurs\u00f3w, a teraz jeszcze open source development.<\/p>\n<p>Je\u015bli chodzi o zapytanie dotycz\u0105ce IaC: tu pr\u00f3bujesz zbiera\u0107 informacje z wyk\u0142ad\u00f3w high-load lub HashiConf, z oficjalnej dokumentacji i licznych problem\u00f3w na GitHubie. Jak w og\u00f3le rozdziela\u0107 te modu\u0142y, co z nimi robi\u0107? Wydaje si\u0119, \u017ce to prawdziwy problem\u2026 Jest przecie\u017c spo\u0142eczno\u015b\u0107, panowie, w kt\u00f3rej na ka\u017cde pytanie dostaniesz 10 komentarzy na GitHubie. Ale to nie jest pewne. <\/p>\n<p>Niestety, na chwil\u0119 obecn\u0105 eksperci dopiero zaczynaj\u0105 si\u0119 pojawia\u0107. Jest ich jeszcze zbyt ma\u0142o. A ca\u0142e community pozostaje na etapie wczesnym. <\/p>\n<h2>Dok\u0105d to wszystko zmierza i co robi\u0107<\/h2>\n<p>\nMo\u017cna wszystko rzuci\u0107 i wr\u00f3ci\u0107 do C#, w \u015bwiat rideg'a. Ale nie. Dlaczego w og\u00f3le mia\u0142by\u015b si\u0119 tym zajmowa\u0107, je\u015bli nie po to, by znale\u017a\u0107 rozwi\u0105zanie. Poni\u017cej przedstawiam moje subiektywne wnioski. Mo\u017cesz ze mn\u0105 polemizowa\u0107 w komentarzach, b\u0119dzie ciekawie. <\/p>\n<p>Osobi\u015bcie stawiam na kilka rzeczy:<\/p>\n<ol>\n<li>Rozw\u00f3j w tej dziedzinie post\u0119puje bardzo szybko. Podaj\u0119 wykres zapyta\u0144 dotycz\u0105cych DevOps.\n<p><img decoding=\"async\" alt=\"Infrastructure as code: pierwsze kroki\" src=\"\/wp-content\/uploads\/2019\/08\/068276f040f17c84a4c7eb9e11703c5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017ce to kontrowersyjny temat, ale sam fakt, \u017ce ta dziedzina ro\u015bnie, daje pewn\u0105 nadziej\u0119. <\/p>\n<p>Je\u015bli co\u015b rozwija si\u0119 tak szybko, to na pewno pojawi\u0105 si\u0119 m\u0105drzy ludzie, kt\u00f3rzy powiedz\u0105, jak to robi\u0107, a jak nie. Wzrost popularno\u015bci prowadzi do tego, \u017ce kto\u015b w ko\u0144cu znajdzie czas, aby dopisa\u0107 wtyczk\u0119 do jsonnet dla vscode, kt\u00f3ra pozwoli przechodzi\u0107 do implementacji funkcji, a nie szuka\u0107 jej przez ctrl+shift+f. Kiedy wszystko si\u0119 rozwija, pojawia si\u0119 wi\u0119cej materia\u0142\u00f3w. To samo wydanie ksi\u0105\u017cki od Google o SRE jest \u015bwietnym tego przyk\u0142adem.<\/li>\n<li>S\u0105 opracowane metody i praktyki w zwyk\u0142ym programowaniu, kt\u00f3re mo\u017cemy z powodzeniem zastosowa\u0107 tutaj. Tak, s\u0105 pewne szczeg\u00f3\u0142y zwi\u0105zane z testowaniem i heterogennym \u015brodowiskiem, niedostateczne narz\u0119dzia, ale zgromadzono ogromn\u0105 liczb\u0119 praktyk, kt\u00f3re mog\u0105 by\u0107 przydatne i pomocne.\n<p>Banalny przyk\u0142ad: praca zespo\u0142owa przez pair programming. To bardzo pomaga w zrozumieniu. Kiedy masz obok siebie s\u0105siada, kt\u00f3ry te\u017c stara si\u0119 co\u015b zrozumie\u0107, razem zrozumiecie lepiej.<\/p>\n<p> Zrozumienie, jak przeprowadza si\u0119 refaktoryzacj\u0119, pomaga nawet w takiej sytuacji j\u0105 wykona\u0107. To znaczy, \u017ce mo\u017cesz nie zmienia\u0107 wszystkiego na raz, ale najpierw zmieni\u0107 nazewnictwo, potem lokalizacj\u0119, mo\u017ce wyodr\u0119bni\u0107 jak\u0105\u015b cz\u0119\u015b\u0107, o, a tutaj brakuje komentarzy. <\/li>\n<\/ol>\n<p><\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nMimo \u017ce moje rozwa\u017cania mog\u0105 wydawa\u0107 si\u0119 pesymistyczne, z nadziej\u0105 patrz\u0119 w przysz\u0142o\u015b\u0107 i szczerze mam nadziej\u0119, \u017ce nam (i wam) si\u0119 uda.<\/p>\n<blockquote><p>Wkr\u00f3tce przygotuj\u0119 drug\u0105 cz\u0119\u015b\u0107 artyku\u0142u. W niej opowiem o tym, jak pr\u00f3bowali\u015bmy zastosowa\u0107 praktyki zwinnego programowania, aby poprawi\u0107 nasz proces uczenia si\u0119 i prac\u0119 z infrastruktur\u0105.<\/p><\/blockquote>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435-\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0438 \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u043a\u0430\u043a \u0432\u0441\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u044d\u0442\u0438\u043c \u0436\u0438\u0442\u044c. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28211,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37586","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Infrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:18:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Infrastructure as code: pierwsze spotkanie | ProHoster","description":"W naszej firmie trwa proces onboardingu zespo\u0142u SRE. Do\u0142\u0105czy\u0142em do tego procesu od strony rozwoju. W trakcie tej podr\u00f3\u017cy pojawi\u0142y si\u0119 my\u015bli i spostrze\u017cenia, kt\u00f3rymi chcia\u0142bym si\u0119 podzieli\u0107 z innymi programistami.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Infrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e | ProHoster","og:description":"\u0423 \u043d\u0430\u0441 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 SRE-\u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u042f \u0437\u0430\u0448\u0451\u043b \u0432\u043e \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u044b\u0441\u043b\u0438 \u0438 \u0438\u043d\u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/infrastructure-as-code-pervoe-znakomstvo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:18:27+00:00","article:modified_time":"2019-10-31T19:18:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37586","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:29:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:24:24","updated":"2026-01-23 18:29:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=37586"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37586\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/28211"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=37586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=37586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=37586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}