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 -
Konpare eksperyans ak Terraform ak CloudFormation
Anvan yo vin nan
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.
Kòd kòm Kòd
Genyen tou enfrastrikti sou ki li travay.
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è?
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
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
Li detekte drift pi byen
Asire w ke reyalite matche ak atant.
Avèk Terraform ou gen kwòk sik lavi ki pi avanse pou deteksyon drift. Pou egzanp, ou antre nan lòd la
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
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,
È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
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
Sous: www.habr.com