Njësia 9 / 11

Gjenerimi i skriptit dhe automatizimit: Bash, Python dhe PowerShell

Fitimet:

  • Aftësia për të kuptuar pikat e forta të Bash, Python dhe PowerShell dhe që inteligjenca artificiale të prodhojë drafte të sigurta dhe të mbrojtura të skenarit
  • Aftësia për të shtuar parmakë në skriptet si set -euo pipefail, kontrollimi i variablave bosh, modaliteti i funksionimit të thatë dhe regjistrimi
  • Aftësia për të lexuar komanda destruktive dhe për t'i provuar ato në një mjedis të izoluar dhe fillimisht me drejtim të thatë, si dhe për të zbatuar disiplinën për të mos futur sekretin në skenar.

Fryma e DevOps përmblidhet në një fjali: "Automatojeni punën që bëni dy herë". Çdo detyrë e përsëritur që kryhet me dorë - pastrimi i regjistrave, marrja e kopjeve rezervë, kontrolli i shëndetit të serverit, përpunimi i skedarëve në grup - kërkon kohë dhe përfundimisht korruptohet nga gabimi njerëzor. Skriptet marrin përsipër këto punë: programe të vogla që ekzekutojnë një sërë komandash në mënyrë sekuenciale, të besueshme dhe të përsëritshme. Profesionisti i DevOps përdor shpesh tre gjuhë: Bash (për skriptet e guaskës Linux/Unix), Python (për logjikën komplekse, thirrjet API, manipulimin e të dhënave) dhe PowerShell (për Windows dhe menaxhimin e cloud).

AI është ndoshta vendi ku ofron vlerën më praktike në gjenerimin e skriptit: prodhimi i një drafti të punës nga një përshkrim me një fjali, zgjidhja e një gabimi misterioz, përkthimi i një skenari në një gjuhë tjetër. Por një skrip është i rrezikshëm kur ekzekutohet verbërisht - një rm i gabuar, një Remove-Item -Recurse do të fshijë skedarët në mënyrë të pakthyeshme. Kjo është arsyeja pse motoja e kësaj njësie është: Lëreni AI të shkruajë skenarin, ju lexoni atë, provojeni fillimisht në modalitetin e sigurt dhe më pas ekzekutoni atë.

Cilën gjuhë të zgjidhni dhe kur? Një rregull i përafërt: nëse puna konsiston në ekzekutimin e disa komandave të sistemit në një rresht (kopjoni skedarin, rinisni shërbimin, merrni arkivin) Bash është zgjidhja më e natyrshme sepse Linux është i kudondodhur në serverë. Nëse puna përfshin logjikën e vendimit, ciklin, transformimin e të dhënave, kërkimin e një API ose përpunimin JSON - domethënë, logjikën që tejkalon 20 rreshta - Python dallohet për lexueshmërinë e tij dhe bibliotekat e pasura; Një skrip kompleks Bash shpejt bëhet i pakuptueshëm, ndërsa Python mbetet i lehtë për t'u mirëmbajtur. Nëse puna përfshin menaxhimin e serverëve të Windows, Active Directory ose Azure, PowerShell është mjedisi natyror sepse natyra e tij e orientuar nga objekti integrohet thellë me këto platforma. Specifikimi i gjuhës që keni zgjedhur dhe pse kur kërkoni një skrip në AI, siguron që dalja të jetë e përshtatshme dhe idiomatike për mjedisin tuaj.

Hap pas hapi: gjenerim i sigurt i skriptit

  1. Përshkruani detyrën dhe mjedisin. Çfarë do të bëjë, cili OS/predhë, çfarë kufizimesh?
  2. Kërkoni kangjella sigurie. Në bash, vendosni -euo pipefail (ndalim në gabim, ndalim në ndryshore të papërcaktuar), kërkesë konfirmimi për operacione të rrezikshme, lëvizni së pari në vend të fshirjes.
  3. Kërko modalitetin e funksionimit të thatë. Lëreni skenarin të shkruajë çfarë të bëjë me --dry-run, por mos e bëni.
  4. Lexoni dhe kuptoni. Verifikoni se çfarë bën çdo rresht, veçanërisht operacionet e fshirjes/lëvizjes/rrjetit.
  5. Provojeni në një mjedis të izoluar. Në dosjen e provës, ekzekutoni atë me të dhënat e mostrës.
  6. Shto në prerje. Lëreni skriptin të regjistrojë atë që bën në mënyrë që të mund të shihet më vonë.

Bazat e skriptimit të sigurt

