Ecco come rendere la tua infrastruttura cloud stabile, sicura e scalabile.

Avvio DevOps è difficile

Ci sono molte cose di cui preoccuparsi come startup. Marketing, sviluppo del prodotto, mantenendo unita la tua squadra. Tutto tende a prendere il modello "minimo praticabile" per ottenere il minimo indispensabile in modo da non schiantarti e bruciare.

Come architetto del cloud aziendale, so di persona quanto lavoro può essere fatto nel campo di DevOps. Come fondatore di startup, so anche quanto poco tempo devi dedicare alle cose: è più come se dovessi dedicare del tempo a tutte le cose contemporaneamente.

Purtroppo anche l'infrastruttura cloud tende a seguire questa regola e tutte le "migliori pratiche" sul campo tendono a seguire schemi che richiedono un grande investimento di tempo, qualcosa che le startup sicuramente non hanno.

Con questa guida, spero di darvi una panoramica di come può essere una "infrastruttura cloud minima praticabile", con particolare attenzione a stabilità, sicurezza e scalabilità.

Stabilità

Quando si considera la stabilità della propria infrastruttura cloud, ci sono alcuni punti chiave su cui concentrarsi nello sviluppo di un'infrastruttura cloud minima praticabile. Ripristino da errore irreversibile, riavvio automatico e verifica della disponibilità di risorse sufficienti. Se ti concentri su queste tre cose, dovresti trovarti in un posto abbastanza buono in termini di tempo di attività.

Ripristino da errore irreversibile (backup automatici)

Conosci lo scenario peggiore: hai bloccato il tuo server e il tuo disco. La soluzione minima possibile a tale scopo è di eseguire backup pianificati e automatici per evitare la perdita di dati.

A seconda del tuo provider cloud, ci sono alcune diverse opzioni che puoi prendere. I dischi di snapshot sono generalmente il modo più semplice per eseguire un processo di backup minimo possibile, ma i metodi più avanzati (e più stabili) includono backup specifici del database (dumping del database) e sistemi distribuiti.

  • AWS
    Se stai usando Amazon, ti consiglierei di usare CloudWatch. Ti permette di creare lavori pianificati (come istantanee automatiche) - Vedi questa guida
  • GCP
    Google ti consente di pianificare anche le istantanee: consulta questa guida
  • Nuvola Agnostic
    Non vuoi bloccare il processo di backup sul tuo provider cloud? I tuoi dati più importanti saranno il database e tutti i caricamenti che potrebbero essere forniti. Per un database, dovresti cercare di scrivere uno script che scarichi periodicamente il database e invii i dati in una posizione sicura (bucket s3 privato, file system distribuito, ecc.) Questo sarà più soggetto a errori rispetto a un metodo specifico della piattaforma, tuttavia , quindi diffidare.

Assicurati di testare il tuo metodo di ripristino del backup o rischi quello che è successo a GitLab, in cui tutti e 5 i loro metodi di backup non sono riusciti perché non hanno mai testato il ripristino.

Riavvio automatico del servizio in caso di riavvio del server

Esistono due parti per il riavvio automatico. Uno, quando l'app si arresta in modo anomalo, si riavvia? E due, al riavvio del server, l'app si avvia automaticamente?

Crontab: Crontab è uno strumento utile che consente di pianificare facilmente i lavori. Forse l'approccio più semplice per avviare automaticamente il tuo stack è quello di creare un processo crontab che viene eseguito al riavvio - Vedi questa guida su come farlo.

/etc/init.d - La maggior parte dei sistemi supporta gli script init.d. Con init.d puoi definire script che possono essere avviati all'avvio e supportare anche i comandi stop, start e status (es. Service start myscript) per darti un maggiore controllo sulle tue applicazioni. È un po 'più complesso di un crontab, ma ti dà più funzionalità - Vedi questo post per impostare uno script init.d.

Se sei interessato alle differenze tra questi metodi, dai un'occhiata a Questo post di scambio di stack.

Riavvio automatico del servizio in caso di arresto anomalo dell'applicazione

Le applicazioni non sono sempre stabili e possono essere soggette a crash in momenti difficili. Un buon modo per mantenere la stabilità è avere uno strumento che può riavviarsi automaticamente.

  • NodeJS - Forever o PM2
  • Generale - Controlla questo post su come riavviare i processi usando gli script bash

Assicurati sempre che ci siano abbastanza risorse disponibili

Uno dei motivi più comuni per i tempi di inattività dei server è la mancanza di risorse per i server. Ho avuto server SQL morti per esaurimento dello spazio su disco e applicazioni di produzione muoiono per esaurimento della memoria. L'impostazione del monitoraggio delle risorse è un buon modo per mitigare questo rischio.

  • AWS - CloudWatch è un ottimo strumento per il monitoraggio. È possibile impostare avvisi e-mail su eventi specifici.
  • GCP - Il monitoraggio Stackdriver offre funzionalità simili e si integra anche con sistemi di messaggistica come Slack.
  • Cloud Agnostic - Crontab è di nuovo valido per questo tipo di attività, ma dovrai scrivere uno script che controllerà le risorse di sistema e invierà e-mail quando raggiungono la soglia.

