Che cos'è "Infrastruttura come codice"?


13

La frase "Infrastruttura come codice" è stata menzionata più volte nelle ultime due settimane in contesti diversi. Cosa significa in realtà in senso pratico avere infrastruttura come codice?

Risposte:


11

TL; DR : l' infrastruttura come codice è un modo per automatizzare e eseguire il backup dell'ambiente. Nel caso ideale, dopo un disastro, è possibile ripristinare la propria infrastruttura in modo completo e automatico Provisioning di nuove risorse, Ripristino della configurazione dal repository di codici e Ripristino dei dati dal backup.

Panoramica

L'infrastruttura come codice si basa su tre concetti principali:

Automazione

Configuration Management è alla sua terza generazione di strumenti. Basandosi su CFEngine, ora viene ampiamente implementato un nuovo set di strumenti per la gestione automatica della configurazione. I più popolari in ordine alfabetico sono Ansible, CFEngine, Chef, Puppet, PowerShell DSC e SaltStack . Ognuno avrà una lingua per descrivere lo stato della propria infrastruttura, moduli di codice per applicare tali modifiche e fornire la possibilità di estendere gli strumenti, alcuni agenti per eseguire quelli sui server e un repository centrale di informazioni.

Opereranno generalmente in modalità push o pull, connettendosi ai server da una o più posizioni centrali ed eseguendo le modifiche in remoto o eseguendo su ciascun server e estraendo informazioni sullo stato dalla posizione centrale e che nel modello client / server o in un distribuito modo.

Il concetto importante è che l'amministratore di sistema o l'ingegnere dell'affidabilità del sito non apportino modifiche direttamente all'infrastruttura, ma permetta all'automazione di apportare modifiche. Tutto ciò che viene fatto manualmente da un essere umano dovrebbe essere considerato deperibile, essere presto corretto dall'automazione o in forma più rigorosa violando l'integrità dell'infrastruttura e innescando la distruzione e la ricostruzione dei componenti interessati.

Codice repository

Il repository di codici, idealmente separato dal software di archiviazione repository, verrebbe utilizzato per gestire tutte le modifiche all'infrastruttura e la relativa automazione. Dovrebbe contenere file e modelli di configurazione, Playbook (libri di cucina) che descrivono il processo delle modifiche da rivedere, Codice che estende gli strumenti di automazione CM, Configurazioni di provisioning, Test e avvisi dell'infrastruttura, Test di gestione temporanea / di distribuzione, Documentazione, Descrizioni dei processi manuali (non ancora automatizzate) .

Il concetto importante è quello di istituire revisioni tra pari per le modifiche, di avere una registrazione di tutte le modifiche e la capacità di ripristinare automaticamente lo stato precedente in caso di problemi imprevedibili e / o non testati, capacità di implementare nell'ambiente di gestione temporanea e testare le modifiche alla configurazione e capacità di distribuire automaticamente cambiamenti senza variazione causati da errore umano.

Infrastruttura gestita

La gestione dell'infrastruttura fisica è un'attività del mondo reale che va oltre il software e richiede un insieme di competenze molto diverse. Potendo astrarre questo livello tramite il Cloud Computing o un Managed Datacenter, il tuo team si concentra sulla parte della gestione dell'infrastruttura che aggiunge valore aziendale.

Mentre il Cloud Computing offre un modo per iniziare e ridimensionare rapidamente in una fase successiva, spesso le aziende ottengono alcuni vantaggi e persino risparmi significativi nelle parti mobili dell'infrastruttura nei propri data center per un modello ibrido. Possedere o noleggiare l'hardware non significa che devi anche assumere le persone che lo gestiscono. Su questa scala sono necessari data center distribuiti geograficamente in tutto il mondo e avere persone con tutte le competenze richieste in tutti i luoghi sarebbe molto costoso. Farli volare in tutto il mondo aggiunge un'elevata latenza a qualsiasi cambiamento e ulteriore livello di inefficienze operative, che è un altro motivo per esternalizzare la gestione del data center.

L'importante da asporto è che l'infrastruttura fisica gestita è spesso un concetto dimenticato o trascurato , ma altrettanto importante. Anche se hai tutto automatizzato, tutta la configurazione è archiviata in un repository di codice di backup, a meno che tu non abbia un modo per eseguire rapidamente il provisioning , hai un enorme collo di bottiglia , che potrebbe facilmente cancellare tutti i vantaggi che hai ottenuto con gli altri due passaggi .


5

Prima di spiegare di cosa si tratta esattamente, lasciatemi citare una definizione davvero piacevole, direttamente da Wikipedia :

Infrastruttura come codice (IaC) è il processo di gestione e provisioning dell'infrastruttura informatica (processi, server bare metal, server virtuali, ecc.) E la loro configurazione tramite file di definizione elaborabili dalla macchina, piuttosto che la configurazione fisica dell'hardware o l'uso della configurazione interattiva utensili.

Bene, ora diamo un'occhiata a uno di questi strumenti IaC, Terraform per capire meglio il concetto: https://www.terraform.io/

Inoltre, questo è ciò che Terraform dice di sé:

Terraform consente di creare, modificare e migliorare in modo sicuro e prevedibile l'infrastruttura di produzione. È uno strumento open source che codifica le API in file di configurazione dichiarativi che possono essere condivisi tra i membri del team, trattati come codice, modificati, revisionati e versionati.

Ciò significa che si può codificare l'intera informazione. che include la creazione di risorse cloud (/ infra) come istanze del server, bilanciamento del carico, ecc., insieme alle configurazioni complete (che include le modifiche alle impostazioni di base, le impostazioni di sicurezza, le regioni, ecc.) come codice, che può essere modificabile, versione e certo, rivedibile.

Questo è un esempio di codice Terraform per il provisioning delle risorse AWS:

resource "aws_elb" "frontend" {
  name = "frontend-load-balancer"
  listener {
    instance_port     = 8000
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  instances = ["${aws_instance.app.*.id}"]
}

resource "aws_instance" "app" {
  count = 5

  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
}

Bonus PS : Inoltre, è necessario comprendere le differenze tra gli strumenti di provisioning e orchestrazione . Gli sviluppatori confondono l'uno per l'altro molto spesso e tendono a commettere l'errore di provare a modificare e utilizzare uno strumento per quello per cui non è previsto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.