Vienetas 9 / 11

Scenarijaus ir automatizavimo generavimas: Bash, Python ir PowerShell

Pelnas:

  • Gebėjimas suprasti „Bash“, „Python“ ir „PowerShell“ pranašumus ir dirbtinis intelektas sukurti saugius, apsaugotus scenarijaus juodraščius
  • Galimybė pridėti apsauginius turėklus prie scenarijų, tokių kaip set -euo pipefail, tuščio kintamojo tikrinimas, sauso veikimo režimas ir registravimas
  • Gebėjimas skaityti destruktyvias komandas ir išbandyti jas izoliuotoje aplinkoje ir pirmiausia su sausuoju paleidimu bei taikyti discipliną neįterpti paslapties į scenarijų.

„DevOps“ dvasia apibendrinta viename sakinyje: „Automatizuokite darbą, kurį atliekate du kartus“. Bet kuri pasikartojanti užduotis, atliekama rankiniu būdu – žurnalo išvalymas, atsarginės kopijos darymas, serverio būklės patikrinimas, paketinių failų apdorojimas – užtrunka ir galiausiai sugadinama dėl žmogiškos klaidos. Skriptai perima šias užduotis: mažos programos, kurios nuosekliai, patikimai ir pakartojamai vykdo komandų seriją. „DevOps“ profesionalas dažnai naudoja tris kalbas: „Bash“ („Linux“ / „Unix“ apvalkalo scenarijus), „Python“ (sudėtingai logikai, API iškvietimui, duomenų apdorojimui) ir „PowerShell“ („Windows“ ir debesų valdymui).

AI galbūt yra ta vieta, kur ji siūlo didžiausią praktinę vertę kuriant scenarijus: sukuria darbinį juodraštį iš vieno sakinio aprašymo, išsprendžia paslaptingą klaidą, išverčia scenarijų į kitą kalbą. Tačiau scenarijus yra pavojingas, kai jis paleistas aklai – neteisingas RM, Pašalinti elementą - Recurse failus ištrins negrįžtamai. Štai kodėl šio įrenginio šūkis yra: Leiskite dirbtiniam intelektui parašyti scenarijų, jūs jį perskaitykite, pirmiausia pabandykite saugiuoju režimu, tada paleiskite.

Kokią kalbą pasirinkti ir kada? Apytikslė taisyklė: jei užduotį sudaro kelių sistemos komandų vykdymas iš eilės (failo kopijavimas, paslaugos paleidimas iš naujo, archyvo gavimas), „Bash“ yra natūraliausias pasirinkimas, nes „Linux“ yra visur serveriuose. Jei darbas susijęs su sprendimų logika, kilpomis, duomenų transformavimu, API užklausa arba JSON apdorojimu, ty logika, viršijančia 20 eilučių, Python išsiskiria skaitomumu ir turtingomis bibliotekomis; Sudėtingas „Bash“ scenarijus greitai tampa nesuprantamas, o „Python“ išlieka lengva prižiūrėti. Jei darbas susijęs su „Windows“ serverių, „Active Directory“ ar „Azure“ valdymu, „PowerShell“ yra natūrali aplinka, nes jos į objektą orientuotas pobūdis giliai integruojamas su šiomis platformomis. Nurodydami, kurią kalbą pasirinkote ir kodėl, kai prašote scenarijaus dirbtinio intelekto, užtikrinama, kad išvestis yra tinkama ir idiomatinė jūsų aplinkai.

Žingsnis po žingsnio: saugus scenarijaus generavimas

  1. Apibūdinkite užduotį ir aplinką. Ką jis veiks, kuri OS / apvalkalas, kokie apribojimai?
  2. Klauskite apsauginių turėklų. Bash, nustatykite -euo pipefail (sustabdyti klaidą, sustabdyti neapibrėžtą kintamąjį), pavojingų operacijų patvirtinimo raginimas, perkelti pirmiausia, o ne ištrinti.
  3. Prašyti sauso veikimo režimo. Leiskite scenarijui parašyti, ką daryti su --dry-run, bet nedarykite to.
  4. Skaityti ir suprasti. Patikrinkite, ką daro kiekviena eilutė, ypač trynimo / perkėlimo / tinklo operacijas.
  5. Išbandykite izoliuotoje aplinkoje. Bandymo aplanke paleiskite jį su duomenų pavyzdžiais.
  6. Pridėti prie registravimo. Leiskite scenarijui įrašyti, ką jis daro, kad jį būtų galima peržiūrėti vėliau.

Saugaus scenarijaus pagrindai

