Vienība 9 / 11

Skriptu un automatizācijas ģenerēšana: Bash, Python un PowerShell

Ieguvumi:

  • Spēja izprast Bash, Python un PowerShell stiprās puses un panākt, ka mākslīgais intelekts rada drošus, aizsargātus skriptu melnrakstus
  • Iespēja pievienot aizsargmargas tādiem skriptiem kā set -euo pipefail, tukša mainīgā pārbaude, sausās darbības režīms un reģistrēšana
  • Spēja lasīt destruktīvas komandas un izmēģināt tās izolētā vidē un vispirms ar sauso palaišanu, kā arī pielietot disciplīnu, lai skriptā netiktu iestrādāts noslēpums.

DevOps gars ir apkopots vienā teikumā: "Automatizējiet darbu, ko veicat divreiz." Jebkurš atkārtots uzdevums, kas tiek veikts manuāli — žurnāla tīrīšana, dublējumkopiju veidošana, servera stāvokļa pārbaude, pakešfaila apstrāde — prasa laiku, un galu galā tos sabojā cilvēka kļūda. Skripti pārņem šos darbus: mazas programmas, kas izpilda virkni komandu secīgi, uzticami un atkārtojami. DevOps profesionālis bieži izmanto trīs valodas: Bash (Linux/Unix čaulas skriptiem), Python (sarežģītai loģikai, API izsaukšanai, datu manipulācijām) un PowerShell (Windows un mākoņu pārvaldībai).

AI, iespējams, ir vieta, kur tā piedāvā vispraktiskāko vērtību skriptu ģenerēšanā: darba melnraksta izveidošana no viena teikuma apraksta, noslēpumainas kļūdas atrisināšana, skripta tulkošana citā valodā. Bet skripts ir bīstams, ja to palaiž akli — nepareizs RM, Remove-Item -Recurse izdzēsīs failus neatgriezeniski. Tāpēc šīs vienības devīze ir: Ļaujiet AI uzrakstīt skriptu, jūs to izlasiet, vispirms izmēģiniet to drošajā režīmā un pēc tam palaidiet to.

Kuru valodu izvēlēties un kad? Aptuvens īkšķis: ja darbs sastāv no vairāku sistēmas komandu izpildīšanas pēc kārtas (faila kopēšana, pakalpojuma restartēšana, arhīva izgūšana), Bash ir dabiskākā izvēle, jo Linux ir visuresošs serveros. Ja darbs ir saistīts ar lēmumu pieņemšanas loģiku, cilpu veidošanu, datu pārveidošanu, API pieprasīšanu vai JSON apstrādi, tas ir, loģiku, kas pārsniedz 20 rindiņas, Python izceļas ar lasāmību un bagātīgajām bibliotēkām; Sarežģīts Bash skripts ātri kļūst nesaprotams, savukārt Python joprojām ir viegli uzturējams. Ja darbs ir saistīts ar Windows serveru, Active Directory vai Azure pārvaldību, PowerShell ir dabiska vide, jo tās objektorientētā būtība ir dziļi integrējama ar šīm platformām. Norādot, kuru valodu izvēlējāties un kāpēc, pieprasot skriptu AI, tiek nodrošināts, ka izvade ir piemērota un idiotiska jūsu videi.

Soli pa solim: droša skriptu ģenerēšana

  1. Aprakstiet uzdevumu un vidi. Ko tas darīs, kura OS/apvalks, kādi ierobežojumi?
  2. Jautājiet pēc drošības margām. Programmā bash iestatiet -euo pipefail (apturēt kļūdas gadījumā, apstāties uz nedefinēta mainīgā), apstiprinājuma uzvedne bīstamām darbībām, vispirms pārvietot, nevis dzēst.
  3. Pieprasīt sausās darbības režīmu. Ļaujiet skriptam rakstīt, ko darīt ar --dry-run, bet nedariet to.
  4. Izlasi un saproti. Pārbaudiet katras rindas darbību, jo īpaši dzēšanas/pārvietošanas/tīkla darbības.
  5. Izmēģiniet to izolētā vidē. Pārbaudes mapē palaidiet to ar datu paraugiem.
  6. Pievienot reģistrēšanai. Ļaujiet skriptam ierakstīt, ko tas dara, lai to varētu skatīt vēlāk.

Drošas skriptēšanas pamatprincipi

Produkcijas skriptā jāiekļauj šādas aizsargmargas:

  • Apstāšanās kļūdas gadījumā. Bash: set -euo pipefail. PowerShell: $ErrorActionPreference = 'Apturēt'. Ja viens solis neizdodas, nākamajiem nevajadzētu darboties.
  • Idempotence (atkārtojamība). Ja skripts tiek palaists divreiz, tam nevajadzētu radīt dubultu bojājumu; "Ja jums tas jau ir, izlaidiet to" loģika.
  • Apstiprināšana un sausā darbība. Par destruktīvām operācijām "vai esat pārliecināts?" vai --dry-run karogs.
  • Ievades apstiprināšana. Vai parametri ir tādi, kā paredzēts? Tukšs mainīgais var pārvērst rm -rf "$DIR"/ par rm -rf / katastrofu.
  • Mežizstrāde. Pieraksts par paveikto un kad.
