Voici comment rendre votre infrastructure cloud stable, sécurisée et évolutive.

Le démarrage de DevOps est difficile

Il y a beaucoup de choses à craindre en tant que startup. Marketing, développement de produits, garder votre équipe ensemble. Tout a tendance à prendre le modèle «minimum viable» consistant à obtenir le minimum nécessaire pour ne pas tomber en panne et ne pas brûler.

En tant qu'architecte de cloud d'entreprise, je sais personnellement combien de travail peut être fait dans le domaine de DevOps. En tant que fondatrice de startups, je sais aussi combien peu de temps vous avez à consacrer à des tâches - c’est comme si vous deviez consacrer du temps à toutes les tâches en même temps.

L’infrastructure cloud a malheureusement aussi tendance à suivre cette règle, et toutes les «meilleures pratiques» sur le terrain ont tendance à suivre des schémas qui nécessitent un investissement en temps considérable, ce que les startups n’ont certainement pas.

Avec ce guide, j'espère vous donner un aperçu de ce à quoi peut ressembler une «infrastructure cloud viable minimale», en mettant l'accent sur la stabilité, la sécurité et l'évolutivité.

Stabilité

Lorsque vous examinez la stabilité de votre infrastructure cloud, vous devez vous concentrer sur quelques points essentiels lors du développement d’une infrastructure cloud viable minimale. Restauration après une défaillance catastrophique, redémarrage automatique et s’assurer que suffisamment de ressources sont disponibles. Si vous vous concentrez sur ces trois choses, vous devriez être assez bien placé pour ce qui est de votre disponibilité.

Restauration en cas d'échec catastrophique (sauvegardes automatiques)

Vous connaissez le pire des cas - vous avez maquillé votre serveur et votre disque. La solution viable minimale consiste à faire effectuer des sauvegardes programmées et automatisées afin d'éviter toute perte de données.

En fonction de votre fournisseur de cloud, vous avez le choix entre plusieurs options. L'instantané de disques est généralement le moyen le plus simple de réaliser un processus de sauvegarde minimum viable, mais des méthodes plus avancées (et plus stables) incluent les sauvegardes spécifiques à la base de données (vidage de la base de données) et les systèmes distribués.

  • AWS
    Si vous utilisez Amazon, je vous recommanderais d'utiliser CloudWatch. Il vous permet de créer des tâches planifiées (telles que des instantanés automatiques) - Voir ce guide
  • GCP
    Google vous permet également de planifier des instantanés - Consultez ce guide
  • Cloud Agnostic
    Vous ne voulez pas verrouiller votre processus de sauvegarde sur votre fournisseur de cloud? Vos données les plus importantes seront la base de données et tous les téléchargements qui pourraient être fournis. Pour une base de données, vous devriez envisager de rédiger un script qui vide périodiquement la base de données et envoie les données à un emplacement sécurisé (compartiment s3 privé, système de fichiers distribué, etc.). , alors méfiez-vous.

"Assurez-vous de tester votre méthode de restauration de sauvegarde, sinon vous risquez ce qui est arrivé à GitLab, où chacune de leurs 5 méthodes de sauvegarde a échoué car elles n'ont jamais testé la restauration."

Redémarrage automatique du service en cas de redémarrage du serveur

Le redémarrage automatique comporte deux parties. Premièrement, lorsque votre application se bloque, est-ce qu'elle redémarre? Et deuxièmement, lorsque votre serveur redémarre, votre application démarre-t-elle automatiquement?

Crontab —Crontab est un outil utile qui vous permet de planifier facilement des travaux. L’approche la plus simple pour peut-être démarrer automatiquement votre pile est de créer un travail crontab qui sera exécuté au redémarrage - Consultez ce guide pour savoir comment faire.

/etc/init.d - La plupart des systèmes prennent en charge les scripts init.d. Avec init.d, vous pouvez définir des scripts pouvant être lancés au démarrage et également prendre en charge les commandes d'arrêt, de démarrage et d'état (par exemple, service start myscript) pour vous permettre de mieux contrôler vos applications. C’est un peu plus complexe qu’une crontab, mais elle vous donne plus de fonctionnalités - Consultez cet article pour configurer un script init.d.

Si vous êtes intéressé par les différences entre ces méthodes, consultez This post exchange pile.

Redémarrage automatique du service en cas de blocage de l'application

Les applications ne sont pas toujours stables et peuvent tomber en panne à des moments difficiles. Un bon moyen de maintenir la stabilité est de disposer d’un outil capable de redémarrer automatiquement.

  • NodeJS - Forever ou PM2
  • Général - Consultez cet article pour savoir comment redémarrer des processus à l'aide de scripts bash

Toujours s'assurer qu'il y a suffisamment de ressources disponibles

L'une des raisons les plus courantes de l'indisponibilité du serveur est le manque de ressources sur les serveurs. Les serveurs SQL ont épuisé leur espace disque et les applications de production, leur mémoire. La surveillance des ressources est un bon moyen d’atténuer ce risque.

  • AWS - CloudWatch est un bon outil de surveillance. Vous pouvez configurer des alertes par e-mail sur des événements spécifiques.
  • La surveillance GCP - Stackdriver fournit des fonctionnalités similaires et s’intègre également à des systèmes de messagerie tels que Slack.
  • Cloud Agnostic - Crontab convient à nouveau pour ce type de tâche, mais vous devrez écrire un script qui vérifiera les ressources système et enverra des courriels lorsqu'ils atteignent votre seuil.

