Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Ko'rinishidan, Terraform ishlab chiquvchilari AWS infratuzilmasi bilan ishlash uchun juda qulay eng yaxshi amaliyotlarni taklif qilishadi. Faqat bir nuance bor. Vaqt o'tishi bilan har biri o'ziga xos xususiyatlarga ega bo'lgan muhitlar soni ortadi. Ilovalar to'plamining deyarli nusxasi qo'shni mintaqada paydo bo'ladi. Va Terraform kodini yangi talablarga muvofiq ehtiyotkorlik bilan nusxalash va tahrirlash yoki qor parchasiga aylantirish kerak.

Katta va uzoq loyihalarda tartibsizlik va qo'lda ishlashga qarshi kurashish uchun Terraformdagi naqshlar haqidagi hisobotim.

Video:

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men 40 yoshdaman, 20 yildan beri IT sohasida ishlayman. Men Ixtens kompaniyasida 12 yildan beri ishlayman. Biz elektron tijorat asosidagi rivojlanish bilan shug'ullanamiz. Va men 5 yildan beri DevOps amaliyotlarini mashq qilaman.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Mening hikoyam, men ismini aytmayman, oshkor qilmaslik to'g'risidagi shartnoma ortida yashiringan kompaniyadagi loyihadagi tajribam haqida bo'ladi.

Loyihaning ko'lamini tushunish uchun slayddagi raqamlar ko'rsatilgan. Va keyin aytadigan hamma narsa Amazon bilan bog'liq.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men bu loyihaga 4 yil oldin qo'shilganman. Va infratuzilmani qayta tiklash ishlari jadal sur'atlar bilan davom etayotgan edi, chunki loyiha o'sib bordi. Va ishlatilgan naqshlar endi mos emas edi. Va loyihaning barcha rejalashtirilgan o'sishini hisobga olgan holda, yangi narsalarni o'ylab topish kerak edi.

Kecha bizga Dodo pizzada nima bo'lganini aytib bergan Matveyga rahmat. Bu erda 4 yil oldin sodir bo'lgan voqea.

Ishlab chiquvchilar kelib, infratuzilma kodini yaratishni boshladilar.

Buning talab qilinishining eng aniq sabablari bozorga chiqish vaqti edi. DevOps jamoasi ishlab chiqarish jarayonida to'siq bo'lmasligiga ishonch hosil qilish kerak edi. Va boshqa narsalar qatorida, Terraform va Qo'g'irchoq birinchi darajada ishlatilgan.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Terraform - HashiCorp kompaniyasining ochiq manbali loyihasi. Va bu nima ekanligini bilmaganlar uchun keyingi slaydlar.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Kod sifatida infratuzilma bizning infratuzilmamizni tavsiflashimiz va ba'zi robotlardan biz tasvirlangan resurslarni olishimizga ishonch hosil qilishlarini so'rashimiz mumkinligini anglatadi.

Masalan, bizga virtual mashina kerak. Biz bir nechta kerakli parametrlarni tavsiflaymiz va qo'shamiz.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Shundan so'ng biz konsolda Amazon-ga kirishni sozlaymiz. Va biz Terraform rejasini so'raymiz. Terraform rejasi: "Yaxshi, biz sizning manbangiz uchun buni qila olamiz" deb aytadi. Va kamida bitta resurs qo'shiladi. Va hech qanday o'zgarishlar kutilmaydi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Siz hamma narsadan mamnun bo'lganingizdan so'ng, siz Terraformdan ariza berishni so'rashingiz mumkin va Terraform siz uchun namuna yaratadi va siz bulutingizda virtual mashina olasiz.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Loyihamiz yanada rivojlanmoqda. Biz u erda ba'zi o'zgarishlar kiritamiz. Biz ko'proq misollar so'raymiz, biz 53 ta yozuvni qo'shamiz.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Va takrorlaymiz. Iltimos, rejalashtiring. Biz qanday o'zgarishlar rejalashtirilganligini ko'ramiz. Biz murojaat qilamiz. Va bizning infratuzilmamiz shunday rivojlanmoqda.

Terraform davlat fayllari deb ataladigan narsadan foydalanadi. Ya'ni, Amazonga kiritilgan barcha o'zgarishlar faylda saqlanadi, unda siz tavsiflagan har bir resurs uchun Amazonda yaratilgan mos manbalar mavjud. Shunday qilib, resurs tavsifi o'zgarganda, Terraform Amazonda nimani o'zgartirish kerakligini aniq biladi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Bu holat fayllari dastlab faqat fayllar edi. Va biz ularni Gitda saqladik, bu juda noqulay edi. Kimdir har doim o'zgarishlar qilishni unutgan va ko'plab nizolar paydo bo'lgan.

Endi backenddan foydalanish mumkin, ya'ni Terraform qaysi chelakda va qaysi kalit yordamida davlat faylini saqlash kerakligi ko'rsatilgan. Va Terraformning o'zi bu holat faylini olish, barcha sehrlarni qilish va yakuniy natijani qaytarish haqida g'amxo'rlik qiladi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Bizning infratuzilmamiz rivojlanmoqda. Mana bizning kodimiz. Va endi biz virtual mashina yaratishni emas, balki sinov muhitiga ega bo'lishni xohlaymiz.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Terraform sizga modul kabi narsalarni yaratishga, ya'ni qandaydir papkada xuddi shu narsani tasvirlashga imkon beradi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Va, masalan, test paytida, ushbu modulga qo'ng'iroq qiling va xuddi biz Terraform ilovasini modulning o'zida bajarganimiz bilan bir xil narsani oling. Sinov uchun ushbu kod bo'ladi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Ishlab chiqarish uchun biz u erga ba'zi o'zgarishlarni yuborishimiz mumkin, chunki sinovda bizga katta nusxalar kerak emas; ishlab chiqarishda katta nusxalar shunchaki foydalidir.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Va keyin men loyihaga qaytaman. Bu qiyin ish edi, rejalashtirilgan infratuzilma juda katta edi. Va qandaydir tarzda barcha kodni hamma uchun qulay bo'lishi uchun joylashtirish kerak edi: ushbu kodga texnik xizmat ko'rsatadiganlar uchun ham, o'zgartirishlar kirituvchilar uchun ham. Va har qanday ishlab chiquvchi borib, platformaning o'z qismi uchun kerak bo'lganda infratuzilmani tuzatishi mumkinligi rejalashtirilgan edi.

Agar sizda katta loyiha boʻlsa va butun infratuzilmani kichik boʻlaklarga boʻlish va har bir qismni alohida papkada tasvirlash mantiqan toʻgʻri kelsa, bu HashiCorp tomonidan tavsiya etilgan katalog daraxtidir.