Assicurarsi di documentare il metodo di avvio automatico e gli script di avvio. Mantieni il codice nel controllo della versione o rischierai problemi quando si tratta di ridimensionamento a causa del codice misterioso che hai dimenticato.

Sicurezza

La sicurezza è purtroppo trascurata quando si tratta della filosofia MVP. Le persone semplicemente non vedono il valore guadagnato per il tempo necessario per gli investimenti. Questa è una forma di gioco d'azzardo pericoloso, poiché una branca della sicurezza potrebbe causare gravi perdite di dati, fiducia dei clienti e tempo. Ecco alcune cose di base che puoi fare per iniziare con una mentalità di sicurezza.

SSL

Al giorno d'oggi, SSL è fondamentalmente un requisito per una moderna app SaaS con molti utenti che rifiutano di utilizzare applicazioni senza supporto https. Strumenti come Let's Encrypt rendono facile e gratuito ottenere certificati.

Sicurezza del server

Una delle cose più importanti in termini di sicurezza è la gestione corretta dei server. Ecco alcuni suggerimenti di base che dovresti tenere a mente.

  • I database non dovrebbero essere accessibili a Internet aperto.
  • Mantieni aggiornate applicazioni e sistema operativo. Esistono spesso aggiornamenti di sicurezza che proteggono il tuo server da nuove vulnerabilità.
  • Chiudi tutte le porte tranne quelle assolutamente necessarie.
  • Non usare username / password: usare le chiavi è molto più sicuro.
  • Non dare alle persone la chiave di root quando hanno bisogno di accedere al tuo server. Crea nuovi account e fagli dare la loro chiave pubblica.

Gestione segreta

È necessario gestire chiavi API, credenziali, configurazioni e tutti i dati sensibili. Sono sempre titubante nel collocare questo tipo di dati sul cloud, non solo perché non so cosa può vedere il fornitore del cloud, ma anche perché se ottengono il mio account, tutti i miei segreti vengono scoperti.

  • Mantenere il maggior numero possibile di segreti locali.
  • Non inserire i segreti del codice nella tua applicazione: crea file di configurazione che puoi memorizzare al di fuori del codice dell'app.
  • Non archiviare i segreti in un repository Github pubblico (diffidare del cloud in generale).
  • Evita il testo in chiaro quando memorizzi le password degli utenti e i tuoi segreti

Scalabilità

Nella maggior parte dei casi quando si tratta di scalabilità, non ne avrai bisogno (all'inizio)

Se hai il tempo, la volontà e le capacità (o denaro), impegnarti nella scalabilità potrebbe darti benefici futuri. In caso contrario, consiglierei di ignorarlo e di concentrarmi sui due punti precedenti.

Concentrati sulla consegna del tuo prodotto ai tuoi primi 5 clienti, non ai tuoi primi 1.000. Il meglio che puoi fare quando si tratta di costruire infrastrutture scalabili è pensare ai principi di progettazione durante la creazione della tua app, quindi non sarà troppo lavoro per iniziare quando è finalmente il momento di ridimensionare. Dovrei saperlo: mi sono innamorato della trappola dell'ingegneria eccessiva molte, molte volte.

containerizzazione

Strumenti come Docker e Kubernetes sono ottimi per il ridimensionamento

Una vittoria facile quando si tratta di ridimensionamento è containerizzare la tua applicazione. Dai un'occhiata a Docker per una buona guida. Ecco alcuni consigli:

  • Consenti la configurazione della tua app tramite variabili di ambiente. Cose come le informazioni sul database e il nome utente / la password dell'amministratore iniziale contribuiranno notevolmente alla costruzione di una pipeline CI / CD e all'automazione della distribuzione dell'app.
  • Tenere il più possibile fuori dallo stato del contenitore. Ciò consentirà distribuzioni senza stato tramite strumenti come Kubernetes.
  • Installa i tuoi moduli come parte del processo di creazione per ridurre le dipendenze e le dimensioni dell'immagine.

Mantieni le configurazioni dei tuoi server ben documentate

Archivia tutto nel controllo versione: configurazioni, script e procedure per preparare i server. Questo ti salverà quando si tratta di ridimensionamento. Ho avuto a che fare con il ridimensionamento di app che richiedono server configurati in un modo molto particolare e se manca la documentazione, rimarrai per un inferno di tempo.

Conclusione

C'è molto lavoro da fare per alzarsi e mantenere l'infrastruttura cloud. Le start-up sono le più difficili perché non hanno tempo e spesso manca il loro skillset quando si tratta di DevOps. Quello che puoi fare è concentrarti sull'essenziale. Sicurezza, stabilità e, se avete tempo, scalabilità.

ServiceBot ti aiuta a ridimensionare il tuo SaaS automatizzando le distribuzioni (CI / CD), gestendo i tuoi abbonamenti e rimuovendo i punti di attrito comuni tra te e i tuoi clienti. Controlla