Padoms. Visbīstamākā kļūda programmā Bash ir dzēšana ar tukšu mainīgo. rm -rf "$DIR" mēģina dzēst saknes direktoriju, ja $DIR ir tukšs. iestatiet -u (apstājieties pie nedefinēta mainīgā) un pārbaudiet [ -n "$DIR"] pirms dzēšanas ir glābšanas līdzeklis. Pieprasot skriptus no AI, skaidri pieprasiet šīs aizsardzības.

Drošība: slepenas un destruktīvas komandas

Divas lielas briesmas:

  1. Noslēpuma iegulšana skriptā. Parole nedrīkst būt vienkāršs teksts pilnvaras skriptā; Jānolasa no vides mainīgā vai glabātuves. Skripti nonāk Git; apglabāts noslēpums ir pastāvīga noplūde.
  2. Iznīcinošas komandas. rm -rf, Remove-Item -Recurse -Force, DROP TABLE, Terraform iznīcināt — kad redzat tos skriptā, apstājieties un padomājiet divreiz. Nekad vispirms neizmēģiniet iznīcinošo komandu, ko ģenerē AI prod.
Uzmanību: Kad jūs sakāt AI "rakstīt skriptu, kas notīra šos failus", uzmanīgi izlasiet atrastās ... -delete vai rm komandas darbības jomu. Aizstājējzīme (*) vai nepareizs ceļš izdzēsīs vairāk, nekā vēlaties dzēst. Vienmēr vispirms palaidiet skriptu režīmā "Dzēšamā saraksta", nevis dzēšanas.

Trīs valodu salīdzinājums

kritērijs

bash

Python

PowerShell

Kur vislabāk

Linux apvalks, komandu ķēde

Sarežģīta loģika, API, dati

Windows mākoņu pārvaldība

Mācību līkne

Vidējs (ieslodzīts)

viegli

vidējs

Kļūdu apstrāde

set -euo pipefail

mēģināt/izņemot

izmēģināt/noķert, -ErrorAction

pārnesamība

Unix/Linux/mac

visur

Vairāku platformu (PS 7+)

kad

Īsi, sistēma darbojas

Loģika garāka par 20 rindiņām

Windows/AD/Azure

trīs mini futrāļi

1. gadījums — 2 stundu darbs 5 minūtēs. Inženieris katru nedēļu pavadīja 2 stundas, apkopojot un arhivējot žurnālus no 40 serveriem. Viņš lika AI aprakstīt uzdevumu un iestatīt -euo pipefail + sausās darbības aizsardzību un ģenerēt Bash skriptu. Vispirms apstiprināja skriptu ar sauso palaišanu, pēc tam saistīja to ar ieplānoto uzdevumu (cron). Iknedēļas darbs tiek samazināts līdz 5 minūtēm un tiek novērstas cilvēciskās kļūdas.