Keng manbalar kutubxonasiga ega bo'lgan holda, siz sinov va ishlab chiqarishda taxminan bir xil narsani chaqirishingiz mumkin.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Bizning holatda, bu mutlaqo mos emas edi, chunki ishlab chiquvchilar uchun yoki sinov uchun test to'plamini qandaydir sodda tarzda olish kerak edi. Lekin men papkalarni ko'rib chiqishni va ularni kerakli ketma-ketlikda qo'llashni xohlamadim va ma'lumotlar bazasi ko'tariladi, keyin esa ushbu ma'lumotlar bazasidan foydalanadigan misol ko'tariladi. Shunday qilib, barcha testlar bitta papkadan boshlandi. Xuddi shu modullar u erda chaqirilgan, ammo hamma narsa bir ishda amalga oshirilgan.

Terraform barcha bog'liqliklarga g'amxo'rlik qiladi. Va u har doim ketma-ketlikda resurslarni yaratadi, shunda siz IP-manzilni, masalan, yangi yaratilgan misoldan olishingiz va ushbu IP-manzilni route53 yozuvida olishingiz mumkin.

Bundan tashqari, platforma juda katta. Va sinov to'plamini ishga tushirish, hatto bir soat, hatto 8 soat bo'lsa ham, juda qimmat ish.

Va biz bu ishni avtomatlashtirdik. Jenkinsning ishi bizga stekni ishga tushirishga imkon berdi. Unda ishlab chiquvchi sinab ko'rmoqchi bo'lgan o'zgarishlar bilan tortish so'rovini ishga tushirish, barcha kerakli variantlarni, komponentlarni va o'lchamlarni ko'rsatish kerak edi. Agar u ishlash testini xohlasa, u ko'proq misollarni olishi mumkin. Agar u biron bir shakl ochilganligini tekshirishi kerak bo'lsa, u eng kam ish haqi miqdoridan boshlashi mumkin. Shuningdek, klaster kerak yoki yo'qligini ko'rsating va hokazo.

Va keyin Jenkins Terraform papkasidagi kodni biroz o'zgartirgan qobiq skriptini ishga tushirdi. Men keraksiz fayllarni olib tashladim va kerakli fayllarni qo'shdim. Va keyin bir marta Terraform qo'llash bilan stek ko'tarildi.

Va keyin men borishni istamagan boshqa qadamlar bor edi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Sinov uchun bizga ishlab chiqarishdan ko'ra bir oz ko'proq imkoniyatlar kerak bo'lganligi sababli, biz modullarning nusxalarini yaratishimiz kerak edi, shunda biz ushbu nusxalarga faqat sinov uchun zarur bo'lgan xususiyatlarni qo'shamiz.

Va shunday bo'ldiki, sinov paytida men ishlab chiqarishga kirishadigan o'zgarishlarni sinab ko'rmoqchiman. Lekin, aslida, bitta narsa sinovdan o'tkazildi va ishlab chiqarishda biroz boshqacha narsa qo'llanildi. Va ishlab chiqarishda barcha o'zgarishlar operatsion guruh tomonidan qo'llanilgan naqshda kichik tanaffus bor edi. Va ba'zida sinovdan ishlab chiqarishga o'tishi kerak bo'lgan o'zgarishlar boshqa versiyada qolganligi ma'lum bo'ldi.

Bundan tashqari, shunday muammo yuzaga keldiki, yangi xizmat qo'shildi, u allaqachon mavjud bo'lganlardan biroz farq qiladi. Va mavjud modulni o'zgartirish o'rniga, biz uning nusxasini yaratishimiz va kerakli o'zgarishlarni kiritishimiz kerak edi.

Aslida, Terraform haqiqiy til emas. Bu deklaratsiya. Agar biror narsani e'lon qilishimiz kerak bo'lsa, biz buni e'lon qilamiz. Va hammasi ishlaydi.

Bir nuqtada, mening tortishish so'rovlarimdan biri muhokama qilinayotganda, hamkasblarimdan biri qor parchalarini yaratishga hojat yo'qligini aytdi. U nimani nazarda tutganiga hayron bo‘ldim. Dunyoda ikkita bir xil qor parchalari yo'qligi haqida ilmiy haqiqat bor, ularning barchasi bir oz farq qiladi. Va buni eshitishim bilan men darhol Terraform kodining to'liq og'irligini his qildim. Chunki versiyadan versiyaga o'tish zarur bo'lganda, Terraform uzilish zanjiri o'zgarishlarini talab qildi, ya'ni kod endi keyingi versiyaga mos kelmadi. Va biz infratuzilmani Terraformning keyingi versiyasiga etkazish uchun infratuzilmadagi fayllarning deyarli yarmini qamrab olgan tortishish so'rovini bajarishimiz kerak edi.

Va bunday qor parchasi paydo bo'lgandan so'ng, biz katta, katta qor uyumiga aylantirgan barcha Terraform kodlari.

Operatsiyadan tashqarida bo'lgan tashqi ishlab chiquvchi uchun bu uning uchun unchalik muhim emas, chunki u tortishish so'rovini qildi, uning resursi boshlandi. Va bu hammasi, endi bu uning tashvishi emas. Va hamma narsa yaxshi ekanligiga ishonch hosil qiladigan DevOps jamoasi bu o'zgarishlarni amalga oshirishi kerak. Va bu o'zgarishlarning narxi har bir qo'shimcha qor parchasi bilan juda ko'p oshdi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Seminarda talaba doskada bo'r bilan ikkita mukammal doira chizishi haqida hikoya bor. O'qituvchi esa kompassiz qanday qilib silliq chizishga muvaffaq bo'lganiga hayron bo'ladi. Talaba javob beradi: "Juda oddiy, men ikki yil armiyada go'sht maydalagichni aylantirdim."

Ushbu loyihada ishtirok etganimning to‘rt yilidan ikki yilga yaqin Terraform bilan shug‘ullanganman. Va, albatta, menda ba'zi hiylalar, Terraform kodini soddalashtirish, u bilan dasturlash tili kabi ishlash va ushbu kodni yangilab turishi kerak bo'lgan ishlab chiquvchilar yukini kamaytirish bo'yicha maslahatlar bor.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men boshlashni istagan birinchi narsa - bu Symlinks. Terraformda juda ko'p takrorlanuvchi kod mavjud. Misol uchun, biz infratuzilmaning bir qismini yaratadigan deyarli har bir nuqtada provayderga qo'ng'iroq qilish bir xil. Va uni alohida papkaga qo'yish mantiqan. Qaerda bo'lishidan qat'i nazar, provayder ushbu faylga Symlinks qilish kerak.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Masalan, ishlab chiqarishda siz ba'zi tashqi Amazon hisobiga kirish huquqini qo'lga kiritish imkonini beruvchi rolni qo'llaysiz. Va bitta faylni o'zgartirgandan so'ng, resurs daraxtidagi barcha qolganlari kerakli huquqlarga ega bo'ladi, shunda Terraform qaysi Amazon segmentiga kirishni biladi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Symlinks qayerda muvaffaqiyatsiz bo'ladi? Aytganimdek, Terraformda davlat fayllari mavjud. Va ular juda, juda zo'r. Lekin gap shundaki, Terraform birinchi navbatda backendni ishga tushiradi. Va u bu parametrlarda hech qanday o'zgaruvchidan foydalana olmaydi, ular har doim matnda yozilishi kerak.

