Chanje soti nan Terraform nan CloudFormation - ak regrèt li

Reprezante enfrastrikti kòm kòd nan yon fòma tèks repete se yon senp pi bon pratik pou sistèm ki pa mande pou jwe sourit. Pratik sa a gen yon non - Enfrastrikti kòm Kòd, e jiskaprezan gen de zouti popilè pou aplike li, espesyalman nan AWS: Terraform и CloudFormation.

Chanje soti nan Terraform nan CloudFormation - ak regrèt li
Konpare eksperyans ak Terraform ak CloudFormation

Anvan yo vin nan Kontraksyon (li Amazon Jr.) Mwen travay nan yon sèl demaraj epi itilize Terraform pou twa ane. Nan nouvo plas la, mwen menm mwen te itilize Terraform ak tout fòs mwen, ak Lè sa a, konpayi an pouse tranzisyon an nan tout bagay yon Amazon, ki gen ladan CloudFormation. Mwen te devlope ak dilijans meyè pratik pou tou de, epi mwen te itilize tou de zouti nan workflows trè konplèks, nan tout òganizasyon an. Apre sa, apre yo fin byen peze enplikasyon yo nan migrasyon soti nan Terraform nan CloudFormation, mwen te vin konvenki ke Terraform te pwobableman chwa ki pi bon pou òganizasyon an.

Sou entènèt jwèt Terraform terib

Lojisyèl beta

Terraform pa menm lage vèsyon 1.0 ankò, ki se yon bon rezon pou pa sèvi ak li. Li te chanje anpil depi mwen te premye eseye li tèt mwen, men lè sa a terraform apply souvan kraze apre plizyè mizajou oswa tou senpleman apre yon koup de ane nan itilize. Mwen ta di ke "tout bagay diferan kounye a," men... se sa tout moun sanble di, non? Gen chanjman ki enkonpatib ak vèsyon anvan yo, byenke yo apwopriye, e li menm santi tankou sentaks la ak abstraksyon nan magazen resous yo kounye a se sa nou bezwen. Enstriman an sanble vrèman vinn pi bon, men... :-0

Nan lòt men an, AWS te fè yon bon travay kenbe konpatibilite bak. Sa a se pwobableman paske sèvis yo yo souvan byen teste nan òganizasyon an epi sèlman lè sa a, chanje non, yo pibliye. Se konsa, "yo te eseye di" se yon egzajere. Kenbe konpatibilite bak ak API pou yon sistèm ki varye ak konplèks tankou AWS se ekstrèmman difisil. Nenpòt moun ki te oblije kenbe API piblik ke yo itilize kòm lajman ke yo ta dwe konprann ki jan difisil li se fè sa pou anpil ane. Men, konpòtman CloudFormation, nan memwa mwen, pa janm chanje pandan ane yo.

Rankontre janm la... se yon bal

Osi lwen ke mwen konnen, efase resous la andeyò Pile CloudFormation ki soti nan pil CF ou a pa posib. Menm bagay la tou vre ak Terraform. Li pèmèt ou enpòte resous ki egziste deja nan chemine ou a. Yo ka di fonksyon an se etonan, men ak gwo pouvwa vini gwo responsablite. Ou jis bezwen ajoute yon resous nan chemine a, epi pandan w ap travay ak chemine ou a, ou pa ka efase oswa chanje resous sa a. Yon jou li te tounen tounen yon dezè. Yon jou sou Twitch, yon moun aksidantèlman enpòte gwoup sekirite AWS yon lòt moun nan pwòp pile Terraform pa yo pandan y ap pa fè okenn mal. Mwen te antre nan plizyè kòmandman ak... gwoup sekirite a (ansanm ak trafik fèk ap rantre) te disparèt.

Terraform Great

Rekiperasyon nan eta enkonplè

Pafwa CloudFormation echwe pou konplètman tranzisyon soti nan yon eta nan yon lòt. An menm tan an, li pral eseye retounen nan yon sèl anvan an. Li se yon pitye ke sa a se pa toujou posib. Li ka byen pè pou debogaj sa ki te pase pita - ou pa janm konnen si CloudFormation pral kontan ke yo te rache li - menm jis pou ranje li. Kit ou pa pral posib pou retounen nan eta anvan an, li reyèlman pa konnen ki jan yo detèmine epi, pa default, pandye pou èdtan ap tann pou yon mirak.

Terraform, nan lòt men an, gen tandans retabli de tranzisyon echwe pi plis grasyeuz epi li ofri zouti debogaj avanse.

Chanjman pi klè nan eta dokiman an

“Oke, balanse chaj, w ap chanje. Men kouman?"

—enjenyè enkyete, pare pou peze bouton "aksepte".