Një skenar prodhimi duhet të përfshijë këto parmakë:

  • Ndalimi në rast gabimi. Bash: set -euo pipefail. PowerShell: $ErrorActionPreference = 'Ndalo'. Nëse një hap dështon, hapi tjetër nuk duhet të funksionojë.
  • Idempotenca (përsëritshmëria). Nëse skripti ekzekutohet dy herë, ai nuk duhet të dëmtojë dyfish; Logjika "Nëse e keni tashmë, kalojeni".
  • Miratimi dhe funksionimi i thatë. Për operacionet shkatërruese "je i sigurt?" ose flamuri --dry-run.
  • Vleresimi i hyrjes. A janë parametrat siç priten? Një variabël bosh mund ta kthejë rm -rf "$DIR"/ në rm -rf / fatkeqësi.
  • Prerjet. Regjistroni se çfarë është bërë dhe kur.
Këshillë: Gabimi më i rrezikshëm në Bash është fshirja me një variabël bosh. rm -rf "$DIR" përpiqet të fshijë direktoriumin rrënjë nëse $DIR është bosh. vendos -u (ndalo në variabël të papërcaktuar) dhe kontrollimi i [ -n "$DIR" ] përpara fshirjes është një shpëtim. Kërkoni në mënyrë të qartë këto mbrojtje kur kërkoni skriptet nga AI.

Siguria: komanda sekrete dhe shkatërruese

Dy rreziqe të mëdha:

  1. Përfshirja e Sekretit në skenar. Fjalëkalimi nuk duhet të jetë tekst i thjeshtë brenda skriptit token; Duhet të lexohet nga ndryshorja e mjedisit ose kasaforta. Skriptet shkojnë në Git; sekreti i varrosur është rrjedhje e përhershme.
  2. Komandat shkatërruese. rm -rf, Remove-Item -Recurse -Force, DOP TABLE, terraform shkatërro - kur i shihni këto në një skenar, ndaloni dhe mendoni dy herë. Asnjëherë mos provoni komandën shkatërruese të krijuar nga AI në prod fillimisht.
Kujdes: Kur i thoni AI të "shkruajë një skript që pastron këta skedarë", lexoni me kujdes shtrirjen e komandës find ... -delete ose rm që prodhon. Një shkreptim (*) ose rruga e gabuar do të fshijë më shumë se sa dëshironi të fshini. Gjithmonë ekzekutoni fillimisht skriptin me modalitetin "lista për të fshirë" në vend që ta fshini.

Krahasimi i tri gjuhëve

kriteri

bash

Python

PowerShell

Aty ku është më mirë

Shell Linux, zinxhir komandash

Logjikë komplekse, API, të dhëna

Menaxhimi i resë së Windows

Kurba e të mësuarit

E mesme (e bllokuar)

lehtë

e mesme

Trajtimi i gabimeve

set -euo pipefail

provoni/përveç

provo/kap, -ErrorAction

transportueshmëri

Unix/Linux/mac

kudo

Ndër-platformë (PS 7+)

kur

Shkurt, sistemi funksionon

Logjika më e gjatë se 20 rreshta

Windows/AD/Azure

tre mini kuti

Rasti 1 - 2 orë zanat në 5 minuta. Një inxhinier po kalonte 2 orë duke mbledhur dhe arkivuar regjistrat nga 40 serverë çdo javë. Ai kërkoi që AI të përshkruante detyrën dhe të vendoste -euo pipefail + mbrojtje të thatë dhe të gjeneronte një skript Bash. Vërtetoi fillimisht skriptin me funksion të thatë, më pas e lidhi me detyrën e planifikuar (cron). Puna javore reduktohet në 5 minuta dhe eliminohet gabimi njerëzor.