Natijada, kimdir yangi resurs yaratsa, u boshqa papkalardan kodning bir qismini ko'chiradi. Va u kalit yoki chelak bilan xato qilishi mumkin. Misol uchun, u qum qutisidan qum qutisini yasaydi va keyin uni ishlab chiqarishda qiladi. Va shuning uchun ishlab chiqarishdagi chelak qum qutisidan ishlatilishi aniq bo'lishi mumkin. Albatta, ular buni tezda topadilar. Buni qandaydir tarzda tuzatish mumkin bo'ladi, lekin shunga qaramay, bu vaqt va ma'lum darajada resurslarni behuda sarflashdir.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Keyin nima qilishimiz mumkin? Terraform bilan ishlashdan oldin uni ishga tushirishingiz kerak. Boshlashda Terraform barcha plaginlarni yuklab oladi. Bir nuqtada ular monolitdan ko'proq mikroservis arxitekturasiga bo'lindi. Va siz har doim Terraform init-ni qilishingiz kerak, shunda u barcha modullarni, barcha plaginlarni tortib oladi.

Va siz, birinchi navbatda, barcha o'zgaruvchilarni olishingiz mumkin bo'lgan qobiq skriptidan foydalanishingiz mumkin. Shell skripti hech qanday tarzda cheklanmagan. Va ikkinchidan, yo'llar. Agar biz har doim ombordagi yo'lni davlat faylining kaliti sifatida ishlatsak, demak, bu erda xatolik yo'q qilinadi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Ma'lumotlarni qayerdan olsam bo'ladi? JSON fayli. Terraform infratuzilmani nafaqat hcl (HashiCorp Configuration Language), balki JSON-da ham yozish imkonini beradi.

JSON-ni qobiq skriptidan o'qish oson. Shunga ko'ra, konfiguratsiya faylini chelak bilan bir joyga qo'yishingiz mumkin. Va bu chelakdan Terraform kodida va ishga tushirish uchun qobiq skriptida foydalaning.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Nima uchun Terraform uchun chelak bo'lishi muhim? Chunki masofaviy davlat fayllari kabi narsa mavjud. Ya'ni, men Amazonga: "Iltimos, misolni ko'taring", deb aytish uchun ba'zi manbalarni ko'targanimda, men juda ko'p talab qilinadigan parametrlarni belgilashim kerak.

Va bu identifikatorlar boshqa papkada saqlanadi. Va men borib aytishim mumkin: "Terraform, iltimos, o'sha resursning davlat fayliga o'ting va menga identifikatorlarni oling." Shunday qilib, turli mintaqalar yoki muhitlar o'rtasida ma'lum bir birlashish paydo bo'ladi.

Masofaviy holat faylidan foydalanish har doim ham mumkin emas. Masalan, siz VPC ni qo'lda yaratdingiz. Va VPC ni yaratuvchi Terraform kodi shunday turli xil VPClarni yaratadiki, bu juda uzoq vaqt talab etadi va siz birini boshqasiga moslashtirishingiz kerak bo'ladi, shuning uchun siz quyidagi hiyladan foydalanishingiz mumkin.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Ya'ni, VPC-ga o'xshab ko'rinadigan va sizga identifikatorlarni beradigan modul yarating, lekin aslida xuddi shu misolni yaratish uchun ishlatilishi mumkin bo'lgan qattiq kodlangan qiymatlarga ega fayl mavjud.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Davlat faylini bulutda saqlash har doim ham shart emas. Masalan, modullarni sinovdan o'tkazishda siz test paytida fayl shunchaki diskda saqlanadigan backend initsializatsiyasidan foydalanishingiz mumkin.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Endi sinov haqida bir oz. Terraformda nimani sinab ko'rishingiz mumkin? Ehtimol, ko'p narsa mumkin, lekin men bu 4 narsa haqida gapiraman.

HashiCorp Terraform kodini qanday formatlash kerakligini tushunadi. Va Terraform fmt sizga ushbu e'tiqodga muvofiq tahrirlangan kodni formatlash imkonini beradi. Shunga ko'ra, testlar formatlash HashiCorp vasiyat qilgan narsaga mos kelishini tekshirishi kerak, shunda qavslar o'rnini o'zgartirishga hojat qolmaydi va hokazo.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Keyingisi - Terraform validate. Bu sintaksisni tekshirishdan ko'ra ko'proq narsani qilmaydi - ala, barcha qavslar juftlanganmi. Bu erda nima muhim? Bizning infratuzilmamiz juda keng. Unda juda ko'p turli xil dadalar bor. Va har birida siz Terraform validate-ni ishga tushirishingiz kerak.

Shunga ko'ra, testni tezlashtirish uchun biz parallel ravishda parallel ravishda bir nechta jarayonlarni bajaramiz.

Parallel juda ajoyib narsa, undan foydalaning.

Ammo har safar Terraform ishga tushirilganda, u HashiCorp-ga o'tadi va so'raydi: “Plaginlarning eng so'nggi versiyalari qanday? Va men keshdagi plagin - bu to'g'rimi yoki noto'g'ri? Va bu har qadamda sekinlashdi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Agar siz Terraformga plaginlar qayerda ekanligini aytsangiz, Terraform shunday deydi: “Yaxshi, bu u yerda eng so'nggi narsa bo'lsa kerak. Men hech qaerga bormayman, men darhol Terraform kodingizni tekshirishni boshlayman.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Jildni kerakli plaginlar bilan to'ldirish uchun bizda juda oddiy Terraform kodi bor, uni ishga tushirish kifoya. Bu erda, albatta, sizning kodingizda qandaydir tarzda ishtirok etadigan barcha provayderlarni ko'rsatishingiz kerak, aks holda Terraform: "Men ma'lum bir provayderni bilmayman, chunki u keshda yo'q" deb aytadi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Keyingi - Terraform rejasi. Aytganimdek, rivojlanish davriydir. Kodga o'zgartirishlar kiritamiz. Va keyin siz infratuzilma uchun qanday o'zgarishlar rejalashtirilganligini bilib olishingiz kerak.