Pafwa mwen bezwen fè kèk manipilasyon ak balans chaj la nan pile CloudFormation, tankou ajoute yon nimewo pò oswa chanje yon gwoup sekirite. ClouFormation montre chanjman yo mal. Mwen menm, sou zegwi, mwen tcheke fichye yaml a dis fwa pou m asire w ke mwen pa efase anyen ki nesesè epi mwen pa ajoute anyen ki pa nesesè.

Terraform se pi plis transparan nan sans sa a. Pafwa li menm twò transparan (li: anmèdan). Erezman, dènye vèsyon an gen ladann amelyore ekspozisyon chanjman pou ou kapab kounye a wè egzakteman sa k ap chanje.

Fleksibilite

Ekri lojisyèl bak.

Pou mete li briskeman, karakteristik ki pi enpòtan nan lojisyèl ki dire lontan se kapasite nan adapte yo ak chanjman. Ekri nenpòt lojisyèl bak. Mwen pi souvan fè erè nan pran yon sèvis "senp", ak Lè sa a, kòmanse ankouraje tout bagay nan yon sèl CloudFormation oswa Terraform pile. Ak nan kou, mwa pita li te revele ke mwen te konprann tout bagay mal, ak sèvis la te aktyèlman pa senp! Epi, koulye a mwen bezwen yon jan kanmenm kraze yon gwo pil an ti eleman. Lè w ap travay ak CloudFormation, sa ka fèt sèlman lè w rekree pile ki egziste deja a, epi mwen pa fè sa ak baz done mwen yo. Terraform, nan lòt men an, te fè li posib yo diseke chemine a ak kraze l 'an plis konprann pi piti pati.

Modil nan git

Pataje kòd Terraform atravè plizyè pil pi fasil pase pataje kòd CloudFormation. Avèk Terraform, ou ka mete kòd ou a nan yon repozitwa git epi jwenn aksè nan li lè l sèvi avèk kontwòl vèsyon semantik. Nenpòt moun ki gen aksè a depo sa a ka reitilize kòd pataje a. Ekivalan CloudFormation a se S3, men li pa gen menm avantaj yo, e pa gen okenn rezon ki fè nou ta dwe abandone git an favè S3 ditou.

Òganizasyon an te grandi epi kapasite pou pataje pil komen te rive nan yon nivo kritik. Terraform fè sa tout fasil ak natirèl, tandiske CloudFormation ap fè ou sote nan sèrkl anvan ou ka jwenn yon bagay tankou sa a ap travay.

Operasyon kòm kòd

"Ann ekri li epi oke."

—yon enjenyè 3 zan anvan envante bisiklèt Terraform la.

Lè li rive devlopman lojisyèl, Go oswa yon pwogram Java se pa sèlman kòd.

Chanje soti nan Terraform nan CloudFormation - ak regrèt li
Kòd kòm Kòd

Genyen tou enfrastrikti sou ki li travay.

Chanje soti nan Terraform nan CloudFormation - ak regrèt li
Enfrastrikti kòm Kòd

Men, kote li soti? Ki jan yo kontwole li? Ki kote kòd ou a rete? Èske devlopè yo bezwen pèmisyon aksè?

Chanje soti nan Terraform nan CloudFormation - ak regrèt li
Operasyon kòm Kòd

Pou ou kab vin yon pwomotè lojisyèl pa sèlman vle di ekri kòd.

AWS se pa youn nan sèlman: pwobableman ou itilize lòt founisè. SignalFx, PagerDuty oswa Github. Petèt ou gen yon sèvè Jenkins entèn pou CI/CD oswa yon tablodbò Grafana entèn pou siveyans. Se Infra kòm Kòd chwazi pou rezon diferan, epi chak se egalman enpòtan pou tout bagay ki gen rapò ak lojisyèl.

Lè m 'te travay nan Twitch, nou akselere sèvis andedan Amazon yo melanje entegre ak sistèm AWS. Nou te kreye ak sipòte anpil mikwosèvis, sa ki te ogmante depans operasyonèl yo. Diskisyon yo te ale yon bagay tankou sa a:

  • Я: Damn, sa se yon anpil nan jès overclock yon sèl mikwosèvis. Mwen pral oblije sèvi ak fatra sa a pou kreye yon kont AWS (nou te ale nan 2 kont sou mikwosèvis), Lè sa a, yon sèl sa a pou mete alèt, yon sèl sa a pou yon depo kòd, ak yon sèl sa a pou yon lis imèl, ak yon sèl sa a ...
  • Plon: Ann script li ak oke.
  • Я: Oke, men script nan tèt li pral chanje. Nou pral bezwen yon fason yo tcheke ke tout sa yo bati-an Amazon gizmos yo ajou.
  • Plon: Son bon. Epi nou pral ekri yon script pou sa a.
  • Я: Gwo! Ak script la ap pwobableman toujou bezwen mete paramèt. Èske l ap aksepte yo?
  • Plon: Kite l pran kote l ale!
  • Я: Pwosesis la ka chanje epi konpatibilite bak pral pèdi. Yo pral mande kèk kalite kontwòl vèsyon semantik.
  • Plon: Bèl lide!
  • Я: Zouti yo ka chanje manyèlman, andedan koòdone itilizatè a. Nou pral bezwen yon fason yo tcheke ak ranje sa a.