Rasti 2 - katastrofa me variabël null u shmang. Kishte rm -rf "$TARGET"/* në skriptin e pastrimit të prodhuar nga AI, por nëse TARGET nuk ishte caktuar diku, ai mbetej bosh. Këtë e ka kuptuar gjatë studimeve për inxhinier; set -u dhe [ -n "$TARGET" ] || shtoi kontrollin e daljes 1. Gjatë testimit, ndryshorja mbeti e pavlefshme dhe skripti u ndal në mënyrë të sigurt dhe jo në mënyrë katastrofike.

Rasti 3 - kapja e tokenit të ngulitur. Për lehtësi, AI ka shtuar një linjë TOKEN = "ghp_realtoken" në një skript Python që kërkon një API (si shembull). Inxhinieri e hoqi këtë dhe e ndryshoi në lexim nga ndryshorja e mjedisit me os.environ["TOKEN"] dhe anuloi dhe rinovoi tokenin. Nëse skenari shkon në Git, token do të ishte publik.

Katër shabllone të kopjueshëm

1) Skenari i sigurt Bash:

Shkruani një skenar Bash: [DETYRË]. Rregullat e detyrueshme: - `vendos -euo pipefail` në fillim.- Kontrollo që ndryshorja të mos jetë bosh kudo që fshihet/lëviz. Lexoni nga ndryshorja e mjedisit. - Printoni regjistrin informativ në çdo hap. Komentoni skenarin dhe shënoni rreshtin më të rrezikshëm.

2) Përshkrimi/kontrolli i skriptit:

Përshkruani skriptin e mëposhtëm rresht pas rreshti dhe kontrolloni për sigurinë: sekret i integruar, komanda destruktive (rm/Remove-Item/DROP), hyrje e pavlefshme, mungesë e trajtimit të gabimeve? Shkruani çdo rrezik sipas rëndësisë dhe korrigjimit. Skript: [CODE]

3) Përkthimi i gjuhës:

Përkthejeni atë skript [GJUHA BURIMORE] në [GJUHA E KUJDESIT]. Mbajeni sjelljen fjalë për fjalë, përdorni trajtimin idiomatik të gabimeve të gjuhës së synuar, zhvendosni çdo sekret të integruar në një variabël mjedisi. Shënoni pikat që mund të sillen ndryshe. Skript: [CODE]

4) Detyra e planifikuar (kron/detyrë e planifikuar):

Përdorni këtë skript [FREKUENCA: p.sh. Shkruani një përkufizim orari ([cron / systemd timer / Windows Task Scheduler]) që do të funksionojë [në orën 02:00 çdo natë]. Shto si të më paralajmërosh për dështimin (kodi i hyrjes/daljes/njoftimi) dhe si të parandalosh mbivendosjen.

Prompt i dobët / Prompt i fortë

Dobët: "Shkruani një skript që fshin skedarët e vjetër."

Rezultati: një skrip rm pa hapësirë, i pambrojtur, i thatë; Nëse funksionon në dosjen e gabuar, do të fshihet në mënyrë të pakthyeshme.

Strong: "Shkruani një skript bash për të fshirë skedarët .log më të vjetër se 30 ditë nën /var/log/app. Përdorni set -euo pipefail, ndaloni nëse drejtoria e synuar është bosh, listoni çfarë të fshini me --dry-run first, regjistroni çdo transaksion, mos e futni sekretin. Shënoni linjën më të rrezikshme."

Dallimi: pretendimi i dytë jep shtrirjen e plotë, parmakët e sigurisë dhe pritjet për vrapim të thatë; Prodhimi mund të funksionojë në mënyrë të sigurt.

Gabimet e zakonshme

  • Ekzekutimi i skenarit pa e lexuar atë. Fshirja/lëvizja e rreshtave në veçanti çon në katastrofë.
  • Nuk kontrollohet për variabla boshe. Fatkeqësi klasike e fshirjes së direktoriumit rrënjë me rm -rf "$X"/.
  • kapërce "set -euo pipefail" / "-ErrorAction Stop". Një hap shkrep, skenari vazhdon verbërisht.
  • Përfshirja e Sekretit në skenar. Rrjedhje e vazhdueshme në Git.
  • Procesi shkatërrues pa drejtim të thatë. Së pari "më trego çfarë të bëj", pastaj bëje.
  • Duke bërë provën e parë në prod. Vrapimi pa një mjedis të izoluar testimi.

Në përmbledhje

DevOps është arti i automatizimit; Puna e përsëritur i delegohet skripteve Bash, Python dhe PowerShell. Inteligjenca artificiale është shumë e dobishme në hartimin e skripteve, korrigjimin e gabimeve dhe përkthimin e gjuhëve - por një skrip i sigurt duhet të përfshijë mbrojtëse gabimesh si set -euo pipefail, kontrollin e ndryshoreve null, modalitetin e ekzekutimit të thatë, fshehtësinë e integruar dhe regjistrimin. Është përgjegjësia juaj të lexoni dhe testoni çdo skript, veçanërisht ato që përmbajnë komanda destruktive, në një mjedis të izoluar dhe fillimisht në ekzekutim të thatë.

Detyra e aplikimit

Zgjidhni një detyrë të përsëritur (arkivimi i regjistrave, rezervimi, pastrimi). (1) Lëreni AI të gjenerojë një skript të mbrojtur me shabllonin "Script Secure Bash". (2) Kontrolloni të njëjtin skript për siguri si shablloni "Përshkrimi/auditimi i skriptit" dhe gjeni rreshtin më të rrezikshëm që ka shënuar AI. (3) Verifikoni sjelljen e tij duke ekzekutuar skriptin me skedarë mostra në një dosje testimi, së pari me --dry-run.

listë kontrolli

  • [ ] Unë shkrova detyrën që nuk dua, OS/predha dhe parmakët e sigurisë.
  • [ ] Skripti ka gabim në ndalim si set -euo pipefail / -ErrorAction Stop.
  • [ ] Shtova variabël bosh dhe kontroll të hyrjes përpara fshirjes/lëvizjes.
  • [ ] Ekziston një mekanizëm --dry-run/konfirmimi për operacionet shkatërruese.
  • [ ] Nuk ka asnjë sekret të ngulitur në skenar; vlerat vijnë nga ndryshorja/rasti mjedisor.
  • [ ] Unë bëra provën e parë në një mjedis testimi të izoluar me drejtim të thatë.