Infratuzilma juda va juda katta bo'lsa, siz bitta modulni o'zgartirishingiz, ba'zi sinov muhitini yoki muayyan mintaqani tuzatishingiz va qo'shnisini sindirishingiz mumkin. Shuning uchun, Terraform rejasi butun infratuzilma uchun tuzilishi va qanday o'zgarishlar rejalashtirilganligini ko'rsatishi kerak.

Siz buni aql bilan qilishingiz mumkin. Misol uchun, biz bog'liqliklarni hal qiladigan Python skriptini yozdik. Va nima o'zgartirilganiga qarab: Terraform moduli yoki faqat ma'lum bir komponent, u barcha bog'liq papkalar uchun rejalar tuzadi.

Terraform rejalari so'rov bo'yicha tuzilishi kerak. Hech bo'lmaganda biz shunday qilamiz.

Albatta, har bir o'zgarish, har bir majburiyat uchun testlarni o'tkazish yaxshi, lekin rejalar juda qimmat narsa. Va tortishish so'rovida biz aytamiz: "Iltimos, menga rejalarni bering." Robot ishga tushadi. Va sharhlaringizni yuboradi yoki o'zgartirishlaringizdan kutilgan barcha rejalarni ilova qiladi.

Reja juda qimmat narsa. Bu vaqt talab etadi, chunki Terraform Amazonga borib, “Bu misol hali ham mavjudmi? Ushbu avtoshkala aynan bir xil parametrlarga egami? Va buni tezlashtirish uchun siz refresh=false kabi parametrdan foydalanishingiz mumkin. Bu Terraform S3 dan holatni yuklab olishini anglatadi. Va u shtat Amazondagi narsaga to'liq mos kelishiga ishonadi.

Bunday Terraform rejasi tezroq ketadi, lekin shtat sizning infratuzilmangizga mos kelishi kerak, ya'ni biror joyda, ba'zida Terraform yangilanishi boshlanishi kerak. Terraform yangilanishi aynan shunday qiladi: holat haqiqiy infratuzilmadagi narsalarga mos keladi.

Va biz xavfsizlik haqida gapirishimiz kerak. Bu erdan boshlashimiz kerak edi. Terraform va Terraform infratuzilmangizda ishlayotgan joyda zaiflik mavjud. Ya'ni, siz aslida kodni bajaryapsiz. Va agar tortish so'rovi qandaydir zararli kodni o'z ichiga olsa, u juda ko'p kirish huquqiga ega bo'lgan infratuzilmada bajarilishi mumkin. Shuning uchun Terraform rejasini qayerda ishlatayotganingizda ehtiyot bo'ling.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men gaplashmoqchi bo'lgan keyingi narsa - bu foydalanuvchi ma'lumotlarini tekshirish.

Foydalanuvchi ma'lumotlari nima? Amazonda biz misol yaratganimizda, misol bilan ma'lum bir xat yuborishimiz mumkin - meta ma'lumotlar. Misol ishga tushganda, odatda bulutli init har doim bu misollarda mavjud bo'ladi. Cloud init ushbu xatni o'qiydi va shunday deydi: "Yaxshi, bugun men yukni muvozanatlashtiraman." Va bu ahdlarga muvofiq u ba'zi harakatlarni amalga oshiradi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Ammo, afsuski, biz Terraform rejasini va Terraformni qo'llaganimizda, foydalanuvchi ma'lumotlari bu turdagi raqamlarga o'xshaydi. Ya'ni, u sizga shunchaki xeshni yuboradi. Va rejada siz qarashingiz mumkin bo'lgan narsa - har qanday o'zgarishlar bo'ladimi yoki xesh bir xil bo'lib qoladimi.

Va agar siz bunga e'tibor bermasangiz, unda ba'zi buzilgan matnli fayl Amazonda, haqiqiy infratuzilmada tugashi mumkin.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Shu bilan bir qatorda, bajarishda siz butun infratuzilmani emas, balki faqat shablonni belgilashingiz mumkin. Va kodda ayting: "Iltimos, ushbu shablonni mening ekranimda ko'rsating." Va natijada siz Amazonda ma'lumotlaringiz qanday ko'rinishini chop etishingiz mumkin.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Yana bir variant - foydalanuvchi ma'lumotlarini yaratish uchun moduldan foydalanish. Siz ushbu modulni qo'llaysiz. Siz diskdagi faylni olasiz. Uni mos yozuvlar bilan solishtiring. Shunday qilib, agar kimdir foydalanuvchi ma'lumotlarini biroz to'g'rilashga qaror qilsa, sizning testlaringiz shunday deydi: "Yaxshi, bu erda va u erda ba'zi o'zgarishlar bor - bu normaldir."

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men gaplashmoqchi bo'lgan keyingi narsa - bu Terraformni avtomatlashtirish.

Albatta, Terraformni avtomatik ravishda qo'llash juda qo'rqinchli, chunki u erda qanday o'zgarishlar yuz berganini va ular yashash infratuzilmasi uchun qanchalik halokatli bo'lishini kim biladi.

Sinov muhiti uchun bularning barchasi normaldir. Ya'ni, sinov muhitini yaratadigan ish barcha ishlab chiquvchilarga kerak bo'lgan narsadir. Va "hamma narsa men uchun ishladi" kabi ibora kulgili mem emas, balki odamning sarosimaga tushib qolgani, stek ko'targanligi va ushbu stekda ba'zi sinovlarni o'tkazganligidan dalolat beradi. Va u erda hamma narsa yaxshi ekanligiga ishonch hosil qildi va dedi: "Yaxshi, men chiqaradigan kod sinovdan o'tkazildi."

Ishlab chiqarish, sinov muhiti va biznes uchun muhimroq bo'lgan boshqa muhitlarda siz ba'zi resurslardan qisman xavfsiz foydalanishingiz mumkin, chunki bu hech kimning o'limiga olib kelmaydi. Bular: avtomatik o'lchov guruhlari, xavfsizlik guruhlari, rollar, marshrut53 va u erdagi ro'yxat juda katta bo'lishi mumkin. Lekin nima bo'layotganini kuzatib boring, avtomatlashtirilgan dastur hisobotlarini o'qing.

Qaerda qo'llash xavfli yoki qo'rqinchli bo'lsa, masalan, agar ular ma'lumotlar bazasidagi ba'zi doimiy resurslar bo'lsa, u holda infratuzilmaning ba'zi qismlarida qo'llanilmagan o'zgarishlar borligi haqida xabarlarni oling. Va muhandis, nazorat ostida, ariza berish uchun ishlarni boshlaydi yoki uni konsolidan qiladi.