Gamybos scenarijuje turėtų būti šie apsauginiai turėklai:

  • Sustojimas klaidos atveju. Bash: set -euo pipefail. PowerShell: $ErrorActionPreference = 'Sustabdyti'. Jei vienas žingsnis nepavyksta, kiti neturėtų veikti.
  • Idempotencija (pakartojamumas). Jei scenarijus paleidžiamas du kartus, jis neturėtų padaryti dvigubos žalos; „Jei jau turi, praleisk“ logika.
  • Patvirtinimas ir sausas paleidimas. Dėl destruktyvių operacijų "ar tu tikras?" arba „-dry-run“ vėliava.
  • Įvesties patvirtinimas. Ar parametrai tokie, kokių tikėtasi? Tuščias kintamasis gali paversti rm -rf "$DIR"/ į rm -rf / katastrofa.
  • Miško ruoša. Įrašas, kas ir kada buvo padaryta.
Patarimas: Pavojingiausia Bash klaida yra ištrynimas naudojant tuščią kintamąjį. rm -rf "$DIR" bando ištrinti šakninį katalogą, jei $DIR tuščias. nustatykite -u (sustabdykite neapibrėžtą kintamąjį) ir patikrinkite [ -n "$DIR" ] prieš ištrindami yra išsigelbėjimas. Prašydami scenarijų iš AI, aiškiai paprašykite šios apsaugos.

Saugumas: slaptos ir destruktyvios komandos

Du dideli pavojai:

  1. Paslapties įterpimas į scenarijų. Slaptažodis negali būti paprastasis žetono scenarijaus tekstas; Turi būti nuskaitytas iš aplinkos kintamojo arba saugyklos. Scenarijai patenka į Git; palaidota paslaptis yra nuolatinis nutekėjimas.
  2. Destruktyvios komandos. rm -rf, Remove-Item -Recurse -Force, DROP TABLE, Terraform sunaikinti – kai pamatysite tai scenarijuje, sustokite ir gerai pagalvokite. Niekada nebandykite naikinančios komandos, kurią generuoja AI prod.
Atsargiai: kai liepiate dirbtiniam intelektui „parašyti scenarijų, kuris išvalo šiuos failus“, atidžiai perskaitykite jos sukurtos paieškos ... -delete arba rm komandos apimtį. Pakaitos simbolis (*) arba neteisingas kelias ištrins daugiau nei norite ištrinti. Visada pirmiausia paleiskite scenarijų režimu „ištrinti sąrašą“, o ne ištrindami.

Trijų kalbų palyginimas

kriterijus

bash

Python

PowerShell

Kur geriausia

Linux apvalkalas, komandų grandinė

Sudėtinga logika, API, duomenys

Windows debesų valdymas

Mokymosi kreivė

Vidutinis (įstrigęs)

lengva

vidutinis

Klaidų tvarkymas

set -euo pipefail

pabandyti/išskyrus

pabandyti/pagauti, -ErrorAction

perkeliamumas

Unix/Linux/Mac

visur

Kelių platformų (PS 7+)

kada

Trumpai, sistema veikia

Logika ilgesnė nei 20 eilučių

Windows / AD / Azure

trys mini dėklai

1 atvejis – 2 valandos amato į 5 minutes. Inžinierius kas savaitę praleisdavo 2 valandas rinkdamas ir archyvuodamas žurnalus iš 40 serverių. Jis turėjo AI aprašyti užduotį ir nustatyti -euo pipefail + sausosios eigos apsaugą ir sugeneruoti Bash scenarijų. Pirmiausia patvirtino scenarijų sausuoju paleidimu, tada susiejo jį su suplanuota užduotimi (cron). Savaitinis darbas sutrumpinamas iki 5 minučių ir pašalinamos žmogiškosios klaidos.

