Kufotokozera za zomangamanga ku Terraform zamtsogolo. Anton Babenko (2018)
Anthu ambiri amadziwa ndikugwiritsa ntchito Terraform pantchito yawo yatsiku ndi tsiku, koma njira zabwino zake sizinapangidwebe. Gulu lirilonse liyenera kupanga njira zake ndi njira zake.
Zomangamanga zanu pafupifupi zimayamba mophweka: zida zochepa + omanga ochepa. Pakapita nthawi, imakula m'njira zosiyanasiyana. Kodi mumapeza njira zophatikizira zothandizira kukhala ma module a Terraform, kukonza ma code kukhala mafoda, ndi zina ziti zomwe zingasokonekera? (mawu omaliza otchuka)
Nthawi ikupita ndipo mumamva ngati maziko anu ndi chiweto chanu chatsopano, koma chifukwa chiyani? Mukuda nkhawa ndi kusintha kosadziwika bwino kwa zomangamanga, mukuwopa kukhudza zomangamanga ndi ma code - chifukwa chake, mumachedwetsa ntchito zatsopano kapena kuchepetsa khalidwe ...
Pambuyo pa zaka zitatu zoyang'anira mndandanda wa ma modules ammudzi a Terraform kwa AWS pa Github ndi kukonza kwa Terraform kwa nthawi yaitali pakupanga, Anton Babenko ali wokonzeka kugawana zomwe adakumana nazo: momwe angalembere ma module a TF kuti asapweteke m'tsogolomu.
Pamapeto pa nkhaniyo, otenga nawo mbali azidziwa bwino mfundo zoyendetsera zinthu mu Terraform, njira zabwino zogwirizanirana ndi ma module a Terraform, ndi mfundo zina zophatikizana mosalekeza zokhudzana ndi kasamalidwe ka zomangamanga.
Chodzikanira:Ndikuwona kuti lipoti ili la Novembala 2018-zaka 2 zadutsa kale. Mtundu wa Terraform 0.11 womwe wafotokozedwa mu lipotilo sunathandizidwenso. Pazaka 2 zapitazi, zatsopano za 2 zatulutsidwa, zomwe zili ndi zatsopano zambiri, zosintha ndi kusintha. Chonde tcherani khutu ku izi ndikuwona zolembazo.
Panali ntchito zambiri zosangalatsa. Ndimakonda kupanga ma code chifukwa ndimakonda kompyuta kuti igwire ntchito zambiri kwa ine ndi wopanga mapulogalamu, kotero ndikugwira ntchito pa Terraform code generator kuchokera pazithunzi. Mwina ena mwa inu munawaonapo. Awa ndi mabokosi okongola okhala ndi mivi. Ndipo ndikuganiza ndizabwino ngati mutha kudina batani la "Export" ndikupeza zonse ngati ma code.
Ndimachokera ku Ukraine. Ndakhala ku Norway kwa zaka zambiri.
Komanso zambiri za lipotili zidatengedwa kuchokera kwa anthu omwe amadziwa dzina langa ndikundipeza pamasamba ochezera. Pafupifupi nthawi zonse ndimakhala ndi dzina lomweli.
Monga ndanenera, ndine woyang'anira ma module a Terraform AWS, yomwe ndi imodzi mwazosungirako zazikulu kwambiri pa GitHub kumene timakhala ndi ma modules a ntchito zofala kwambiri: VPC, Autoscaling, RDS.
Terraform idawonekera mu 2014 ngati chida chomwe chimakulolani kuti mulembe, kukonzekera ndikuwongolera zomangamanga monga ma code. Lingaliro lofunikira apa ndi "infrastructure as code."
Zolemba zonse, monga ndanenera, zalembedwamo terraform.io. Ndikukhulupirira kuti anthu ambiri akudziwa za tsamba ili ndipo awerenga zolembedwa. Ngati ndi choncho, ndiye kuti muli pamalo oyenera.
Izi ndi zomwe fayilo yokhazikika ya Terraform imawonekera, pomwe timafotokozera zosintha zina.
Pachifukwa ichi timatanthauzira "aws_region".
Kenako timafotokozera zomwe tikufuna kupanga.
Timayendetsa malamulo, makamaka "terraform init" kuti tiyike zodalira ndi othandizira.
Ndipo zonse ndizabwino, muli ndi fayilo yomwe imapanga VPC.
Ngati mukufuna kupanga VPC, ndiye kuti mumatchula pafupifupi mizere 12 iyi. Fotokozani dera lomwe mukufuna kupanga, ndi cidr_block ya ma adilesi a IP oti mugwiritse ntchito. Ndizomwezo.
Mwachibadwa, ntchitoyi idzakula pang'onopang'ono.
Ndipo mudzakhala mukuwonjezera zinthu zatsopano kumeneko: zothandizira, magwero a deta, mudzaphatikizana ndi opereka atsopano, mwadzidzidzi mudzafuna kugwiritsa ntchito Terraform kuyang'anira ogwiritsa ntchito mu akaunti yanu ya GitHub, ndi zina. Othandizira a DNS, kuwoloka chilichonse. Terraform imapangitsa izi kukhala zosavuta.
Tiyeni tione chitsanzo chotsatirachi.
Mukuwonjezera pang'onopang'ono intaneti_gateway chifukwa mukufuna zothandizira kuchokera ku VPC yanu kuti mukhale ndi intaneti. Ili ndi lingaliro labwino.
Zotsatira zake ndi izi main.tf:
Ili ndiye gawo lapamwamba la main.tf.
Ili ndiye gawo la pansi la main.tf.
Ndiye inu kuwonjezera subnet. Podzafika nthawi yomwe mukufuna kuwonjezera zipata za NAT, mayendedwe, matebulo owongolera ndi gulu la ma subnets ena, simudzakhala ndi mizere 38, koma mizere pafupifupi 200-300.
Monga mumapulogalamu anthawi zonse, i.e. osati zomangamanga monga ma code, timazolowera kugwiritsa ntchito magulu osiyanasiyana, maphukusi, ma module, magulu. Terraform imakulolani kuti muchite zomwezo.
Code ikukula.
Kudalirana pakati pa zothandizira kukukulanso.
Ndipo ife tiri nacho chosowa chachikulu, chachikulu. Timadziwa kuti sitingakhalenso moyo wotero. Code yathu ikukhala yayikulu. 10-20 KB, ndithudi, si yaikulu kwambiri, koma tikukamba za stack network, i.e. mwangowonjezera zothandizira maukonde. Sitikulankhula za Application Load Balancer, gulu la ES lotumiza, Kubernetes, ndi zina zambiri, pomwe 100 KB imatha kuluka mosavuta. Mukalemba zonsezi, mudzazindikira posachedwa kuti Terraform imapereka ma module a Terraform.
Ma module a Terraform ndi kasinthidwe ka Terraform komwe kumayendetsedwa ngati gulu. Ndizo zonse zomwe muyenera kudziwa za Terraform modules. Iwo sali anzeru konse, samakulolani kuti mupange kulumikizana kovutirapo kutengera china chake. Izi zonse zimagwera pamapewa a opanga. Ndiye kuti, uwu ndi mtundu wina wa kasinthidwe ka Terraform komwe mudalemba kale. Ndipo mukhoza kungoyitcha ngati gulu.
Chifukwa chake tikuyesera kumvetsetsa momwe tingakwaniritsire ma code 10-20-30 KB. Pang'onopang'ono tikuzindikira kuti tiyenera kugwiritsa ntchito ma module.
Mtundu woyamba wa ma module omwe mumakumana nawo ndi ma module othandizira. Samvetsetsa zomwe maziko anu ali, zomwe bizinesi yanu ikunena, komwe ndi momwe zilili. Awa ndi ma module omwe ine, pamodzi ndi gulu lotseguka, ndimayang'anira, ndi zomwe timayika ngati zomangira zoyambira zanu.
Langizo #0 ndikuti musalembe ma module othandizira. Ambiri mwa ma module awa adalembedwa kale kwa inu. Monga ndanenera, iwo ndi gwero lotseguka, alibe malingaliro abizinesi yanu, alibe ma hardcode a ma adilesi a IP, mapasiwedi, ndi zina zambiri. Ndipo mosakayikira linalembedwa kale. Pali ma module ambiri azinthu zochokera ku Amazon. pafupifupi 650. Ndipo ambiri aiwo ndi abwino.
Ndipo munthu sayenera kudziwa kuti tidzapanga zinthu ziwiri zosiyana mkati mwa gawoli: imodzi ya MSSQL, yachiwiri pa china chirichonse, chifukwa mu Terraform 0.11 simungathe kufotokoza za nthawi ngati mukufuna.
Ndipo potuluka mugawoli, munthu azitha kungolandira adilesi. Sadzadziwa kuchokera ku database yanji, kuchokera kuzinthu zomwe timapanga zonsezi mkati. Ichi ndi chinthu chofunikira kwambiri chobisala. Ndipo izi sizikugwiranso ntchito ku ma module omwe ali pagulu poyera, komanso ma module omwe mungalembe mkati mwa mapulojekiti anu ndi magulu.
Uwu ndiye mkangano wachiwiri, womwe ndi wofunikira ngati mwakhala mukugwiritsa ntchito Terraform kwakanthawi. Muli ndi malo omwe mumayikamo ma module anu onse a Terraform kukampani yanu. Ndipo nβzachilendo kuti mβkupita kwa nthawi ntchitoyi idzakula mpaka kufika pa megabyte imodzi kapena ziwiri. Izi nzabwino.
Koma vuto ndi momwe Terraform imayitanira ma module awa. Mwachitsanzo, ngati muyimbira gawo kuti mupange wogwiritsa ntchito aliyense payekha, Terraform iyamba kuyika nkhokwe yonse kenako ndikusunthira kufoda yomwe gawolo lili. Mwanjira iyi mudzatsitsa megabyte imodzi nthawi iliyonse. Ngati mumayang'anira ogwiritsa ntchito 100 kapena 200, ndiye kuti mutsitsa ma megabytes 100 kapena 200, kenako pitani ku fodayo. Chifukwa chake mwachilengedwe simukufuna kutsitsa zinthu zambiri nthawi iliyonse mukamenya "Terraform init".
Yachiwiri yankho. Ngati muli ndi ma submodules ambiri ndipo muli kale ndi mtundu wina wa payipi yokhazikitsidwa, ndiye kuti pali pulojekiti ya MBT, yomwe imakulolani kuti mutenge mapepala osiyanasiyana kuchokera ku monorepository ndikuyiyika ku S3. Iyi ndi njira yabwino kwambiri. Choncho, fayilo ya iam-user-1.0.0.zip idzalemera 1 KB yokha, chifukwa code yopangira izi ndi yaying'ono kwambiri. Ndipo idzagwira ntchito mofulumira kwambiri.
Mayesero ndi osiyana chifukwa ndi ovuta kulemba. Ndimakhulupirira kwambiri zolemba ndi zitsanzo.
Kotero, tinayang'ana momwe tingalembere ma modules. Pali mikangano iwiri. Yoyamba, yomwe ili yofunika kwambiri, si kulemba ngati mungathe, chifukwa gulu la anthu lachita kale ntchitozi pamaso panu. Ndipo chachiwiri, ngati mutasankhabe, yesetsani kuti musagwiritse ntchito ma modules ndi othandizira.
Ichi ndi gawo la imvi la zolembedwa. Mwina tsopano mukuganiza kuti: βChina chake sichikudziwika. Osatsimikiza." Koma tiwona mu miyezi isanu ndi umodzi.
Tsopano tiyeni tikambirane momwe tingatchulire ma modules.
Timamvetsetsa kuti code yathu imakula pakapita nthawi. Tilibenso fayilo imodzi, tili ndi mafayilo 20. Onse ali mufoda imodzi. Kapena mafoda asanu. Mwinamwake tikuyamba mwanjira ina kuwaphwanya ndi dera, ndi zigawo zina. Ndiye timamvetsetsa kuti tsopano tili ndi zoyambira za kulunzanitsa ndi kuyimba. Ndiko kuti, tiyenera kumvetsetsa zomwe tiyenera kuchita ngati tasintha zida zapaintaneti, zomwe tiyenera kuchita ndi zina zonse zomwe tili nazo, momwe tingayambitsire kudalira uku, ndi zina.
Pali zinthu ziwiri monyanyira. Yoyamba monyanyira zonse mu umodzi. Tili ndi fayilo imodzi yayikulu. Pakadali pano, iyi inali njira yabwino kwambiri patsamba la Terraform.
Koma tsopano zalembedwa ngati zochotsedwa ndi kuchotsedwa. Mβkupita kwa nthawi, anthu a mβdera la Terraform anazindikira kuti zimenezi zinali kutali ndi njira yabwino kwambiri, chifukwa anthu anayamba kugwiritsa ntchito ntchitoyi mβnjira zosiyanasiyana. Ndipo pali mavuto. Mwachitsanzo, tikalemba zodalira zonse pamalo amodzi. Nthawi zina timadina "Terraform plan" ndipo mpaka Terraform asinthe maiko azinthu zonse, nthawi yambiri imatha.
Nthawi yambiri imakhala, mwachitsanzo, mphindi zisanu. Kwa ena iyi ndi nthawi yochuluka. Ndawonapo zochitika zomwe zidatenga mphindi 5. AWS API idakhala mphindi 15 kuyesa kudziwa zomwe zikuchitika ndi gawo lililonse. Ili ndi dera lalikulu kwambiri.
Ndipo, mwachibadwa, vuto lofanana lidzawonekera pamene mukufuna kusintha chinachake pamalo amodzi, ndiye mudikirira mphindi 15, ndipo imakupatsani chinsalu cha zosintha zina. Munalavula, munalemba "Inde", ndipo china chake chalakwika. Ichi ndi chitsanzo chenicheni. Terraform samayesa kukutetezani ku mavuto. Ndiko kuti, lembani zomwe mukufuna. Padzakhala mavuto - mavuto anu. Ngakhale Terraform 0.11 sikuyesera kukuthandizani mwanjira iliyonse. Pali malo ena osangalatsa mu 0.12 omwe amakulolani kuti: "Vasya, mukufunadi izi, kodi mutha kuzindikira?"
Njira yachiwiri ndiyo kuchepetsa dera lino, ndiko kuti, mafoni ochokera kumalo amodzi akhoza kukhala ochepa kuchokera kumalo ena.
Vuto lokha ndiloti muyenera kulemba ma code ambiri, mwachitsanzo, muyenera kufotokoza zosinthika mu chiwerengero chachikulu cha mafayilo ndikusintha izi. Anthu ena sakonda. Izi ndizabwinobwino kwa ine. Ndipo anthu ena amaganiza kuti: "Bwanji ndikulemba izi m'malo osiyanasiyana, ndikuyika zonse pamalo amodzi." Izi ndizotheka, koma ichi ndi chachiwiri kwambiri.
Ndani ali nazo zonsezi kukhala pamalo amodzi? Mmodzi, awiri, atatu, ndiye kuti, wina akugwiritsa ntchito.
Ndipo ndani amatcha chigawo chimodzi, chipika chimodzi kapena gawo limodzi lachitukuko? Anthu asanu mpaka asanu ndi awiri. Izi ndizabwino.
Yankho lofala kwambiri ndi penapake pakati. Ngati polojekitiyi ndi yaikulu, ndiye kuti nthawi zambiri mudzakhala ndi vuto lomwe palibe yankho lomwe liri loyenera ndipo si zonse zomwe zimagwira ntchito, kotero mumatha ndi kusakaniza. Palibe cholakwika ndi izi, bola ngati mumvetsetsa kuti onse ali ndi zabwino.
Ngati china chake chasintha mu stack VPC ndipo mukufuna kugwiritsa ntchito zosinthazi ku EC2, mwachitsanzo, mumafuna kusintha gulu la autoscaling chifukwa muli ndi subnet yatsopano, ndiye ndimayitcha mtundu wanyimbo wodalira. Pali mayankho: ndani amagwiritsa ntchito chiyani?
Kugwira ntchito ndi ndandanda m'malo abwino. Kodi malo abwino ndi chiyani? Umu ndi momwe mtengo watsopano umapangidwira pamene chida ichi chikupangidwa. Mwachitsanzo, AWS Access Key kapena AWS Secret Key, i.e. tikapanga wogwiritsa ntchito, timalandira Kufikira kapena Chinsinsi chatsopano. Ndipo nthawi iliyonse tikachotsa wosuta, wogwiritsa ntchitoyo amakhala ndi kiyi yatsopano. Koma izi si feng shui, chifukwa wosuta sangafune kukhala mabwenzi nafe ngati tipanga wosuta watsopano kwa iye nthawi iliyonse wina kusiya gulu.
Ili ndiye yankho. Iyi ndi code yolembedwa mu Jsonnet. Jsonnet ndi chilankhulo chojambula kuchokera ku Google.
Lamuloli limakupatsani mwayi wovomereza template iyi ndipo ngati zotsatira zake zimabwezera fayilo ya json yomwe imapangidwa molingana ndi template yanu.
Template ikuwoneka chonchi.
Terraform imakulolani kuti mugwire ntchito ndi HCL ndi Json mofanana, kotero ngati muli ndi luso lopanga Json, ndiye kuti mutha kuyiyika mu Terraform. Fayilo yokhala ndi extension .tf.json itsitsidwa bwino.
Ndiyeno timatcha lamulo ili kuchokera ku chipolopolo cha terraform ndikufotokozera mtengo umene tikufuna. Chifukwa chake, lamuloli limachitidwa ndi zikhalidwe zonse zosinthidwa. Ndi bwino kwambiri.
Mwachilengedwe, izi zonse ndi zosalala pamapepala, chifukwa Amazon, monga ena onse othandizira anthu, ili ndi mulu wamilandu yake.
Chodziwika kwambiri cha m'mphepete ndikuti mukatsegula akaunti ya AWS, zimafunikira madera omwe mumagwiritsa ntchito; ndi mbali iyi yathandizidwa pamenepo; mwina mudatsegula pambuyo pa December 2013; mwina mukugwiritsa ntchito kusakhulupirika mu VPC etc. Pali zoletsa zambiri. Ndipo Amazon idawabalalitsa pazolemba zonse.
Pali zinthu zingapo zomwe ndimalimbikitsa kupewa.
Kuti muyambe, pewani mikangano yonse yopanda chinsinsi mkati mwa dongosolo la Terraform kapena Terraform CLI. Zonsezi zitha kuyikidwa mufayilo ya tfvars kapena kusinthika kwachilengedwe.
Koma simuyenera kuloweza lamulo lonse lamatsenga ili. Mapulani a Terraform - var ndipo timapita. Mtundu woyamba ndi var, wachiwiri ndi var, wachitatu, wachinayi. Mfundo yofunika kwambiri ya zomangamanga monga code yomwe ndimagwiritsa ntchito nthawi zambiri ndikuti pongoyang'ana kachidindo, ndiyenera kumvetsetsa bwino zomwe zimayikidwa pamenepo, momwe zilili komanso ndi zikhalidwe ziti. Ndipo chifukwa chake sindiyenera kuwerenga zolembazo kapena kufunsa Vasya kuti ndi magawo ati omwe adagwiritsa ntchito popanga gulu lathu. Ndikungofunika kutsegula fayilo ndi zowonjezera za tfvars, zomwe nthawi zambiri zimagwirizana ndi chilengedwe, ndikuyang'ana zonse zomwe zilipo.
Komanso, musagwiritse ntchito mikangano yomwe mukufuna kuti muchepetse kufalikira. Kwa izi ndizosavuta kugwiritsa ntchito ma module ang'onoang'ono a zomangamanga.
Komanso, palibe chifukwa chochepetsera ndikuwonjezera kufanana. Ngati ndili ndi 150 zothandizira ndipo ndikufuna kuonjezera kufanana kwa Amazon kuchokera ku 10 mpaka 100, ndiye kuti chinachake chidzalakwika. Kapena zitha kuyenda bwino tsopano, koma Amazon ikanena kuti mukuyimba mafoni ambiri, mudzakhala m'mavuto.
Terraform ayesa kuyambitsanso ambiri mwamavutowa, koma simungakwaniritse chilichonse. Parallelism = 1 ndichinthu chofunikira kugwiritsa ntchito ngati mutapunthwa ndi cholakwika mkati mwa AWS API kapena mkati mwa Terraform provider. Kenako muyenera kufotokoza: parallelism = 1 ndikudikirira mpaka Terraform amalize kuyimba kumodzi, kenako yachiwiri, kenako yachitatu. Adzawatsegulira mmodzimmodzi.
Anthu nthawi zambiri amandifunsa kuti, "N'chifukwa chiyani ndikuganiza kuti malo ogwirira ntchito a Terraform ndi oipa?" Ndikukhulupirira kuti mfundo zachitukuko monga ma code ndikuwona zomwe zidapangidwa komanso zomwe zili zofunika.
Malo ogwirira ntchito sanapangidwe ndi ogwiritsa ntchito. Izi sizikutanthauza kuti ogwiritsa ntchito adalemba nkhani za GitHub kuti sitingakhale popanda malo ogwirira ntchito a Terraform. Ayi sichoncho. Terraform Enterprise ndi yankho lamalonda. Terraform wochokera ku HashiCorp adaganiza kuti tikufuna malo ogwirira ntchito, chifukwa chake tidazisiya. Ndimaona kuti ndizosavuta kuziyika mufoda yapadera. Kenako padzakhala mafayilo ochulukirapo, koma zikhala zomveka bwino.
Mutu wa lipotilo unalembedwa "zamtsogolo." Ndilankhula za izi mwachidule kwambiri. M'tsogolomu, izi zikutanthauza kuti 0.12 idzatulutsidwa posachedwa.
0.12 ndi matani azinthu zatsopano. Ngati mumachokera ku mapulogalamu okhazikika, ndiye kuti mumaphonya mitundu yonse ya midadada yamphamvu, malupu, kufananitsa kolondola komanso kovomerezeka, komwe mbali yakumanzere ndi yakumanja sikuwerengedwa nthawi imodzi, koma kutengera momwe zinthu ziliri. Mukuphonya kwambiri, kotero 0.12 idzakuthetserani.
Koma! Ngati mulemba mochepa komanso mophweka, pogwiritsa ntchito ma modules okonzeka ndi mayankho a chipani chachitatu, ndiye kuti simuyenera kudikira ndikuyembekeza kuti 0.12 idzabwera ndikukonzerani zonse.
Zikomo chifukwa cha lipoti! Munalankhula za zomangamanga monga ma code ndipo munanena mawu amodzi okhudza mayeso. Kodi mayeso amafunikira m'ma module? Kodi udindo umenewu ndi wa ndani? Kodi ndiyenera kulemba ndekha kapena ndi udindo wa ma module?
Moni! Zikomo chifukwa cha lipoti! Dzina langa ndine Misha, kampani ya RBS. Mutha kuyimbira Ansible kudzera pa provider popanga chothandizira. Ansible ilinso ndi mutu wotchedwa dynamic inventory. Ndipo mutha kuyimba kaye Terraform, ndikuyimbira Ansible, yomwe ingatenge chuma kuchokera ku boma ndikuchichita. Chabwino nchiyani?
Anthu amagwiritsa ntchito zonsezi ndi kupambana kofanana. Zikuwoneka kwa ine kuti kusanthula kwamphamvu mu Ansible ndichinthu chosavuta, ngati sitikulankhula za gulu la autoscaling. Chifukwa mu gulu la autoscaling tili kale ndi zida zathu, zomwe zimatchedwa launch_configuration. Mu launch_configuration timalemba zonse zomwe ziyenera kukhazikitsidwa tikapanga chida chatsopano. Chifukwa chake, ndi Amazon, kugwiritsa ntchito kusanthula kwamphamvu ndikuwerenga fayilo ya Terraform ts, m'malingaliro mwanga, ndikokwanira. Ndipo ngati mugwiritsa ntchito zida zina pomwe palibe lingaliro la "gulu la autoscaling", mwachitsanzo, mumagwiritsa ntchito DigitalOcean kapena othandizira ena pomwe palibe gulu la autoscaling, pamenepo muyenera kukokera pamanja API, kupeza ma adilesi a IP, kupanga. a dynamic inventory file , ndipo Ansible ayamba kale kudutsamo. Ndiko kuti, kwa Amazon pali launch_configuration, ndipo pa china chirichonse pali kufufuza kwamphamvu.