Wedi newid o Terraform i CloudFormation - ac yn difaru

Mae cynrychioli seilwaith fel cod mewn fformat testun ailadroddadwy yn arfer gorau syml ar gyfer systemau nad oes angen chwarae gyda llygod. Mae gan y practis hwn enw - Seilwaith fel Cod, a hyd yn hyn mae dau offeryn poblogaidd i'w weithredu, yn enwedig yn AWS: Terraform и Ffurfio Cloud.

Wedi newid o Terraform i CloudFormation - ac yn difaru
Cymharu profiad â Terraform a CloudFormation

Cyn dod i phlwc (y mae Amazon Jr.) Roeddwn i'n gweithio mewn un cychwyn a defnyddiodd Terraform am dair blynedd. Yn y lle newydd, defnyddiais Terraform gyda fy holl allu hefyd, ac yna gwthiodd y cwmni'r newid i bopeth a la Amazon, gan gynnwys CloudFormation. Rwyf wedi datblygu arferion gorau yn ddiwyd ar gyfer y ddau, ac wedi defnyddio'r ddau offeryn mewn llifoedd gwaith cymhleth iawn, ar draws y sefydliad. Yn ddiweddarach, ar ôl pwyso a mesur yn feddylgar oblygiadau mudo o Terraform i CloudFormation, deuthum yn argyhoeddedig mai Terraform oedd y dewis gorau i'r sefydliad yn ôl pob tebyg.

Teras erchyll

Meddalwedd beta

Nid yw Terraform hyd yn oed wedi rhyddhau fersiwn 1.0 eto, sy'n rheswm da dros beidio â'i ddefnyddio. Mae wedi newid llawer ers i mi roi cynnig arni fy hun gyntaf, ond yn ôl wedyn terraform apply yn aml yn torri i lawr ar ôl sawl diweddariad neu yn syml ar ôl cwpl o flynyddoedd o ddefnydd. Byddwn yn dweud bod “popeth yn wahanol nawr,” ond... dyna mae pawb i’w weld yn ei ddweud, na? Mae yna newidiadau sy'n anghydnaws â fersiynau blaenorol, er eu bod yn briodol, ac mae hyd yn oed yn teimlo mai cystrawen a thynnu siopau adnoddau yw'r hyn sydd ei angen arnom nawr. Mae'n ymddangos bod yr offeryn wedi gwella'n fawr, ond... :-0

Ar y llaw arall, mae AWS wedi gwneud gwaith da yn cynnal cydnawsedd tuag yn ôl. Mae'n debyg mai'r rheswm am hyn yw bod eu gwasanaethau yn aml yn cael eu profi'n drylwyr o fewn y sefydliad a dim ond wedyn, yn cael eu hail-enwi, sy'n cael eu cyhoeddi. Felly mae “fe wnaethon nhw ymdrechu'n galed” yn danddatganiad. Mae cynnal cydnawsedd yn ôl ag APIs ar gyfer system mor amrywiol a chymhleth ag AWS yn anhygoel o anodd. Dylai unrhyw un sydd wedi gorfod cynnal APIs cyhoeddus a ddefnyddir mor eang ag y maent ddeall pa mor anodd yw gwneud hynny ers cymaint o flynyddoedd. Ond nid yw ymddygiad CloudFormation, yn fy nghof, erioed wedi newid dros y blynyddoedd.

Cwrdd â'r goes... bwled ydyw