2 atvejis – nulinio kintamojo nelaimė išvengta. AI sukurtame valymo scenarijuje buvo rm -rf "$TARGET"/*, bet jei kur nors nebuvo priskirtas TARGET, jis liko tuščias. Tai suprato studijuodamas inžinieriaus specialybę; nustatyti -u ir [ -n "$TARGET" ] || pridėtas 1 išėjimo valdiklis. Bandymo metu kintamasis liko nulinis, o scenarijus sustojo saugiai, o ne katastrofiškai.

3 atvejis – užfiksuotas įterptasis prieigos raktas. Patogumo dėlei AI pridėjo eilutę TOKEN = "ghp_realtoken" prie Python scenarijaus, kuris reikalauja API (pavyzdžiui). Inžinierius tai pašalino ir pakeitė į nuskaitymą iš aplinkos kintamojo su os.environ["TOKEN"] ir atšaukė bei atnaujino prieigos raktą. Jei scenarijus atitektų Gitui, ženklas būtų viešas.

Keturi kopijuojami šablonai

1) saugus Bash scenarijus:

Parašykite Bash scenarijų: [UŽDUOTIS]. Privalomos taisyklės:- `set -euo pipefail` pradžioje.- Patikrinkite, ar kintamasis nėra tuščias visur, kur trina/perkeliama.- `--dry-run` vėliavėlė: parašykite ką daryti šiuo režimu, bet to nedarykite.- Neįterpkite paslapties; Skaityti iš aplinkos kintamojo. - Kiekviename žingsnyje spausdinkite informacinį žurnalą. Komentuokite scenarijų ir pažymėkite pavojingiausią eilutę.

2) Scenarijaus aprašymas / valdymas:

Eilutę po eilutės apibūdinkite šį scenarijų ir patikrinkite saugumą: įterpta paslaptis, destruktyvi komanda (rm/Remove-Item/DROP), nepatvirtinta įvestis, klaidų netvarkoma? Parašykite kiekvieną riziką pagal svarbą ir pataisymą. Scenarijus: [CODE]

3) Kalbos vertimas:

Išverskite tą [SOURCE LANGUAGE] scenarijų į [TARGET LANGUAGE]. Laikykite elgseną pažodžiui, naudokite idiomatines tikslinės kalbos klaidas, perkelkite visas įterptas paslaptis į aplinkos kintamąjį. Atkreipkite dėmesį į taškus, kurie gali veikti kitaip.Scenarijus: [CODE]

4) Suplanuota užduotis (cron / suplanuota užduotis):

Naudokite šį scenarijų [FREQUENCY: pvz. Parašykite tvarkaraščio apibrėžimą ([cron / systemd timer / Windows Task Scheduler]), kuris veiks [02:00 kiekvieną naktį]. Pridėkite, kaip įspėti mane apie gedimą (logas / išėjimo kodas / pranešimas) ir kaip išvengti persidengimo.

Silpnas raginimas / Stiprus raginimas

Silpnas: „Parašykite scenarijų, kuris ištrina senus failus“.

Rezultatas: be aprėpties, neapsaugotas, sausai veikiantis rm scenarijus; Jei jis veikia netinkamame aplanke, jis bus ištrintas negrįžtamai.

Stiprus: "Parašykite bash scenarijų, kad ištrintumėte senesnius nei 30 dienų .log failus pagal /var/log/app. Naudokite set -euo pipefail, sustabdykite, jei tikslinis katalogas tuščias, pirmiausia nurodykite, ką ištrinti, su --dry-run, registruokite kiekvieną operaciją, nedėkite paslapties. Pažymėkite pavojingiausią eilutę."

Skirtumas: antrame teiginyje pateikiama visa apimtis, apsauginiai turėklai ir sausos eigos lūkesčiai; Išvestis gali būti saugiai paleista.

Dažnos klaidos

  • Paleisti scenarijų jo neskaitant. Visų pirma eilučių ištrynimas / perkėlimas gali sukelti nelaimę.
  • Netikrinama, ar nėra tuščių kintamųjų. Klasikinė nelaimė ištrynus šakninį katalogą su rm -rf "$X"/.
  • praleisti „set -euo pipefail“ / „-ErrorAction Stop“. Žingsnis užsidega, scenarijus tęsiasi aklai.
  • Paslapties įterpimas į scenarijų. Nuolatinis nutekėjimas į Git.
  • Destruktyvus procesas be sausosios eigos. Pirmiausia „parodyk, ką daryti“, tada daryk.
  • Pirmas bandymas gamybinėje versijoje. Veikia be izoliuotos bandomosios aplinkos.

Apibendrinant

„DevOps“ yra automatizavimo menas; Pasikartojantis darbas deleguojamas Bash, Python ir PowerShell scenarijus. Dirbtinis intelektas yra labai patogus kuriant scenarijus, derinant ir verčiant kalbas, tačiau saugus scenarijus turėtų apimti klaidų apsaugą, pvz., set -euo pipefail, nulinio kintamojo tikrinimą, sausojo paleidimo režimą, įterptą slaptumą ir registravimą. Jūs privalote perskaityti ir išbandyti kiekvieną scenarijų, ypač tuos, kuriuose yra destruktyvių komandų, izoliuotoje aplinkoje ir pirmiausia sausą paleidimą.

Taikymo užduotis

Pasirinkite pasikartojančią užduotį (žurnalų archyvavimas, atsarginė kopija, valymas). (1) Leiskite AI sugeneruoti apsaugotą scenarijų naudodami „Secure Bash script“ šabloną. (2) Patikrinkite, ar nėra to paties scenarijaus saugumo, kaip ir šablono „Scenarijaus aprašymas / auditas“, ir suraskite pavojingiausią eilutę, kurią AI pažymėjo. (3) Patikrinkite jo veikimą paleisdami scenarijų su pavyzdiniais failais bandomajame aplanke, pirmiausia naudodami --dry-run.

kontrolinis sąrašas

  • [ ] Parašiau užduotį, kurios nenoriu, OS/shell ir apsauginius turėklus.
  • [ ] Scenarijus sustabdomas klaida, pvz., set -euo pipefail / -ErrorAction Stop.
  • [ ] Pridėjau tuščią kintamąjį ir įvesties patikrinimą prieš ištrynimą / perkėlimą.
  • [ ] Yra --dry-run/confirmation mechanizmas destrukcinėms operacijoms.
  • [ ] Scenarijuje nėra jokios paslapties; reikšmės gaunamos iš aplinkos kintamojo/atvejo.
  • [ ] Pirmąjį bandymą atlikau izoliuotoje bandymo aplinkoje su sausu paleidimu.