Amazonda himoya qilishni tugatish kabi narsa bor. Va u ba'zi hollarda siz uchun talab qilinmaydigan o'zgarishlardan himoya qilishi mumkin. Ya'ni, Terraform Amazonga borib: "Men boshqasini yaratish uchun bu misolni o'ldirishim kerak", dedi. Amazon esa: “Kechirasiz, bugun emas. Bizda tugatish himoyasi mavjud."

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Va pirojnoe ustidagi krem ​​​​kodni optimallashtirishdir. Terraform kodi bilan ishlaganimizda modulga juda ko'p sonli parametrlarni o'tkazishimiz kerak. Bu qandaydir resurs yaratish uchun zarur bo'lgan parametrlar. Va kod moduldan modulga, moduldan modulga o'tkazilishi kerak bo'lgan parametrlarning katta ro'yxatiga aylanadi, ayniqsa modullar ichki joylashtirilgan bo'lsa.

Va o'qish juda qiyin. Buni ko'rib chiqish juda qiyin. Va ko'pincha ba'zi parametrlar ko'rib chiqiladi va ular aniq kerak emasligi ma'lum bo'ladi. Va bu keyinchalik tuzatish uchun vaqt va pul talab qiladi.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Shuning uchun, men sizga ma'lum bir qiymatlar daraxtini o'z ichiga olgan murakkab parametr sifatida foydalanishni taklif qilaman. Ya'ni, sizga biron bir muhitda ega bo'lishni xohlagan barcha qadriyatlarga ega bo'lgan qandaydir papka kerak.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Va ushbu modulga qo'ng'iroq qilish orqali siz bitta umumiy modulda, ya'ni butun infratuzilma uchun bir xil ishlaydigan umumiy modulda yaratilgan daraxtni olishingiz mumkin.

Ushbu modulda siz mahalliy aholi sifatida Terraform-dagi so'nggi xususiyatdan foydalanib, ba'zi hisob-kitoblarni amalga oshirishingiz mumkin. Va keyin, bitta chiqish bilan, massiv xeshlarini va boshqalarni o'z ichiga olishi mumkin bo'lgan murakkab parametrlarni bering.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Bu erda men eng yaxshi topilmalarni tugatdim. Va men Kolumb haqida bir hikoya aytib bermoqchiman. U Hindistonni kashf qilish ekspeditsiyasi uchun pul qidirayotganida (u o'sha paytda o'ylaganidek), unga hech kim ishonmadi va ular buni imkonsiz deb o'ylashdi. Keyin: "Tuxum tushmasligiga ishonch hosil qiling", dedi. Barcha bankirlar, juda boy va ehtimol aqlli odamlar, tuxumni qandaydir tarzda joylashtirishga harakat qilishdi va u tushishda davom etdi. Keyin Kolumb tuxumni olib, bir oz bosdi. Chig'anoq g'ijimlangan va tuxum harakatsiz qoldi. Ular: "Oh, bu juda oson!" Va Kolumb javob berdi: "Ha, bu juda oddiy. Va men Hindistonni ochganimda, hamma bu savdo yo'lidan foydalanadi."

Sizga aytganlarim, ehtimol, juda oddiy va ahamiyatsiz narsalardir. Va ular haqida bilib, ulardan foydalanishni boshlaganingizda, hamma narsa tartibda bo'ladi. Shunday ekan, foyda oling. Va agar bu siz uchun mutlaqo normal narsalar bo'lsa, unda hech bo'lmaganda tuxumni tushmasligi uchun qanday joylashtirishni bilasiz.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Xulosa qilaylik:

  • Qor parchalaridan qochishga harakat qiling. Qor parchalari qanchalik kam bo'lsa, katta infratuzilmangizda har qanday o'zgarishlarni amalga oshirish uchun shunchalik kam resurslar kerak bo'ladi.
  • Doimiy o'zgarishlar. Ya'ni, kodda ba'zi o'zgarishlar yuz berganda, infratuzilmangizni ushbu o'zgarishlarga imkon qadar tezroq moslashtirishingiz kerak. Ikki yoki uch oydan keyin kimdir Elasticsearch-ga qarash uchun kelgan, Terraform rejasini tuzadigan va u kutmagan bir qator o'zgarishlar bo'lgan vaziyat bo'lmasligi kerak. Va hamma narsani tartibga solish uchun ko'p vaqt kerak bo'ladi.
  • Sinovlar va avtomatlashtirish. Kodingiz qanchalik ko'p sinovlar va xususiyatlar bilan qoplangan bo'lsa, hamma narsani to'g'ri bajarayotganingizga ishonchingiz shunchalik ko'p bo'ladi. Avtomatik yetkazib berish esa ishonchingizni bir necha barobar oshiradi.
  • Sinov va ishlab chiqarish muhiti uchun kod deyarli bir xil bo'lishi kerak. Amalda, chunki ishlab chiqarish hali ham bir oz farq qiladi va hali ham sinov muhitidan tashqariga chiqadigan ba'zi nuances bo'ladi. Ammo shunga qaramay, ortiqcha yoki minus, bu ta'minlanishi mumkin.
  • Va agar sizda juda ko'p Terraform kodingiz bo'lsa va ushbu kodni yangilab turish uchun ko'p vaqt kerak bo'lsa, uni qayta ishlash va uni yaxshi holatga keltirish hech qachon kech emas.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

  • O'zgarmas infratuzilma. AMI yetkazib berish jadval bo'yicha.
  • Agar sizda juda ko'p yozuvlar mavjud bo'lsa va ular izchil tartibda bo'lishini xohlasangiz, route53 uchun tuzilma.
  • API tezligi chegaralariga qarshi kurash. Bu Amazon: "Bo'ldi, men boshqa so'rovlarni qabul qila olmayman, iltimos, kuting" deydi. Va ofisning yarmi o'z infratuzilmasini ishga tushirishni kutmoqda.
  • Spot holatlar. Amazon arzon voqea emas va dog'lar sizga juda ko'p tejash imkonini beradi. Va u erda siz bu haqda to'liq hisobotni aytib berishingiz mumkin.
  • Xavfsizlik va IAM rollari.
  • Yo'qotilgan resurslarni qidirib, Amazonda kelib chiqishi noma'lum bo'lgan holatlar mavjud bo'lganda, ular pul yeyishadi. Hatto misollar oyiga 100-150 dollar turadi, bu yiliga 1 dollardan oshadi. Bunday resurslarni topish foydali biznesdir.
  • Va zaxiralangan holatlar.

Betartiblik va qo'lda ishlash tartibiga qarshi kurashish uchun Terraformdagi naqshlar. Maksim Kostrikin (Ixtens)

Men uchun hammasi shu. Terraform juda zo'r, siz undan foydalanasiz. Rahmat!

Sizning savollaringiz