2. gadījums — nulles mainīgā katastrofa novērsta. AI radītajā tīrīšanas skriptā bija rm -rf "$TARGET"/*, bet, ja TARGET kaut kur nebija piešķirts, tas palika tukšs. Viņš to saprata, studējot par inženieri; iestatīt -u un [ -n "$TARGET" ] || pievienota 1. izejas vadība. Testēšanas laikā mainīgais palika nulle un skripts apstājās droši, nevis katastrofāli.

3. gadījums — iegultais marķieris ir notverts. Ērtības labad AI ir pievienojis rindiņu TOKEN = "ghp_realtoken" Python skriptam, kas pieprasa API (kā piemēru). Inženieris to noņēma un mainīja uz nolasīšanu no vides mainīgā ar os.environ["TOKEN"], kā arī atcēla un atjaunoja pilnvaru. Ja skripts nonāktu Git, marķieris būtu publisks.

Četras kopējamas veidnes

1) Drošs Bash skripts:

Uzrakstiet Bash skriptu: [UZDEVUMS]. Obligātie noteikumi:- `set -euo pipefail` sākumā.- Pārbaudiet, vai mainīgais nav tukšs visur, kur dzēšot/pārvietojot.- `--dry-run` karodziņš: ierakstiet, ko darīt šajā režīmā, bet nedariet to.- Nelietojiet iegult noslēpumu; Lasīt no vides mainīgā. - Katrā solī izdrukājiet informatīvu žurnālu. Komentējiet skriptu un atzīmējiet bīstamāko līniju.

2) Skripta apraksts/vadība:

Aprakstiet šo skriptu rindiņu pa rindiņai un pārbaudiet drošību: iegultais noslēpums, destruktīva komanda (rm/Remove-Item/DROP), nevalidēta ievade, kļūdu apstrādes trūkums? Uzrakstiet katru risku svarīguma un labojumu secībā. Skripts: [CODE]

3) Valodu tulkojums:

Tulkojiet šo [AVOTA VALODA] skriptu šādā valodā: [TARGET LANGUAGE]. Saglabājiet uzvedību burtiski, izmantojiet mērķa valodas idiomātisku kļūdu apstrādi, pārvietojiet visus iegultos noslēpumus uz vides mainīgo. Ņemiet vērā punktus, kas var darboties atšķirīgi.Skripts: [CODE]

4) Plānotais uzdevums (cron/ieplānotais uzdevums):

Izmantojiet šo skriptu [FREQUENCY: piem. Uzrakstiet grafika definīciju ([cron / systemd timer / Windows Task Scheduler]), kas darbosies [pulksten 02:00 katru nakti]. Pievienojiet, kā mani brīdināt par kļūmi (reģistrācijas/izejas kods/paziņojums) un kā novērst pārklāšanos.

Vāja uzvedne / spēcīga uzvedne

Vāji: "Uzrakstiet skriptu, kas dzēš vecos failus."

Rezultāts: bez darbības jomas, neaizsargāts, bezsaistes rm skripts; Ja tas darbojas nepareizajā mapē, tas tiks neatgriezeniski izdzēsts.

Strong: "Rakstiet bash skriptu, lai sadaļā /var/log/app dzēstu .log failus, kas vecāki par 30 dienām. Izmantojiet set -euo pipefail, apturiet, ja mērķa direktorijs ir tukšs, vispirms uzskaitiet dzēšamo ar --dry-run, reģistrējiet katru darījumu, neiegult noslēpumu. Atzīmējiet visbīstamāko rindiņu."

Atšķirība: otrā prasība sniedz pilnu darbības jomu, drošības margas un sausās gaitas cerības; Izvadi var palaist droši.

Biežas kļūdas

  • Skripta palaišana, to neizlasot. Jo īpaši rindu dzēšana/pārvietošana izraisa katastrofu.
  • Nepārbauda tukšus mainīgos. Klasiska saknes direktorija izdzēšana ar rm -rf "$X"/.
  • izlaist "set -euo pipefail" / "-ErrorAction Stop". Atskan solis, scenārijs akli turpinās.
  • Noslēpuma iegulšana skriptā. Pastāvīga noplūde uz Git.
  • Destruktīvs process bez sausās darbības. Vispirms "parādiet, kas man jādara", tad dariet to.
  • Pirmais mēģinājums prod. Darbojas bez izolētas testa vides.

Rezumējot

DevOps ir automatizācijas māksla; Atkārtots darbs tiek deleģēts Bash, Python un PowerShell skriptiem. AI ir ļoti ērts skriptu sastādīšanā, atkļūdošanā un valodu tulkošanā, taču drošā skriptā jāiekļauj kļūdu aizsargi, piemēram, set -euo pipefail, nulles mainīgā pārbaude, sausās palaišanas režīms, iegultā slepenība un reģistrēšana. Jūsu pienākums ir izlasīt un pārbaudīt katru skriptu, īpaši tos, kas satur destruktīvas komandas, izolētā vidē un vispirms sausajā režīmā.

Lietojumprogrammas uzdevums

Izvēlieties periodisku uzdevumu (žurnālu arhivēšana, dublēšana, tīrīšana). (1) Lieciet AI ģenerēt aizsargātu skriptu, izmantojot veidni “Secure Bash skripts”. (2) Pārbaudiet tā paša skripta drošību kā veidnei "Skripta apraksts/audits" un atrodiet visbīstamāko rindiņu, ko AI ir atzīmējis. (3) Pārbaudiet tā darbību, palaižot skriptu ar parauga failiem testa mapē, vispirms ar --dry-run.

kontrolsaraksts

  • [ ] Es uzrakstīju uzdevumu, kuru es nevēlos, OS/shell un drošības margas.
  • [ ] Skriptam ir apstāšanās kļūda, piemēram, set -euo pipefail / -ErrorAction Stop.
  • [ ] Es pievienoju tukšu mainīgo un ievades pārbaudi pirms dzēšanas/pārvietošanas.
  • [ ] Destruktīvām darbībām ir --dry-run/apstiprinājuma mehānisms.
  • [ ] Skriptā nav iestrādāts noslēpums; vērtības nāk no vides mainīgā/gadījuma.
  • [ ] Pirmo testu veicu izolētā testa vidē ar sauso darbību.