Assurez-vous de documenter votre méthode de démarrage automatique et vos scripts de démarrage. Conservez le code dans le contrôle de version, sinon vous risquez des problèmes d'échelle en raison du code mystérieux que vous avez oublié.

Sécurité

La sécurité est malheureusement négligée en ce qui concerne la philosophie de MVP. Les gens ne voient tout simplement pas la valeur gagnée pour l'investissement en temps nécessaire. Il s’agit là d’une forme de jeu dangereux, puisqu’une brèche de sécurité pourrait entraîner une grave perte de données, la confiance des clients et du temps. Voici quelques conseils de base que vous pouvez utiliser pour adopter un état d’esprit lié à la sécurité.

SSL

De nos jours, SSL est une exigence fondamentale pour une application SaaS moderne, de nombreux utilisateurs refusant d'utiliser des applications sans support https. Des outils tels que Let’s Encrypt permettent d’obtenir des certificats facilement et gratuitement.

Sécurité du serveur

Une des choses les plus importantes en matière de sécurité est la gestion correcte des serveurs. Voici quelques conseils de base que vous devriez garder à l'esprit.

  • Les bases de données ne devraient pas être accessibles à l'Internet ouvert.
  • Gardez les applications et le système d'exploitation à jour. Il existe souvent des mises à jour de sécurité qui protègent votre serveur contre les nouvelles vulnérabilités.
  • Fermez tous les ports sauf ceux qui sont absolument nécessaires.
  • N'utilisez pas de nom d'utilisateur / mot de passe - l'utilisation des clés est beaucoup plus sûre.
  • Ne donnez pas la clé racine aux utilisateurs lorsqu'ils ont besoin d'accéder à votre serveur. Créez de nouveaux comptes et demandez-leur de vous donner leur clé publique.

Gestion secrète

Les clés d'API, les informations d'identification, les configurations et toutes les données sensibles doivent être gérées. J’ai toujours du mal à placer ce type de données sur le cloud, non seulement parce que je ne sais pas ce que le fournisseur de cloud peut regarder, mais aussi parce que s’ils obtiennent mon compte, tous mes secrets sont exposés.

  • Gardez autant de secrets locaux que possible.
  • Ne codez pas les secrets dans votre application - créez des fichiers de configuration que vous pouvez stocker en dehors du code de l'application.
  • Ne stockez pas vos secrets dans un dépôt Github public (méfiez-vous du cloud en général).
  • Évitez le texte en clair lorsque vous stockez des mots de passe d'utilisateur et vos propres secrets

Evolutivité

"Dans la plupart des cas en ce qui concerne l'évolutivité, vous n'allez pas en avoir besoin (au début)."

Si vous avez le temps, la volonté et les compétences (ou l'argent), déployer des efforts en matière d'évolutivité pourrait vous apporter des avantages futurs. Sinon, je recommanderais de ne pas en tenir compte et de me concentrer sur les deux points précédents.

Concentrez-vous sur la livraison de votre produit à vos 5 premiers clients, pas à vos 1 000 premiers. Pour créer une infrastructure évolutive, le mieux que vous puissiez faire est de réfléchir aux principes de conception lors de la création de votre application, de sorte qu'il ne vous faudra pas trop de travail à faire avant de passer à la dernière étape. Je devrais le savoir - j’ai été pris au piège de la sur-ingénierie de nombreuses fois.

La conteneurisation

Des outils comme Docker et Kubernetes sont parfaits pour la mise à l'échelle

Un gain facile en matière de dimensionnement consiste à conteneuriser votre application. Découvrez Docker pour un bon guide. Voici quelques conseils:

  • Autoriser la configuration de votre application via des variables d'environnement. Des informations telles que les informations de base de données et le nom d'utilisateur / mot de passe administrateur initial contribueront grandement à la création d'un pipeline CI / CD et à l'automatisation du déploiement de votre application.
  • Conservez autant d’états que possible dans votre conteneur. Cela permettra des déploiements sans état via des outils tels que Kubernetes.
  • Installez vos modules dans le cadre du processus de construction afin de réduire les dépendances et la taille de l'image.

Conservez la documentation de vos serveurs bien documentée

Stockez tout dans le contrôle de version: configurations, scripts et procédures pour préparer les serveurs. Cela vous sauvera quand il s'agit de mettre à l'échelle. J'ai eu à gérer des applications de dimensionnement nécessitant des serveurs configurés de manière très particulière. Si la documentation fait défaut, vous ne pourrez pas vous en passer.

Conclusion

Il faut beaucoup de travail pour mettre en place et maintenir une infrastructure cloud. Les entreprises en démarrage ont le plus de difficulté, car elles n’ont pas le temps et souvent, leurs compétences font défaut en ce qui concerne DevOps. Ce que vous pouvez faire est de vous concentrer sur l'essentiel. Sécurité, stabilité, et si vous avez le temps, évolutivité.

ServiceBot vous aide à faire évoluer votre SaaS en automatisant les déploiements (CI / CD), en gérant vos abonnements et en supprimant les points communs de friction entre vous et vos clients. Vérifiez-le