…3 ane pita:

  • Plon: Epi nou te resevwa terraform.

Moral istwa a se: menm si ou tèt sou pinga'w nan tout bagay Amazon, w ap toujou itilize yon bagay ki pa soti nan AWS, epi sèvis sa yo gen yon eta ki sèvi ak yon lang konfigirasyon pou kenbe eta sa a nan senkronize.

CloudFormation lambda vs git modil terraform

lambda se solisyon CloudFormation pou pwoblèm lojik koutim lan. Avèk lambda ou kapab kreye makro oswa resous itilizatè. Apwòch sa a prezante konpleksite adisyonèl ki pa prezan nan vèsyon semantik Terraform nan modil git. Pou mwen, pwoblèm ki pi ijan an se jere otorizasyon pou tout lambda itilizatè sa yo (epi sa yo se plizyè douzèn kont AWS). Yon lòt pwoblèm enpòtan se te "sa ki te vini an premye, poul la oswa ze a": li te gen rapò ak kòd lambda. Fonksyon sa a li menm se enfrastrikti ak kòd, epi li menm li bezwen siveyans ak mizajou. Klou final la nan sèkèy la te difikilte pou semantik mete ajou chanjman kòd lambda; nou menm tou nou te dwe asire w ke aksyon yo chemine san yo pa yon lòd dirèk pa t 'chanje ant kouri.

Mwen sonje yon fwa mwen te vle kreye yon deplwaman Canary pou anviwònman an Elastic Beanstalk ak yon balanse chaj klasik. Bagay ki pi fasil pou fè ta dwe fè yon dezyèm deplwaman pou EB akote anviwònman pwodiksyon an, pran li yon etap pi lwen: konbine gwoup deplwaman oto-echèl Canary ak deplwaman LB nan anviwònman pwodiksyon an. E depi Terraform itilize ASG beantalk kòm yon konklizyon, sa pral mande pou 4 liy siplemantè nan kòd nan Terraform. Lè mwen te mande si te gen yon solisyon konparab nan CloudFormation, yo montre m 'nan yon depo git antye ak yon tiyo deplwaman ak tout bagay, tout pou dedomajman pou yon bagay ki pòv 4 liy nan kòd Terraform te kapab fè.

Li detekte drift pi byen

Asire w ke reyalite matche ak atant.

Deteksyon drift se yon operasyon trè pwisan kòm karakteristik kòd paske li ede asire ke reyalite matche ak atant. Li disponib ak tou de CloudFormation ak Terraform. Men, kòm pil pwodiksyon an te grandi, rechèch pou drift nan CloudFormation pwodui deteksyon pi plis ak plis fo.

Avèk Terraform ou gen kwòk sik lavi ki pi avanse pou deteksyon drift. Pou egzanp, ou antre nan lòd la inyore_chanjman dirèkteman nan definisyon travay ECS la si ou vle inyore chanjman nan yon definisyon travay espesifik san yo pa inyore chanjman nan tout deplwaman ECS ou a.

CDK ak avni CloudFormation

CloudFormation difisil pou jere nan gwo echèl kwa-enfrastrikti. Anpil nan difikilte sa yo rekonèt ak zouti a bezwen bagay sa yo tankou aws-cdk, yon kad pou defini enfrastrikti nwaj nan kòd ak kouri li atravè AWS CloudFormation. Li pral enteresan yo wè ki sa lavni an kenbe pou aws-cdk, men li pral gen yon tan difisil konpetisyon ak lòt fòs Terraform a; pou mete CloudFormation ajou, chanjman mondyal yo pral nesesè.

Pou ke Terraform pa desevwa

Sa a se "enfrastrikti kòm yon kòd", epi li pa "kòm yon tèks".

Premye enpresyon mwen sou Terraform te pito move. Mwen panse ke mwen jis pa t 'konprann apwòch la. Prèske tout enjenyè envolontèman wè li kòm yon fòma tèks ki bezwen konvèti nan enfrastrikti vle a. PA FÈ LI KONSA.

Truisms yo nan devlopman lojisyèl bon tou aplike nan Terraform.

Mwen te wè anpil pratik yo te adopte pou kreye bon kòd ke yo te inyore nan Terraform. Ou te etidye pou ane yo vin yon pwogramè bon. Pa abandone eksperyans sa a jis paske w ap travay ak Terraform. Truisms yo nan devlopman lojisyèl bon aplike nan Terraform.

