Инфрақұрылымды қайталанатын мәтін пішіміндегі код ретінде көрсету тышқандармен араласуды қажет етпейтін жүйелер үшін қарапайым ең жақсы тәжірибе болып табылады. Бұл тәжірибенің атауы бар -
Terraform және CloudFormation тәжірибесін салыстыру
Келгенге дейін
Терраформа қорқынышты
Бета бағдарламалық жасақтамасы
Terraform әлі 1.0 нұсқасын шығарған жоқ, бұл оны пайдаланбаудың жақсы себебі. Мен оны алғаш рет өзім қолданып көргеннен бері көп өзгерді, бірақ сол кезде terraform apply
жиі бірнеше жаңартулардан кейін немесе бірнеше жыл пайдаланудан кейін бұзылады. Мен «қазір бәрі басқаша» дер едім, бірақ... бәрі осылай айтатын сияқты, солай емес пе? Алдыңғы нұсқалармен үйлеспейтін өзгерістер бар, бірақ олар сәйкес болса да, тіпті ресурс қоймаларының синтаксисі мен абстракциялары бізге қажет нәрсе сияқты. Құрал шынымен жақсарған сияқты, бірақ... :-0
Екінші жағынан, AWS кері үйлесімділікті сақтай отырып, жақсы жұмыс жасады. Бұл олардың қызметтері ұйымда жиі мұқият тексеріліп, содан кейін ғана атауы өзгертіліп жарияланатындықтан болуы мүмкін. Демек, «олар көп тырысты» - бұл түсініксіз. AWS сияқты әртүрлі және күрделі жүйе үшін API интерфейстерімен кері үйлесімділікті сақтау өте қиын. Кеңінен қолданылатын жалпыға ортақ API интерфейстерін қолдауға тура келген кез келген адам мұны көптеген жылдар бойы жасау қаншалықты қиын екенін түсінуі керек. Бірақ менің жадымда CloudFormation әрекеті жылдар бойы өзгерген жоқ.
Аяқпен танысыңыз... бұл оқ
Менің білуімше, ресурсты жойыңыз аутсайдер CF стекінен CloudFormation стегі мүмкін емес. Терраформмен де солай. Ол бар ресурстарды стекке импорттауға мүмкіндік береді. Функцияны таңқаларлық деп айтуға болады, бірақ үлкен күшпен үлкен жауапкершілік келеді. Сізге тек стекке ресурс қосу керек және стекпен жұмыс істеп жатқанда бұл ресурсты жою немесе өзгерту мүмкін емес. Бір күні бұл кері әсер етті. Бір күні Twitch-те біреу кездейсоқ басқа біреудің AWS қауіпсіздік тобын өздерінің Terraform стекіне ешқандай бұзақылықсыз импорттады. Мен бірнеше командаларды енгіздім және... қауіпсіздік тобы (кіріс трафигімен бірге) жоғалып кетті.
Терраформ тамаша
Толық емес күйлерден қалпына келтіру
Кейде CloudFormation бір күйден екіншісіне толығымен ауыса алмайды. Сонымен бірге ол бұрынғыға қайта оралуға тырысады. Бұл әрқашан орындала бермейтіні өкінішті. Кейінірек болған жағдайды түзету өте қорқынышты болуы мүмкін - сіз CloudFormation оның бұзылғанына қуанатынын білмейсіз - тіпті оны түзету үшін де. Бұрынғы күйге оралу мүмкін бе, жоқ па, ол шынымен қалай анықтау керектігін білмейді және әдепкі бойынша ғажайыпты күту үшін сағаттар бойы ілулі тұрады.
Terraform, керісінше, сәтсіз өтулерден әлдеқайда әдемі қалпына келтіруге бейім және жетілдірілген жөндеу құралдарын ұсынады.
Құжат күйіндегі өзгерістер анық
«Жарайды, жүк теңестіруші, сіз өзгеріп жатырсыз. Бірақ қалай?»
—қобалжыған инженер, «қабылдау» түймесін басуға дайын.
Кейде маған CloudFormation стекіндегі жүктеме теңестіргішімен порт нөмірін қосу немесе қауіпсіздік тобын өзгерту сияқты кейбір манипуляциялар жасау керек болады. ClouFormation өзгерістерді нашар көрсетеді. Мен, түйреуіштер мен инелерде, қажетті ештеңені өшірмегенімді және қажетсіз ештеңе қоспағанымды тексеру үшін yaml файлын он рет екі рет тексеремін.
Терраформ бұл жағынан әлдеқайда ашық. Кейде ол тіпті тым мөлдір (оқыңыз: қызықсыз). Бақытымызға орай, соңғы нұсқада өзгерістердің жақсартылған дисплейі бар, осылайша сіз дәл қазір не өзгеріп жатқанын көре аласыз.
Икемділік
Бағдарламалық құралды артқа қарай жазыңыз.
Ашығын айтқанда, ұзақ мерзімді бағдарламалық қамтамасыз етудің ең маңызды сипаттамасы - өзгерістерге бейімделу қабілеті. Кез келген бағдарламалық құралды артқа қарай жазыңыз. Көбінесе мен «қарапайым» қызметті пайдалану арқылы қателіктер жібердім, содан кейін бәрін бір CloudFormation немесе Terraform стекіне жинай бастадым. Және, әрине, бірнеше айдан кейін мен бәрін дұрыс түсінбегенім анықталды, ал қызмет қарапайым емес! Енді маған қандай да бір түрде үлкен стекті кішкене құрамдас бөліктерге бөлу керек. CloudFormation бағдарламасымен жұмыс істегенде, мұны алдымен бар стекті қайта жасау арқылы ғана жасауға болады, мен мұны дерекқорлармен істемеймін. Терраформ, керісінше, стекті бөлшектеуге және оны түсінікті кішірек бөліктерге бөлуге мүмкіндік берді.
Git ішіндегі модульдер
Terraform кодын бірнеше стектерде ортақ пайдалану CloudFormation кодын ортақ пайдаланудан әлдеқайда оңай. Terraform көмегімен кодты git репозиторийіне қоюға және оған семантикалық нұсқаны басқару арқылы қол жеткізуге болады. Осы репозиторийге рұқсаты бар кез келген адам ортақ кодты қайта пайдалана алады. CloudFormation эквиваленті - S3, бірақ оның бірдей артықшылықтары жоқ және S3 пайдасына git-тен бас тартуға ешқандай себеп жоқ.
Ұйым өсті және ортақ стектерді бөлісу мүмкіндігі маңызды деңгейге жетті. Terraform мұның бәрін оңай және табиғи етеді, ал CloudFormation сізге осындай жұмысты бастамас бұрын шеңберлерден өтуге мәжбүр етеді.
Операциялар код ретінде
«Сценарий жасайық және жарайды».
— Terraform велосипедін ойлап тапқанға дейін 3 жыл бұрын инженер.
Бағдарламалық жасақтаманы әзірлеуге келетін болсақ, Go немесе Java бағдарламасы жай ғана код емес.
Код ретінде код
Оның жұмыс істейтін инфрақұрылымы да бар.
Код ретінде инфрақұрылым
Бірақ ол қайдан? Оны қалай бақылауға болады? Сіздің кодыңыз қайда тұрады? Әзірлеушілерге кіру рұқсаты қажет пе?
Операциялар код ретінде
Бағдарламалық жасақтаманы әзірлеуші болу тек код жазуды білдірмейді.
AWS жалғыз емес: сіз басқа провайдерлерді пайдаланасыз. SignalFx, PagerDuty немесе Github. Мүмкін сізде CI/CD үшін ішкі Jenkins сервері немесе бақылауға арналған ішкі Grafana бақылау тақтасы болуы мүмкін. Infra as Code әртүрлі себептермен таңдалады және олардың әрқайсысы бағдарламалық жасақтамаға қатысты барлық нәрсе үшін бірдей маңызды.
Мен Twitch-те жұмыс істеген кезде Amazon аралас ендірілген және AWS жүйелеріндегі қызметтерді жылдамдаттық. Біз операциялық шығындарды арттыра отырып, көптеген микросервистерді тоқтаттық және қолдадық. Талқылаулар келесідей болды:
- Я: Қарғыс атқыр, бұл бір микросервисті үдетуге арналған көптеген қимылдар. Мен AWS тіркелгісін жасау үшін осы қоқысты пайдалануым керек (біз 2 тіркелгіге кірдік микросервис), содан кейін бұл ескертулерді орнатуға арналған, бұл код репозиторийі үшін, мынау электрондық пошта тізімі үшін, содан кейін мынау...
- Қорғасын: Сценарий жасайық және жарайды.
- Я: Жарайды, бірақ сценарийдің өзі өзгереді. Бізге осы кірістірілген Amazon гизмостарының барлығының жаңартылғанын тексеру жолы қажет болады.
- Қорғасын: Жақсы. Ал біз бұл үшін сценарий жазамыз.
- Я: Тамаша! Сценарий әлі де параметрлерді орнату қажет болуы мүмкін. Ол оларды қабылдай ма?
- Қорғасын: Баратын жеріне апарсын!
- Я: Процесс өзгеруі мүмкін және кері үйлесімділік жоғалады. Семантикалық нұсқаны басқарудың қандай да бір түрі қажет болады.
- Қорғасын: Керемет идея!
- Я: Құралдарды пайдаланушы интерфейсі ішінде қолмен өзгертуге болады. Бізге мұны тексеру және түзету жолы керек.
…3 жылдан кейін:
- Қорғасын: Бізде терраформа бар.
Әңгіменің моральдық мәні: сіз болса да Амазонканың бәрінде бас иеді, сіз әлі де AWS емес нәрсені пайдаланып жатырсыз және бұл қызметтерде сол күйді синхрондауда сақтау үшін конфигурация тілін пайдаланатын күй бар.
CloudFormation lambda және git модульдері terraform
lambda — CloudFormation қолданбасының пайдаланушы логикалық мәселесіне арналған шешімі. Ламбдамен сіз жасай аласыз
Бір кездері мен классикалық жүктеме теңестіргішімен Elastic Beanstalk ортасы үшін канареялық орналастыруды жасағым келгені есімде. Ең оңай орындалатын нәрсе өндіріс ортасының жанында EB үшін екінші орналастыруды жасау, оны бір қадам алға жылжыту: автоматты масштабталатын канарларды орналастыру тобын өндіріс ортасына LB орналастырумен біріктіру. Ал Terraform пайдаланатындықтан
Ол дрейфті жақсырақ анықтайды
Шындық күтуге сәйкес келетініне көз жеткізіңіз.
Terraform көмегімен сізде дрейфті анықтауға арналған әлдеқайда жетілдірілген өмірлік цикл ілмектері бар. Мысалы, сіз пәрменді енгізесіз
CDK және CloudFormation болашағы
CloudFormation-ті үлкен, кросс-инфрақұрылымдық масштабта басқару қиын. Осы қиындықтардың көпшілігі мойындалады және құралға ұқсас нәрселер қажет
Терраформ көңілін қалдырмауы үшін
Бұл «мәтін ретінде» емес, «код ретіндегі инфрақұрылым».
Менің Terraform туралы алғашқы әсерім өте нашар болды. Мен бұл тәсілді түсінбедім деп ойлаймын. Барлық дерлік инженерлер оны қалаған инфрақұрылымға түрлендіруді қажет ететін мәтін пішімі ретінде еріксіз қабылдайды. БҰЛАЙ ЖАСАМАҢЫЗ.
Жақсы бағдарламалық жасақтаманы әзірлеудің шындықтары Terraform-ға да қатысты.
Мен Terraform-да еленбейтін жақсы кодты жасау үшін қабылданған көптеген тәжірибелерді көрдім. Сіз жақсы бағдарламашы болу үшін жылдар бойы оқыдыңыз. Терраформмен жұмыс істеп жатқаныңыз үшін бұл тәжірибеден бас тартпаңыз. Жақсы бағдарламалық жасақтаманы әзірлеудің шындықтары Terraform-ға қатысты.
Кодты қалай құжаттауға болмайды?
Мен ешқандай құжаттамасыз үлкен Terraform стектерін көрдім. Ешбір құжатсыз беттерге кодты қалай жазуға болады? Сізді түсіндіретін құжаттаманы қосыңыз код Terraform («код» сөзіне баса назар аудару), бұл бөлім неге соншалықты маңызды және сіз не істейсіз.
Бір кездері үлкен негізгі() функциясы болған қызметтерді қалай орналастыруға болады?
Мен бір модуль ретінде ұсынылған өте күрделі Terraform стектерін көрдім. Неліктен біз бағдарламалық жасақтаманы осылай қолданбаймыз? Неліктен үлкен функцияларды кішірек функцияларға бөлеміз? Терраформға бірдей жауаптар қолданылады. Модуль тым үлкен болса, оны кішірек модульдерге бөлу керек.
Сіздің компанияңыз кітапханаларды пайдаланбайды ма?
Мен Terraform көмегімен жаңа жобаны құрастырған инженерлердің басқа жобалардың үлкен бөліктерін өздерінің жеке жобаларына ақымақтықпен көшіріп, содан кейін ол жұмыс істей бастағанша олармен қалай айналысқанын көрдім. Сіз өзіңіздің компанияңызда «жауынгерлік» кодпен осылай жұмыс істейсіз бе? Біз тек кітапханаларды пайдаланбаймыз. Иә,
Сіз PEP8 немесе gofmt қолданбайсыз ба?
Көптеген тілдерде стандартты, қабылданған пішімдеу схемасы бар. Python-да бұл PEP8. In Go - gofmt. Терраформның өзіне тән: terraform fmt
. Денсаулығыңыз үшін рахат алыңыз!
Сіз JavaScript білмей React пайдаланасыз ба?
Terraform модульдері сіз жасаған күрделі инфрақұрылымның кейбір бөлігін жеңілдете алады, бірақ бұл сіз онымен мүлдем айналыса алмайсыз дегенді білдірмейді. Терраформды ресурстарды түсінбестен дұрыс пайдаланғыңыз келе ме? Сіз құрдымға кеттіңіз: уақыт өтеді және сіз ешқашан Терраформды меңгере алмайсыз.
Сіз синглтондармен немесе тәуелділік инъекциясымен кодтайсыз ба?
Тәуелділік инъекциясы бағдарламалық жасақтаманы әзірлеуге арналған танылған ең жақсы тәжірибе болып табылады және синглтондарға қарағанда жақсырақ. Бұл Terraform жүйесінде қаншалықты пайдалы? Мен қашықтағы күйге тәуелді Terraform модульдерін көрдім. Қашықтағы күйді шығаратын модульдерді жазудың орнына параметрлерді қабылдайтын модульді жазыңыз. Содан кейін бұл параметрлерді модульге жіберіңіз.
Сіздің кітапханаларыңыз он нәрсені жақсы істей ме, әлде бір істі жақсы ма?
Ең жақсы жұмыс істейтін кітапханалар - бұл өте жақсы орындайтын бір тапсырмаға назар аударатын кітапханалар. Барлығын бірден жасауға тырысатын үлкен Terraform модульдерін жазудың орнына олардың бір нәрсені жақсы орындайтын бөліктерін жасаңыз. Содан кейін оларды қажетінше біріктіріңіз.
Кері үйлесімділіксіз кітапханаларға қалай өзгертулер енгізуге болады?
Жалпы Terraform модулі, кәдімгі кітапхана сияқты, кері үйлесімділіксіз өзгертулерді пайдаланушыларға қандай да бір түрде хабарлауы керек. Бұл өзгерістер кітапханаларда болған кезде тітіркендіргіш және Terraform модульдерінде кері үйлесімді емес өзгертулер енгізілгенде де тітіркендіргіш. Terraform модульдерін пайдалану кезінде git тегтерін және semver-ді пайдалану ұсынылады.
Сіздің өндірістік қызметіңіз ноутбукта немесе деректер орталығында жұмыс істеп тұр ма?
Hashicorp сияқты құралдар бар
Сіз тест жазбайсыз ба?
Инженерлер кодты сынау қажет екенін мойындайды, бірақ олар Terraform-пен жұмыс істегенде тестілеуді жиі ұмытады. Инфрақұрылым үшін бұл сәтсіз сәттерге толы. Менің кеңесім - CI/CD кезінде тестілеу үшін дұрыс орналастыруға болатын модульдерді пайдаланып стектерді «сынау» немесе «мысал жасау».
Терраформ және микросервис
Микросервис компанияларының өмірі мен өлімі жаңа микросервис жұмыс жинақтарының жылдамдығына, инновациясына және бұзылуына байланысты.
Микросервис архитектураларымен байланысты және жою мүмкін емес ең көп таралған жағымсыз аспект кодқа емес, жұмысқа қатысты. Егер сіз Terraform-ті микросервис архитектурасының тек инфрақұрылымдық жағын ғана автоматтандыру әдісі деп ойласаңыз, онда сіз жүйенің шынайы артықшылықтарын жоғалтасыз. Қазір болды
Ақпарат көзі: www.habr.com