Представянето на инфраструктура като код в повтарящ се текстов формат е проста най-добра практика за системи, които не изискват работа с мишки. Тази практика има име -
Сравняване на опит с Terraform и CloudFormation
Преди да дойде на
Terraform Horrible
Бета софтуер
Terraform все още дори не е пуснал версия 1.0, което е добра причина да не я използвате. Промени се много, откакто го опитах за първи път, но тогава terraform apply
често се разваля след няколко актуализации или просто след няколко години употреба. Бих казал, че „сега всичко е различно“, но... изглежда това казват всички, нали? Има промени, които са несъвместими с предишни версии, въпреки че са подходящи и дори изглежда, че синтаксисът и абстракциите на хранилищата на ресурси са това, от което се нуждаем. Изглежда, че инструментът наистина е станал по-добър, но... :-0
От друга страна, AWS свърши добра работа, поддържайки обратна съвместимост. Това вероятно е така, защото техните услуги често се тестват щателно в организацията и едва след това, преименувани, се публикуват. Така че „те се опитаха много“ е подценяване. Поддържането на обратна съвместимост с API за толкова разнообразна и сложна система като AWS е невероятно трудно. Всеки, който е трябвало да поддържа публични API, които се използват толкова широко, колкото са, трябва да разбере колко трудно е да се прави това толкова много години. Но поведението на CloudFormation, според мен, никога не се е променило през годините.
Запознайте се с крака... това е куршум
Доколкото знам, изтрийте ресурса аутсайдер CloudFormation стек от вашия CF стек не е възможен. Същото е и с Terraform. Тя ви позволява да импортирате съществуващи ресурси във вашия стек. Може да се каже, че функцията е невероятна, но с голямата мощност идва и голяма отговорност. Просто трябва да добавите ресурс към стека и докато работите с вашия стек, не можете да изтриете или промените този ресурс. Един ден се оказа обратен ефект. Един ден в Twitch някой случайно импортира нечия друга AWS група за сигурност в собствения си стек Terraform, без да прави никакви пакости. Въведох няколко команди и... групата за сигурност (заедно с входящия трафик) изчезна.
Terraform Great
Възстановяване от непълни състояния
Понякога CloudFormation не успява напълно да премине от едно състояние в друго. В същото време той ще се опита да се върне към предишния. Жалко, че това не винаги е осъществимо. Може да бъде доста страшно да се отстраняват грешки в случилото се по-късно - никога не знаете дали CloudFormation ще се зарадва, че е хакнат - дори само за да го поправите. Независимо дали ще бъде възможно да се върне към предишното състояние или не, той наистина не знае как да определи и по подразбиране виси с часове в очакване на чудо.
Terraform, от друга страна, има тенденция да се възстановява от неуспешни преходи много по-грациозно и предлага разширени инструменти за отстраняване на грешки.
По-ясни промени в състоянието на документа
„Добре, балансьор на натоварването, променяш се. Но как?"
— разтревожен инженер, готов да натисне бутона „приемам“.
Понякога трябва да направя някои манипулации с балансиращото натоварване в стека CloudFormation, като добавяне на номер на порт или промяна на група за защита. ClouFormation показва лошо промените. Аз, на крачка, проверявам отново yaml файла десет пъти, за да се уверя, че не съм изтрил нищо необходимо и не съм добавил нищо ненужно.
Terraform е много по-прозрачен в това отношение. Понякога дори е твърде прозрачен (да се чете: скучен). За щастие най-новата версия включва подобрено показване на промените, така че сега можете да видите точно какво се променя.
Гъвкавост
Напишете софтуер отзад напред.
Казано направо, най-важната характеристика на дълготрайния софтуер е способността да се адаптира към промените. Напишете всеки софтуер отзад напред. Най-често правех грешки, като вземах „проста“ услуга и след това започвах да натъпквам всичко в един стек CloudFormation или Terraform. И разбира се, месеци по-късно се разкри, че съм разбрал всичко погрешно и услугата всъщност не е проста! И сега трябва по някакъв начин да разделя голям стек на малки компоненти. Когато работите с CloudFormation, това може да стане само като първо пресъздадете съществуващия стек, а аз не правя това с моите бази данни. Terraform, от друга страна, направи възможно разчленяването на стека и разделянето му на по-разбираеми по-малки части.
Модули в git
Споделянето на код на Terraform в множество стекове е много по-лесно от споделянето на код на CloudFormation. С Terraform можете да поставите своя код в git хранилище и да получите достъп до него чрез семантичен контрол на версията. Всеки с достъп до това хранилище може да използва повторно споделения код. Еквивалентът на CloudFormation е S3, но той няма същите предимства и няма причина изобщо да изоставяме git в полза на S3.
Организацията се разрасна и възможността за споделяне на общи стекове достигна критично ниво. Terraform прави всичко това лесно и естествено, докато CloudFormation ще ви накара да преминете през обръчи, преди да можете да направите нещо подобно да работи.
Операции като код
„Нека го напишем и добре.“
— инженер 3 години преди изобретяването на велосипеда Terraform.
Когато става въпрос за разработка на софтуер, Go или Java програма не е просто код.
Код като код
Там е и инфраструктурата, по която работи.
Инфраструктурата като код
Но откъде е тя? Как да го следим? Къде живее вашият код? Разработчиците имат ли нужда от разрешение за достъп?
Операциите като код
Да си софтуерен разработчик не означава просто да пишеш код.
AWS не е единственият: вероятно използвате други доставчици. SignalFx, PagerDuty или Github. Може би имате вътрешен сървър на Jenkins за CI/CD или вътрешно табло за управление на Grafana за наблюдение. Infra като код е избран по различни причини и всяка от тях е еднакво важна за всичко, свързано със софтуера.
Когато работех в Twitch, ускорихме услугите в смесените вградени и AWS системи на Amazon. Изработихме и подкрепихме много микроуслуги, увеличавайки оперативните разходи. Дискусиите протекоха по следния начин:
- Я: По дяволите, това са много жестове за овърклок на една микроуслуга. Ще трябва да използвам този боклук, за да създам акаунт в AWS (преминахме към 2 акаунта на микроуслуга), след това този за настройка на предупреждения, този за хранилище на кодове и този за имейл списък и след това този...
- Водя: Нека го напишем и добре.
- Я: Добре, но самият сценарий ще се промени. Ще ни трябва начин да проверим дали всички тези вградени gizmos на Amazon са актуални.
- Водя: Звучи добре. И ние ще напишем скрипт за това.
- Я: Страхотен! И скриптът вероятно ще трябва да зададе параметри. Ще ги приеме ли?
- Водя: Оставете го да вземе, където отиде!
- Я: Процесът може да се промени и обратната съвместимост ще бъде загубена. Ще бъде необходим някакъв вид семантичен контрол на версията.
- Водя: Великолепна идея!
- Я: Инструментите могат да се променят ръчно, в потребителския интерфейс. Ще ни трябва начин да проверим и поправим това.
…3 години по-късно:
- Водя: И имаме тераформа.
Поуката на историята е: дори ако вие до уши във всичко Amazon, все още използвате нещо, което не е от AWS, и тези услуги имат състояние, което използва език за конфигурация, за да поддържа това състояние в синхрон.
CloudFormation ламбда срещу git модули terraform
lambda е решението на CloudFormation за проблема с персонализираната логика. С ламбда може
Спомням си, че веднъж исках да създам внедряване на Canary за средата Elastic Beanstalk с класически балансьор на натоварването. Най-лесното нещо, което можете да направите, би било да направите второ внедряване за EB до производствената среда, като направите крачка напред: комбиниране на групата за разгръщане на canary с автоматично мащабиране с LB за внедряване в производствената среда. И тъй като Terraform използва
Открива дрейфа по-добре
Уверете се, че реалността отговаря на очакванията.
С Terraform имате много по-усъвършенствани куки за жизнен цикъл за откриване на дрейф. Например въвеждате командата
CDK и бъдещето на CloudFormation
CloudFormation е трудно да се управлява в големи, междуинфраструктурни мащаби. Много от тези трудности се разпознават и инструментът се нуждае от неща като
Така че Terraform да не разочарова
Това е „инфраструктура като код“, а не „като текст“.
Първото ми впечатление от Terraform беше доста лошо. Мисля, че просто не разбрах подхода. Почти всички инженери неволно го възприемат като текстов формат, който трябва да бъде преобразуван в желаната инфраструктура. НЕ ГО ПРАВЕТЕ ПО ТОЗИ НАЧИН.
Истините за добрата разработка на софтуер се отнасят и за Terraform.
Виждал съм много практики, приети за създаване на добър код, които се игнорират в Terraform. Учили сте години наред, за да станете добър програмист. Не се отказвайте от този опит само защото работите с Terraform. Истинските истини за добрата разработка на софтуер се отнасят за Terraform.
Как може кодът да не е документиран?
Виждал съм огромни стекове Terraform без абсолютно никаква документация. Как можете да пишете код на страници - без абсолютно никаква документация? Добавете документация, която обяснява вашите код Terraform (акцент върху думата "код"), защо този раздел е толкова важен и какво правите.
Как можем да внедрим услуги, които някога са били една голяма main() функция?
Виждал съм много сложни стекове Terraform, представени като един модул. Защо не внедрим софтуер по този начин? Защо разделяме големите функции на по-малки? Същите отговори важат и за Terraform. Ако вашият модул е твърде голям, трябва да го разделите на по-малки модули.
Вашата компания не използва ли библиотеки?
Виждал съм как инженери, завъртайки нов проект с помощта на Terraform, глупаво копираха огромни парчета от други проекти в свои собствени и след това бърникаха с тях, докато започне да работи. Бихте ли работили така с „боен“ код във вашата компания? Ние не използваме само библиотеки. да
Не ползваш ли PEP8 или gofmt?
Повечето езици имат стандартна, приета схема за форматиране. В Python това е PEP8. В Go - gofmt. Terraform има свои собствени: terraform fmt
. Насладете му се за ваше здраве!
Ще използвате ли React без да знаете JavaScript?
Модулите Terraform могат да опростят част от сложната инфраструктура, която създавате, но това не означава, че изобщо не можете да се занимавате с нея. Искате да използвате Terraform правилно, без да разбирате ресурси? Вие сте обречени: времето ще мине и никога няма да овладеете Terraform.
Кодирате ли със сингълтони или инжектиране на зависимости?
Инжектирането на зависимости е призната най-добра практика за разработка на софтуер и се предпочита пред сингълтоните. Как е полезно това в Terraform? Виждал съм модули Terraform, които зависят от отдалеченото състояние. Вместо да пишете модули, които извличат отдалечено състояние, напишете модул, който приема параметри. И след това предайте тези параметри на модула.
Вашите библиотеки правят ли десет неща добре или едно нещо страхотно?
Библиотеките, които работят най-добре, са тези, които се фокусират върху една задача, с която се справят много добре. Вместо да пишете големи модули Terraform, които се опитват да направят всичко наведнъж, изградете части от тях, които правят едно нещо добре. И след това ги комбинирайте според нуждите.
Как правите промени в библиотеките без обратна съвместимост?
Един общ модул Terraform, подобно на обикновена библиотека, трябва по някакъв начин да съобщи промените на потребителите, без да е обратно съвместим. Досадно е, когато тези промени се случват в библиотеки, и е също толкова досадно, когато в модулите на Terraform се правят промени, които не са съвместими с обратна версия. Препоръчително е да използвате git тагове и semver, когато използвате модули Terraform.
Вашата производствена услуга работи ли на вашия лаптоп или в център за данни?
Hashicorp има инструменти като
Не пишеш ли контролни?
Инженерите признават, че кодът трябва да бъде тестван, но самите те често забравят за тестването, когато работят с Terraform. За инфраструктурата това е изпълнено с коварни моменти. Моят съвет е да „тествате“ или „създавате примерни“ стекове, като използвате модули, които могат да бъдат разгърнати правилно за тестване по време на CI/CD.
Terraform и микроуслуги
Животът и смъртта на компаниите за микроуслуги зависи от скоростта, иновациите и прекъсването на новите работни стекове за микроуслуги.
Най-често срещаният негативен аспект, свързан с архитектурите на микросервизи и който не може да бъде елиминиран, е свързан с работата, а не с кода. Ако мислите за Terraform просто като за начин за автоматизиране само на инфраструктурната страна на архитектурата на микроуслуги, тогава пропускате истинските предимства на системата. Сега вече е
Източник: www.habr.com