Ki jan yo ka pa dokimante kòd la?

Mwen te wè gwo pil Terraform ki pa gen okenn dokiman. Ki jan ou ka ekri kòd nan paj - ak absoliman okenn dokiman? Ajoute dokiman ki eksplike ou kòd Terraform (anfaz sou mo "kòd la"), poukisa seksyon sa a enpòtan anpil, ak sa ou fè.

Ki jan nou ka deplwaye sèvis ki te yon fwa yon gwo fonksyon prensipal ()?

Mwen te wè pile Terraform trè konplèks prezante kòm yon modil sèl. Poukisa nou pa deplwaye lojisyèl konsa? Poukisa nou divize gwo fonksyon an pi piti? Menm repons yo aplike pou Terraform. Si modil ou a twò gwo, ou bezwen kraze li an pi piti modil.

Èske konpayi ou pa sèvi ak bibliyotèk?

Mwen te wè ki jan enjenyè, k ap vire yon nouvo pwojè lè l sèvi avèk Terraform, estipid kopye-kole gwo moso soti nan lòt pwojè nan pwòp yo, ak Lè sa a, tinkered ak yo jiskaske li te kòmanse travay. Èske ou ta travay konsa ak kòd "konba" nan konpayi ou a? Nou pa sèlman sèvi ak bibliyotèk. Wi, pa tout bagay dwe yon bibliyotèk, men kote nou ye san bibliyotèk pataje an prensip?!

Èske w pa itilize PEP8 oswa gofmt?

Pifò lang yo gen yon estanda fòma ki aksepte. Nan Python sa a se PEP8. Nan Go - gofmt. Terraform gen pwòp li yo: terraform fmt. Jwi li pou sante ou!

Èske w ap itilize React san w pa konnen JavaScript?

Modil Terraform ka senplifye kèk pati nan enfrastrikti konplèks ou kreye a, men sa pa vle di ke ou pa ka brikol ak li ditou. Vle sèvi ak Terraform kòrèkteman san yo pa konprann resous yo? Ou kondane: tan ap pase, epi ou pa janm pral metrize Terraform.

Èske w kode ak singletons oswa piki depandans?

Piki depandans se yon pi bon pratik rekonèt pou devlopman lojisyèl epi li pi pito pase singletons. Ki jan sa itil nan Terraform? Mwen te wè modil Terraform ki depann sou eta aleka. Olye pou yo ekri modil ki rekipere eta aleka, ekri yon modil ki pran paramèt. Lè sa a, pase paramèt sa yo nan modil la.

Èske bibliyotèk ou yo fè dis bagay byen oswa yon sèl bagay gwo?

Bibliyotèk ki travay pi byen se moun ki konsantre sou yon travay ke yo fè trè byen. Olye pou w ekri gwo modil Terraform ki eseye fè tout bagay an menm tan, bati pati nan yo ki fè yon sèl bagay byen. Lè sa a, konbine yo jan sa nesesè.

Ki jan ou fè chanjman nan bibliyotèk san konpatibilite bak?

Yon modil Terraform komen, tankou yon bibliyotèk regilye, bezwen yon jan kanmenm kominike chanjman nan itilizatè yo san yo pa konpatib bak. Li anmèdan lè chanjman sa yo rive nan bibliyotèk, epi li se menm jan anmèdan lè chanjman ki pa konpatib ak bak yo fèt nan modil Terraform. Li rekòmande pou itilize git tags ak semver lè w ap itilize modil Terraform.

Èske sèvis pwodiksyon ou ap kouri sou laptop ou oswa nan yon sant done?

Hashicorp gen zouti tankou nwaj terraform pou kouri terraform ou. Sèvis santralize sa yo fè li fasil pou jere, odit, ak apwouve chanjman terraform.

Ou pa ekri tès yo?

Enjenyè rekonèt ke kòd la bezwen teste, men yo menm yo souvan bliye sou tès yo lè yo travay ak Terraform. Pou enfrastrikti, sa a chaje ak moman trèt. Konsèy mwen an se "teste" oswa "kreye egzanp" pil lè l sèvi avèk modil ki ka deplwaye kòrèkteman pou tès pandan CI/CD.

Terraform ak microservices

Lavi ak lanmò konpayi mikwosèvis yo depann de vitès, inovasyon, ak dezòd nouvo pil travay mikwosèvis yo.

Aspè negatif ki pi komen ki asosye ak achitekti mikwosèvis, epi ki pa ka elimine, gen rapò ak travay la, pa kòd la. Si ou panse de Terraform kòm jis yon fason pou otomatize sèlman bò enfrastrikti nan yon achitekti mikwosèvis, Lè sa a, w ap manke soti nan benefis yo vre nan sistèm nan. Kounye a li deja tout bagay se tankou kòd.

Sous: www.habr.com

Add nouvo kòmantè