Hyd y gwn i, dilëwch yr adnodd tu allan Nid yw pentwr CloudFormation o'ch pentwr CF yn bosibl. Mae'r un peth yn wir gyda Terraform. Mae'n caniatáu ichi fewnforio adnoddau presennol i'ch pentwr. Gellir dweud bod y swyddogaeth yn anhygoel, ond gyda phŵer mawr daw cyfrifoldeb mawr. Y cyfan sydd angen i chi ei wneud yw ychwanegu adnodd at y pentwr, a thra byddwch yn gweithio gyda'ch pentwr, ni allwch ddileu na newid yr adnodd hwn. Un diwrnod fe backfired. Un diwrnod ar Twitch, fe wnaeth rhywun fewnforio grŵp diogelwch AWS rhywun arall yn ddamweiniol i'w pentwr Terraform eu hunain heb wneud unrhyw ddrwg. Fe wnes i nodi sawl gorchymyn a ... diflannodd y grŵp diogelwch (ynghyd â thraffig sy'n dod i mewn).

Teras Gwych

Adferiad o gyflyrau anghyflawn

Weithiau mae CloudFormation yn methu â thrawsnewid yn llwyr o un cyflwr i'r llall. Ar yr un pryd, bydd yn ceisio dychwelyd i'r un blaenorol. Mae'n drueni nad yw hyn bob amser yn ymarferol. Gall fod yn eithaf brawychus dadfygio'r hyn a ddigwyddodd yn ddiweddarach - dydych chi byth yn gwybod a fydd CloudFormation yn hapus ei fod yn cael ei hacio - hyd yn oed dim ond i'w drwsio. P'un a fydd yn bosibl dychwelyd i'r cyflwr blaenorol ai peidio, nid yw'n gwybod sut i benderfynu ac, yn ddiofyn, mae'n aros am oriau yn aros am wyrth.

Mae Terraform, ar y llaw arall, yn tueddu i wella o drawsnewidiadau a fethwyd yn llawer mwy gosgeiddig ac yn cynnig offer dadfygio uwch.

Newidiadau cliriach i gyflwr y ddogfen

“Iawn, load balancer, rydych chi'n newid. Ond sut?"

—peiriannydd pryderus, yn barod i wasgu'r botwm “derbyn”.

Weithiau mae angen i mi wneud rhai manipulations gyda'r balancer llwyth yn y pentwr CloudFormation, megis ychwanegu rhif porthladd neu newid grŵp diogelwch. Mae ClouFormation yn dangos newidiadau yn wael. Rwyf i, ar binnau a nodwyddau, yn gwirio'r ffeil yaml ddwywaith i wneud yn siŵr nad wyf wedi dileu unrhyw beth angenrheidiol ac nad wyf wedi ychwanegu unrhyw beth diangen.

Mae terraform yn llawer mwy tryloyw yn hyn o beth. Weithiau mae hyd yn oed yn rhy dryloyw (darllenwch: annifyr). Yn ffodus, mae'r fersiwn ddiweddaraf yn cynnwys arddangosiad gwell o newidiadau fel y gallwch nawr weld yn union beth sy'n newid.

Hyblygrwydd

Ysgrifennu meddalwedd am yn ôl.

I'w roi'n blwmp ac yn blaen, nodwedd bwysicaf meddalwedd hirhoedlog yw'r gallu i addasu i newid. Ysgrifennwch unrhyw feddalwedd am yn ôl. Yn fwyaf aml gwnes i gamgymeriadau trwy gymryd gwasanaeth “syml”, ac yna dechrau gwasgu popeth i mewn i un pentwr CloudFormation neu Terraform. Ac wrth gwrs, fisoedd yn ddiweddarach datgelwyd fy mod wedi deall popeth yn anghywir, ac nid oedd y gwasanaeth yn syml mewn gwirionedd! Ac yn awr mae angen i mi rywsut dorri pentwr mawr yn gydrannau bach. Pan fyddwch chi'n gweithio gyda CloudFormation, dim ond trwy ail-greu'r pentwr presennol yn gyntaf y gellir gwneud hyn, ac nid wyf yn gwneud hyn gyda fy nghronfeydd data. Roedd Terraform, ar y llaw arall, yn ei gwneud hi'n bosibl rhannu'r pentwr a'i dorri i lawr yn rhannau llai dealladwy.

Modiwlau mewn git

Mae rhannu cod Terraform ar draws staciau lluosog yn llawer haws na rhannu cod CloudFormation. Gyda Terraform, gallwch chi roi'ch cod mewn ystorfa git a'i gyrchu gan ddefnyddio rheolaeth fersiwn semantig. Gall unrhyw un sydd â mynediad i'r gadwrfa hon ailddefnyddio'r cod a rennir. Yr hyn sy'n cyfateb i CloudFormation yw S3, ond nid oes ganddo'r un buddion, ac nid oes unrhyw reswm pam y dylem roi'r gorau i git o blaid S3 o gwbl.

Tyfodd y sefydliad a chyrhaeddodd y gallu i rannu staciau cyffredin lefel hollbwysig. Mae Terraform yn gwneud hyn i gyd yn hawdd ac yn naturiol, tra bydd CloudFormation yn gwneud ichi neidio trwy gylchoedd cyn y gallwch chi gael rhywbeth fel hyn i weithio.

Gweithrediadau fel cod

“Gadewch i ni ei sgriptio ac yn iawn.”

—yn beiriannydd 3 blynedd cyn dyfeisio'r beic Terraform.

O ran datblygu meddalwedd, nid cod yn unig yw Go neu raglen Java.

Wedi newid o Terraform i CloudFormation - ac yn difaru
Cod fel Cod

Mae yna hefyd y seilwaith y mae'n gweithio arno.

Wedi newid o Terraform i CloudFormation - ac yn difaru
Seilwaith fel Cod

Ond o ble mae hi? Sut i'w fonitro? Ble mae eich cod yn byw? A oes angen caniatâd mynediad ar ddatblygwyr?

Wedi newid o Terraform i CloudFormation - ac yn difaru
Gweithrediadau fel Cod

Nid yw bod yn ddatblygwr meddalwedd yn golygu ysgrifennu cod yn unig.

Nid AWS yw'r unig un: mae'n debyg eich bod yn defnyddio darparwyr eraill. SignalFx, PagerDuty neu Github. Efallai bod gennych weinydd Jenkins mewnol ar gyfer CI/CD neu ddangosfwrdd Grafana mewnol ar gyfer monitro. Dewisir Infra as Code am wahanol resymau, ac mae pob un yr un mor bwysig ar gyfer popeth sy'n ymwneud â meddalwedd.

Pan oeddwn i'n gweithio yn Twitch, fe wnaethom gyflymu gwasanaethau y tu mewn i systemau gwreiddio cymysg ac AWS Amazon. Gwnaethom gorddi a chefnogi llawer o ficrowasanaethau, gan gynyddu costau gweithredu. Aeth y trafodaethau rhywbeth fel hyn:

  • Я: Damn, mae hynny'n llawer o ystumiau i or-glocio un microwasanaeth. Bydd yn rhaid i mi ddefnyddio'r sothach hwn i greu cyfrif AWS (fe aethon ni i 2 gyfrif ymlaen meicrowasanaeth), yna yr un hon ar gyfer sefydlu rhybuddion, yr un hon ar gyfer ystorfa god, a'r un hon ar gyfer rhestr e-bost, ac yna'r un hon ...
  • Arwain: Gadewch i ni ei sgriptio ac yn iawn.
  • Я: Iawn, ond bydd y sgript ei hun yn newid. Bydd angen ffordd arnom i wirio bod yr holl gizmos Amazon adeiledig hyn yn gyfredol.
  • Arwain: Swnio'n dda. A byddwn yn ysgrifennu sgript ar gyfer hyn.
  • Я: Gwych! Ac mae'n debyg y bydd angen i'r sgript osod paramedrau o hyd. A fydd yn eu derbyn?
  • Arwain: Gadewch iddo gymryd lle mae'n mynd!
  • Я: Efallai y bydd y broses yn newid a bydd cydnawsedd yn ôl yn cael ei golli. Bydd angen rhyw fath o reolaeth fersiwn semantig.
  • Arwain: Syniad gwych!
  • Я: Gellir newid offer â llaw, y tu mewn i'r rhyngwyneb defnyddiwr. Bydd angen ffordd i wirio a thrwsio hyn.

…3 blynedd yn ddiweddarach:

  • Arwain: A chawsom terraform.

Moesol y stori yw: hyd yn oed os ydych chi pen dros sodlau ym mhopeth Amazon, rydych chi'n dal i ddefnyddio rhywbeth nad yw o AWS, ac mae gan y gwasanaethau hyn gyflwr sy'n defnyddio iaith ffurfweddu i gadw'r cyflwr hwnnw mewn cydamseriad.

Modiwlau CloudFormation lambda vs git terraform

lambda yw ateb CloudFormation i'r mater rhesymeg arferiad. Gyda lambda gallwch chi creu macros neu adnodd defnyddiwr. Mae'r dull hwn yn cyflwyno cymhlethdodau ychwanegol nad ydynt yn bresennol yn fersiwn semantig Terraform o fodiwlau git. I mi, y broblem fwyaf dybryd oedd rheoli caniatâd ar gyfer yr holl lambdas defnyddwyr hyn (a dyma ddwsinau o gyfrifon AWS). Problem bwysig arall oedd y broblem “beth ddaeth gyntaf, yr iâr neu'r wy?”: roedd yn ymwneud â chod lambda. Mae'r swyddogaeth hon ei hun yn seilwaith a chod, ac mae angen ei monitro a'i diweddaru ei hun. Yr hoelen olaf yn yr arch oedd yr anhawster i ddiweddaru newidiadau cod lambda yn semantig; roedd yn rhaid i ni hefyd sicrhau nad oedd y gweithredoedd pentwr heb orchymyn uniongyrchol yn newid rhwng rhediadau.

Rwy'n cofio unwaith roeddwn i eisiau creu lleoliad caneri ar gyfer amgylchedd Elastic Beanstalk gyda chydbwysedd llwyth clasurol. Y peth hawsaf i'w wneud fyddai gwneud ail ddefnydd ar gyfer yr EB wrth ymyl yr amgylchedd cynhyrchu, gan fynd â hyn gam ymhellach: cyfuno'r grŵp lleoli caneri sy'n graddio'n awtomatig â'r lleoliad LB yn yr amgylchedd cynhyrchu. Ac ers i Terraform ddefnyddio ASG beantalk fel casgliad, bydd hyn yn gofyn am 4 llinell ychwanegol o god yn Terraform. Pan ofynnais a oedd ateb tebyg yn CloudFormation, fe wnaethant fy mhwyntio at ystorfa git gyfan gyda phiblinell lleoli a phopeth, i gyd er mwyn rhywbeth y gallai 4 llinell wael o god Terraform ei wneud.

Mae'n canfod drifft yn well

Sicrhewch fod realiti yn cyfateb i ddisgwyliadau.

Canfod drifft yn weithrediadau pwerus iawn fel nodwedd cod oherwydd ei fod yn helpu i sicrhau bod realiti yn cyd-fynd â disgwyliadau. Mae ar gael gyda CloudFormation a Terraform. Ond wrth i'r pentwr cynhyrchu dyfu, fe gynhyrchodd chwilio am drifft yn CloudFormation fwy a mwy o ganfyddiadau ffug.

Gyda Terraform mae gennych fachau cylch bywyd llawer mwy datblygedig ar gyfer canfod drifft. Er enghraifft, rydych chi'n nodi'r gorchymyn anwybyddu_newidiadau yn uniongyrchol yn niffiniad tasg ECS ​​os ydych am anwybyddu newidiadau i ddiffiniad tasg benodol heb anwybyddu newidiadau i'ch defnydd ECS cyfan.

CDK a dyfodol CloudFormation

Mae CloudFormation yn anodd ei reoli ar raddfeydd traws-seilwaith mawr. Mae llawer o'r anawsterau hyn yn cael eu cydnabod ac mae angen pethau fel hyn ar yr offeryn aws-cdk, fframwaith ar gyfer diffinio seilwaith cwmwl mewn cod a'i redeg trwy AWS CloudFormation. Bydd yn ddiddorol gweld beth sydd gan y dyfodol i aws-cdk, ond bydd yn cael amser caled yn cystadlu â chryfderau eraill Terraform; i ddod â CloudFormation yn gyfredol, bydd angen newidiadau byd-eang.

Fel nad yw Terraform yn siomi

“Isadeiledd fel cod” yw hyn, ac nid “fel testun”.

Roedd fy argraff gyntaf o Terraform braidd yn ddrwg. Rwy'n meddwl nad oeddwn yn deall y dull gweithredu. Mae bron pob peiriannydd yn ei weld yn anwirfoddol fel fformat testun y mae angen ei drosi i'r seilwaith dymunol. PEIDIWCH EI WNEUD FFORDD HYN.

Mae gwirioneddau datblygiad meddalwedd da hefyd yn berthnasol i Terraform.

Rwyf wedi gweld llawer o arferion yn cael eu mabwysiadu i greu cod da yn cael ei anwybyddu yn Terraform. Rydych chi wedi astudio ers blynyddoedd i ddod yn rhaglennydd da. Peidiwch â rhoi'r gorau i'r profiad hwn dim ond oherwydd eich bod yn gweithio gyda Terraform. Mae gwirioneddau datblygiad meddalwedd da yn berthnasol i Terraform.

Sut na ellir dogfennu'r cod?

Rwyf wedi gweld staciau Terraform enfawr heb unrhyw ddogfennaeth o gwbl. Sut allwch chi ysgrifennu cod mewn tudalennau - heb unrhyw ddogfennaeth o gwbl? Ychwanegwch ddogfennaeth sy'n esbonio eich код Terraform (pwyslais ar y gair "cod"), pam mae'r adran hon mor bwysig, a beth rydych chi'n ei wneud.

Sut allwn ni ddefnyddio gwasanaethau a oedd unwaith yn un prif() swyddogaeth fawr?

Rwyf wedi gweld staciau Terraform cymhleth iawn yn cael eu cyflwyno fel un modiwl. Pam nad ydym yn defnyddio meddalwedd fel hyn? Pam rydyn ni'n rhannu swyddogaethau mawr yn rhai llai? Mae'r un atebion yn berthnasol i Terraform. Os yw'ch modiwl yn rhy fawr, mae angen i chi ei rannu'n fodiwlau llai.

Onid yw eich cwmni yn defnyddio llyfrgelloedd?

Rwyf wedi gweld sut y bu i beirianwyr, wrth greu prosiect newydd gan ddefnyddio Terraform, fynd ati'n wirion i gopïo darnau enfawr o brosiectau eraill i mewn i'w prosiectau eu hunain, ac yna wedi tincian gyda nhw nes iddo ddechrau gweithio. A fyddech chi'n gweithio fel hyn gyda chod “brwydro” yn eich cwmni? Nid dim ond llyfrgelloedd yr ydym yn eu defnyddio. Ydy, does dim rhaid i bopeth fod yn llyfrgell, ond ble ydyn ni heb lyfrgelloedd a rennir mewn egwyddor?!

Onid ydych chi'n defnyddio PEP8 neu gofmt?

Mae gan y rhan fwyaf o ieithoedd gynllun fformatio safonol, derbyniol. Yn Python dyma PEP8. Yn Go - gofmt. Mae gan Terraform ei rai ei hun: terraform fmt. Defnyddiwch ar iechyd!

A fyddwch chi'n defnyddio React heb wybod JavaScript?

Gall modiwlau terraform symleiddio rhyw ran o'r seilwaith cymhleth rydych chi'n ei greu, ond nid yw hyn yn golygu na allwch chi bincio ag ef o gwbl. Eisiau defnyddio Terraform yn gywir heb ddeall adnoddau? Yr ydych wedi eich tynghedu: bydd amser yn mynd heibio, ac ni fyddwch byth yn meistroli Terraform.

Ydych chi'n codio gyda singletons neu chwistrelliad dibyniaeth?

Mae chwistrelliad dibyniaeth yn arfer gorau cydnabyddedig ar gyfer datblygu meddalwedd ac mae'n cael ei ffafrio yn hytrach na rhai sengl. Sut mae hyn yn ddefnyddiol yn Terraform? Rwyf wedi gweld modiwlau Terraform sy'n dibynnu ar gyflwr anghysbell. Yn lle ysgrifennu modiwlau sy'n adfer cyflwr anghysbell, ysgrifennwch fodiwl sy'n cymryd paramedrau. Ac yna trosglwyddwch y paramedrau hyn i'r modiwl.

Ydy eich llyfrgelloedd yn gwneud deg peth yn dda neu un peth yn wych?

Llyfrgelloedd sy'n gweithio orau yw'r rhai sy'n canolbwyntio ar un dasg y maent yn ei gwneud yn dda iawn. Yn lle ysgrifennu modiwlau Terraform mawr sy'n ceisio gwneud popeth ar unwaith, adeiladwch rannau ohonyn nhw sy'n gwneud un peth yn dda. Ac yna eu cyfuno yn ôl yr angen.

Sut ydych chi'n gwneud newidiadau i lyfrgelloedd heb gydnawsedd yn ôl?

Mae angen i fodiwl Terraform cyffredin, fel llyfrgell reolaidd, gyfleu newidiadau i ddefnyddwyr rywsut heb fod yn gydnaws yn ôl. Mae'n annifyr pan fydd y newidiadau hyn yn digwydd mewn llyfrgelloedd, ac mae'r un mor annifyr pan wneir newidiadau nad ydynt yn gydnaws yn ôl mewn modiwlau Terraform. Argymhellir defnyddio tagiau git a semver wrth ddefnyddio modiwlau Terraform.

A yw eich gwasanaeth cynhyrchu yn rhedeg ar eich gliniadur neu mewn canolfan ddata?

Mae gan Hashicorp offer fel cwmwl terraform i redeg eich terraform. Mae'r gwasanaethau canoledig hyn yn ei gwneud hi'n hawdd rheoli, archwilio a chymeradwyo newidiadau i'r terraform.

Onid ydych chi'n ysgrifennu profion?

Mae peirianwyr yn cydnabod bod angen profi'r cod, ond maen nhw eu hunain yn aml yn anghofio am brofi wrth weithio gyda Terraform. Ar gyfer seilwaith, mae hyn yn llawn eiliadau peryglus. Fy nghyngor i yw “profi” neu “greu enghreifftiau” staciau gan ddefnyddio modiwlau y gellir eu defnyddio'n gywir i'w profi yn ystod CI/CD.

Teras a gwasanaethau micro

Mae bywyd a marwolaeth cwmnïau microwasanaethau yn dibynnu ar gyflymder, arloesedd ac amhariad ar gronfeydd gwaith microwasanaeth newydd.

Mae'r agwedd negyddol fwyaf cyffredin sy'n gysylltiedig â phensaernïaeth microwasanaeth, ac na ellir ei dileu, yn gysylltiedig â'r gwaith, nid y cod. Os ydych chi'n meddwl am Terraform fel ffordd yn unig o awtomeiddio ochr seilwaith pensaernïaeth microwasanaethau yn unig, yna rydych chi'n colli allan ar wir fuddion y system. Nawr mae eisoes mae popeth fel cod.

Ffynhonnell: hab.com

Ychwanegu sylw