Hisobot uchun rahmat! Sizning davlat faylingiz S3 da, lekin bir nechta odam ushbu holat faylini olib, kengaytirishga harakat qilishi mumkin bo'lgan muammoni qanday hal qilasiz?

Birinchidan, biz shoshilmayapmiz. Ikkinchidan, bayroqlar mavjud bo'lib, ularda biz kodning bir qismi ustida ishlayotganimiz haqida xabar beramiz. Ya'ni, infratuzilma juda katta bo'lishiga qaramay, bu kimdir doimo biror narsadan foydalanishini anglatmaydi. Va faol bosqich bo'lganda, bu muammo edi; biz Git-da davlat fayllarini saqladik. Bu muhim edi, aks holda kimdir davlat faylini tuzadi va biz hamma narsa davom etishi uchun ularni qo'lda birlashtirishimiz kerak edi. Endi bunday muammo yo'q. Umuman olganda, Terraform bu muammoni hal qildi. Va agar biror narsa doimo o'zgarib tursa, unda siz aytgan narsangizga to'sqinlik qiladigan qulflardan foydalanishingiz mumkin.

Ochiq manba yoki korxonadan foydalanasizmi?

Hech qanday korxona, ya'ni siz borishingiz va bepul yuklab olishingiz mumkin bo'lgan hamma narsa.

Mening ismim Stanislav. Men kichik qo'shimcha qilmoqchi edim. Siz misolni o'chirib bo'lmaydigan qilish imkonini beruvchi Amazon xususiyati haqida gapirdingiz. Bu Terraformning o'zida ham mavjud; Life Second blokida siz o'zgarishlarni taqiqlashni yoki yo'q qilishni taqiqlashni belgilashingiz mumkin.

Vaqt cheklangan edi. Yaxshi fikr.

Men ham ikkita narsani so'ramoqchi edim. Birinchidan, siz sinov haqida gapirdingiz. Har qanday sinov vositalaridan foydalandingizmi? Men Test Kitchen plagini haqida eshitdim. Ehtimol, yana bir narsa bor. Shuningdek, men mahalliy qadriyatlar haqida so'ramoqchiman. Qanday qilib ular kirish o'zgaruvchilaridan tubdan farq qiladi? Va nega men biror narsani faqat Mahalliy qiymatlar orqali parametrlashtira olmayman? Men bu mavzuni tushunishga harakat qildim, lekin qandaydir tarzda o'zim buni tushunolmadim.

Bu xonadan tashqarida batafsilroq gaplashishimiz mumkin. Bizning sinov vositalarimiz butunlay o'z-o'zidan ishlab chiqarilgan. U erda sinab ko'rish uchun hech narsa yo'q. Umuman olganda, avtomatlashtirilgan testlar biror joyda infratuzilmani olib, uning yaxshi ekanligini tekshirib, keyin infratuzilmangiz hali ham yaxshi holatda ekanligi haqidagi hisobot bilan hamma narsani yo'q qilish variantlari mavjud. Bizda bu yo'q, chunki test steklari har kuni ishga tushiriladi. Va bu etarli. Va agar biror narsa buzila boshlasa, biz uni boshqa joyda tekshirmasdan ham buzila boshlaydi.

Mahalliy qadriyatlarga keling, suhbatni xonadan tashqarida davom ettiramiz.

Salom! Hisobot uchun rahmat! Juda ma'lumotli. Infratuzilmani tavsiflash uchun sizda bir xil turdagi kodlar borligini aytdingiz. Ushbu kodni yaratishni o'ylab ko'rdingizmi?

Ajoyib savol, rahmat! Gap shundaki, biz infratuzilmani kod sifatida ishlatganimizda, biz kodni ko'rib chiqamiz va bu kod ortida qanday infratuzilma yotganini tushunamiz deb o'ylaymiz. Agar kod yaratilgan bo'lsa, unda qanday infratuzilma bo'lishini tushunish uchun qanday kod yaratilishini tasavvur qilishimiz kerak. Yoki biz kod yaratamiz, uni bajaramiz va aslida xuddi shu narsa sodir bo'ladi. Shunday qilib, biz yozgan yo'ldan bordik, oldik. Plyus generatorlari biz ularni ishlab chiqarishni boshlaganimizda biroz keyinroq paydo bo'ldi. Va o'zgartirish uchun allaqachon kech edi.

Jsonnet haqida biror narsa eshitganmisiz?

Yo'q, bu emas.

Qarang, bu juda zo'r narsa. Men uni qo'llashingiz va ma'lumotlar strukturasini yaratishingiz mumkin bo'lgan aniq holatni ko'raman.

Jeneratorlar, soqol olish mashinasi haqidagi hazilda bo'lgani kabi, ular mavjud bo'lganda yaxshi. Ya'ni, birinchi marta yuz har xil, lekin keyin hamma bir xil yuzga ega. Generatorlar juda yaxshi ishlaydi. Ammo, afsuski, bizning yuzlarimiz biroz boshqacha. Bu muammo.

Faqat qarang. Rahmat!

Mening ismim Maksim, men Sberbankdanman. Siz Terraformni dasturlash tili ekvivalentiga qanday olib kelishga harakat qilayotganingiz haqida bir oz gapirdingiz. Ansible-dan foydalanish osonroq emasmi?

Bular juda boshqacha narsalar. Siz Ansible-da resurslar yaratishingiz mumkin, Puppet esa Amazon-da resurslar yaratishi mumkin. Ammo Terraform to'g'ridan-to'g'ri o'tkirlashgan.

Sizda faqat Amazon bormi?

Bizda faqat Amazon bor, degani emas. Bizda deyarli faqat Amazon bor. Ammo asosiy xususiyat - Terraform eslab qoladi. Ansible-da, agar siz: "Menga 5 ta misol bering" desangiz, u ko'tariladi va keyin siz: "Va endi menga 3 ta kerak" deysiz. Va Terraform: "Yaxshi, men 2 tasini o'ldiraman" deydi va Ansible: "Yaxshi, mana siz uchun 3 ta". Jami 8.

Salom! Hisobotingiz uchun rahmat! Terraform haqida eshitish juda qiziq edi. Men darhol Terraformning barqaror versiyasiga ega emasligi haqida kichik bir fikr bildirmoqchiman, shuning uchun Terraformga juda ehtiyotkorlik bilan munosabatda bo'ling.

Kechki ovqat uchun yaxshi qoshiq. Ya'ni, agar sizga yechim kerak bo'lsa, unda ba'zida siz beqaror va hokazolarni kechiktirasiz, lekin u ishlaydi va bu bizga yordam berdi.

Savol shu. Siz Remote backend dan foydalanasiz, S 3 dan foydalanasiz. Nega rasmiy backenddan foydalanmaysiz?

Rasmiymi?

Terraform buluti.

U qachon paydo bo'lgan?

Taxminan 4 oy oldin.

Agar u 4 yil oldin paydo bo'lganida, men sizning savolingizga javob bergan bo'lardim.

Allaqachon o'rnatilgan funksiya va qulflar mavjud va siz davlat faylini saqlashingiz mumkin. Sinab ko'ring. Lekin men buni ham sinab ko'rmadim.

Biz katta tezlikda harakatlanayotgan katta poezdda sayohat qilyapmiz. Va siz bir nechta mashinani olib, ularni tashlab ketolmaysiz.

Siz qor parchalari haqida gapirdingiz, nega filialdan foydalanmadingiz? Nega bunday bo'lmadi?

Bizning yondashuvimiz shundan iboratki, butun infratuzilma bitta omborda. Terraform, Qo'g'irchoq, qandaydir tarzda bu bilan bog'liq bo'lgan barcha skriptlar, ularning barchasi bitta omborda. Shunday qilib, biz qo'shimcha o'zgarishlar birin-ketin sinovdan o'tkazilishini ta'minlashimiz mumkin. Agar u bir nechta filiallar bo'lsa, unda bunday loyihani saqlab qolish deyarli mumkin emas edi. Olti oy o'tadi va ular shunchalik farq qiladiki, bu qandaydir jazo. Bu men refaktoringdan oldin qochmoqchi bo'lgan narsam.

Xo'sh, u ishlamayaptimi?

Bu umuman ishlamaydi.

Filialda men slaydni papkani kesib tashladim. Ya'ni, agar siz buni har bir test to'plami uchun qilsangiz, masalan, A jamoasining o'z papkasi, B jamoasining o'z papkasi bor, bu ham ishlamaydi. Biz hammaga mos keladigan darajada moslashuvchan test muhiti kodini yaratdik. Ya'ni, biz bitta kodni taqdim etdik.

Salom! Mening ismim Yura! Hisobot uchun rahmat! Modullar haqida savol. Siz modullardan foydalanayotganingizni aytasiz. Agar bir modulga boshqa shaxsning o'zgarishiga mos kelmaydigan o'zgartirishlar kiritilgan bo'lsa, muammoni qanday hal qilasiz? Siz qandaydir tarzda modullarni tahrir qilyapsizmi yoki ikkita talabga javob beradigan wunderwaffle olib kelmoqchimisiz?

Bu katta qor to'plami muammosi. Ba'zi bir zararsiz o'zgarishlar infratuzilmaning qaysidir qismini buzishi mumkin bo'lsa, biz bundan aziyat chekamiz. Va bu uzoq vaqtdan keyin sezilarli bo'ladi.

Ya'ni, u hali hal etilmaganmi?

Siz universal modullarni yaratasiz. Qor parchalaridan saqlaning. Va hamma narsa amalga oshadi. Hisobotning ikkinchi yarmi buni qanday oldini olish haqida.

Salom! Hisobot uchun rahmat! Men aniqlik kiritmoqchiman. Sahna ortida men kelgan katta qoziq bor edi. Qo'g'irchoq va rol taqsimoti qanday qilib birlashtirilgan?

Foydalanuvchi ma'lumotlari.

Ya'ni, siz shunchaki faylni tupurasiz va uni qandaydir tarzda bajarasizmi?

Foydalanuvchi ma'lumotlari - bu eslatma, ya'ni biz tasvirning klonini yaratganimizda, Daemon u erda ko'tariladi va uning kimligini aniqlashga urinib, yukni muvozanatlashtiruvchi yozuvni o'qiydi.

Ya'ni, bu berilgan alohida jarayonmi?

Biz uni ixtiro qilganimiz yo'q. Biz undan foydalanamiz.

Salom! Menda faqat foydalanuvchi ma'lumotlari haqida savolim bor. Siz u erda muammolar borligini, kimdir noto'g'ri joyga nimadir yuborishi mumkinligini aytdingiz. Foydalanuvchi ma'lumotlari har doim aniq bo'lishi uchun bir xil Git-da foydalanuvchi ma'lumotlarini saqlashning qandaydir usuli bormi?

Biz shablondan foydalanuvchi ma'lumotlarini yaratamiz. Ya'ni, u erda ma'lum miqdordagi o'zgaruvchilar ishlatiladi. Va Terraform yakuniy natijani yaratadi. Shuning uchun, siz shunchaki shablonga qarab, nima bo'lishini ayta olmaysiz, chunki barcha muammolar ishlab chiquvchi ushbu o'zgaruvchida satrni o'tkazmoqda deb o'ylashi bilan bog'liq, lekin u erda massiv ishlatiladi. Va u - bam va men - falonchi, falonchi, keyingi qator va hamma narsa buzildi. Agar bu yangi manba bo'lsa va odam uni olib, biror narsa ishlamayotganini ko'rsa, u tezda hal qilinadi. Va agar bu avtomatik o'lchov guruhi yangilangan bo'lsa, u holda bir nuqtada avtomatik o'lchov guruhidagi misollar almashtirila boshlaydi. Va portlash, nimadir ishlamayapti. Og'ritadi; azoblantiradi.

Ma'lum bo'lishicha, yagona yechim sinovdan o'tkazishdir?

Ha, siz muammoni ko'rasiz, u erda sinov bosqichlarini qo'shasiz. Ya'ni, chiqish ham sinovdan o'tkazilishi mumkin. Ehtimol, bu unchalik qulay emas, lekin siz ham ba'zi belgilar qo'yishingiz mumkin - bu erda foydalanuvchi ma'lumotlari o'rnatilganligini tekshiring.

Mening ismim Timur. Terraformni qanday qilib to'g'ri tashkil qilish haqida hisobotlar borligi juda ajoyib.

Men ham boshlamadim.

O'ylaymanki, balki keyingi konferentsiyada bo'ladi. Menda oddiy savol bor. Nega siz tfvarlarni ishlatish o'rniga alohida modulda qiymatni qattiq kodlayapsiz, ya'ni nega qiymatlari bo'lgan modul tfvarlardan yaxshiroq?

Ya'ni, bu erda yozishim kerak (slayd: Production/environment/settings.tf): domen = o'zgaruvchi, domen vpcnetwork, o'zgaruvchan vpcnetwork va stvars - xuddi shu narsani olsam bo'ladimi?

Biz aynan shunday qilamiz. Biz, masalan, sozlash manba moduliga murojaat qilamiz.

Aslida, bu shunday tfvars. Tfvars sinov muhitida juda qulay. Menda katta misollar uchun tfvarlar bor, kichiklar uchun. Va men bitta faylni papkaga tashladim. Va men xohlagan narsamga erishdim. Biz infratuzilmani qisqartirayotganda, biz hamma narsani ko'rib chiqish va darhol tushunish imkoniyatiga ega bo'lishini xohlaymiz. Shunday qilib, siz bu erga qarashingiz kerak, keyin tfvarsga qarashingiz kerak.

Hamma narsa bir joyda bo'lishi mumkinmi?

Ha, tfvars sizda bitta kod mavjud bo'lganda. Va u turli nuances bilan bir necha turli joylarda ishlatiladi. Keyin tfvarlarni tashlab o'z nuanslaringizni olasiz. Va biz eng sof shaklda kod sifatida infratuzilmamiz. Men qaradim va tushundim.

Salom! Bulut provayderi siz Terraform yaratgan narsangizga xalaqit beradigan vaziyatlarga duch keldingizmi? Aytaylik, biz metama'lumotlarni tahrirlaymiz. ssh kalitlari mavjud. Va Google doimiy ravishda o'z metama'lumotlarini va kalitlarini u erga qo'yadi. Va Terraform har doim o'zgarishlar borligini yozadi. Har bir yugurishdan so'ng, hech narsa o'zgarmasa ham, u har doim bu maydonni hozir yangilashini aytadi.

Kalitlar bilan, lekin ha, infratuzilmaning bir qismi bu narsaga ta'sir qiladi, ya'ni Terraform hech narsani o'zgartira olmaydi. Biz ham qo'llarimiz bilan hech narsani o'zgartira olmaymiz. Hozircha u bilan yashaymiz.

Ya'ni, siz shunga o'xshash narsaga duch keldingiz, lekin hech narsa o'ylamadingiz, u buni qanday qiladi va buni o'zi qiladimi?

Afsuski ha.

Salom! Mening ismim Starkov Stanislav. Pochta. ru guruhi. ... da teg yaratish muammosini qanday hal qilasiz, uni qanday qilib ichkariga o'tkazasiz? Men tushunganimdek, foydalanuvchi - ma'lumotlar orqali xost nomini belgilash uchun Qo'g'irchoqni yoqingmi? Va savolning ikkinchi qismi. SGda bu masalani qanday hal qilasiz, ya'ni SG ni yaratganingizda, bir xil turdagi yuzlab misollar, ular uchun to'g'ri nom nima?

Biz uchun juda muhim bo'lgan holatlar, biz ularni chiroyli nomlaymiz. Kerak bo'lmaganlar, bu avtomatik o'lchov guruhi ekanligi haqida eslatma mavjud. Va nazariy jihatdan siz uni mixlab, yangisini olishingiz mumkin.

Teg bilan bog'liq muammoga kelsak, bunday muammo yo'q, lekin bunday vazifa mavjud. Va biz teglardan juda va juda og'ir foydalanamiz, chunki infratuzilma katta va qimmat. Va biz pul qaerga ketayotganiga qarashimiz kerak, shuning uchun teglar qaerga ketganini sindirishimizga imkon beradi. Va shunga ko'ra, bu erda juda ko'p pulni anglatuvchi narsalarni qidirish sarflanadi.

Savol yana nima haqida edi?

SG yuzlab misollarni yaratganda, ularni qandaydir tarzda ajratib ko'rsatish kerakmi?

Hojat yo'q. Har bir holatda menda muammo borligi haqida xabar beruvchi agent bor. Agar agent xabar bersa, agent u haqida biladi va hech bo'lmaganda uning IP manzili mavjud. Siz allaqachon qochib ketishingiz mumkin. Ikkinchidan, biz Kubernetes bo'lmagan Discovery uchun konsuldan foydalanamiz. Konsul shuningdek, misolning IP manzilini ko'rsatadi.

Ya'ni, siz xost nomiga emas, balki IP-ga alohida e'tibor qaratyapsizmi?

Xost nomi bo'yicha harakat qilish mumkin emas, ya'ni ularning ko'pi bor. Misol identifikatorlari mavjud - AE va boshqalar. Siz uni biron bir joyda topishingiz mumkin, uni qidiruvga tashlashingiz mumkin.

Salom! Men Terraform bulutlar uchun moslashtirilgan yaxshi narsa ekanligini angladim.

Nafaqat.

Aynan shu savol meni qiziqtiradi. Agar siz barcha misollaringiz bilan ommaviy ravishda Bare Metalga ko'chishga qaror qilsangiz? Muammolar bo'ladimi? Yoki siz hali ham boshqa mahsulotlardan, masalan, bu erda aytib o'tilgan Ansible-dan foydalanishingiz kerakmi?

Ansible biroz boshqa narsa haqida. Ya'ni, misol boshlanganda Ansible allaqachon ishlaydi. Va Terraform misol boshlanishidan oldin ishlaydi. Yalang'och metallga o'tish - yo'q.

Hozir emas, lekin biznes kelib: "Kelinglar", deyishadi.

Boshqa bulutga o'tish - ha, lekin bu erda bir oz boshqacha hiyla bor. Siz Terraform kodini shunday yozishingiz kerakki, boshqa bulutga kamroq harakat bilan o'tishingiz mumkin.

Dastlab, bizning butun infratuzilmamiz agnostik, ya'ni har qanday bulut mos bo'lishi kerakligi haqida vazifa qo'yilgan edi, lekin bir vaqtning o'zida biznes taslim bo'ldi va dedi: "Yaxshi, keyingi N yil ichida biz hech qaerga bormaymiz, xizmatlardan foydalanishimiz mumkin. Amazondan "

Terraform sizga Front-End ishlarini yaratish, PagerDuty, data doc va boshqalarni sozlash imkonini beradi. Unda juda ko'p dumlar mavjud. U amalda butun dunyoni nazorat qila oladi.

Hisobot uchun rahmat! Men ham 4 yildan beri Terraformdan foydalanaman. Terraformga, infratuzilmaga, deklarativ tavsifga silliq o'tish bosqichida biz kimdir qo'lda nimadir qilayotgan, siz esa reja tuzmoqchi bo'lgan vaziyatga duch keldik. Va men u erda qandaydir xatoga yo'l qo'ydim. Bunday muammolar bilan qanday kurashasiz? Ro'yxatga kiritilgan yo'qolgan resurslarni qanday topasiz?

Asosan qo'llarimiz va ko'zlarimiz bilan, agar hisobotda g'alati narsani ko'rsak, u erda nima sodir bo'layotganini tahlil qilamiz yoki shunchaki o'ldiramiz. Umuman olganda, tortishish so'rovlari odatiy holdir.

Agar xato bo'lsa, orqaga qaytarasizmi? Buni qilishga harakat qildingizmi?

Yo'q, bu odamning muammoni ko'rgan paytdagi qarori.

Manba: www.habr.com