AWS – Elastic Beanstalk – DevOps

Elastic Beanstalk est un service AWS gratuit (on ne paie que ce qu’on consomme sur les instances) qui permet de manager facilement un bout de cloud. Ce service s’adresse à ceux qui souhaitent deployer dans le cloud une application rapidement en laissant le soin du scaling à AWS (ça se se fait automatiquement). Donc si vous n’avez pas de besoin crucial de finesse de config sur vos environnements, EB est un bon choix. Objectif de cet article : déployer un site web en quelques lignes de commande sur AWS – EB. Staging et Prod. Je ne sais pas vous, mais d’habitude, pour lancer un POC ou un petit site rapide, je passe pas mal de temps à configurer et gérer mon environnement de production, et surtout mes déploiements. J’ai un VPS sur OVH qui me sert pour le moment de dev/prod (ce site étant sur ce serveur). Je passe par un classique sFTP pour uploader mes builds. J’ai toujours voulu automatiser ces tâches. C’est relativement facile depuis un mac ou linux, mais ça a longtemps été galère sur Windows. En ce qui concerne les outils en ligne de commande, j’y arrivais pas ou mal. De plus, mon VPS n’est pas du tout scalable. Du coup, j’ai mis un pied dans le cloud via Azure. Perso je trouve que c’est bien le bordel. Ca évolue régulièrement et j’ai pas de formation Azure. J’ai l’impression qu’il fait sortir l’artillerie lourde dès le début. Pour un dev comme moi, j’ai besoin d’un accès gratuit ou peu cher avec maitrise des coûts dès le départ. Azure dispose d’une CLI, on peut jouer avec. J’ai testé la création de deux instances VM avec du kubernetes, du docker, et tout un tas de trucs qui au final me coute un bras. Ya bien une offre Azure avec qq crédits, mais pour le moment j’ai pas encore trouvé qq chose à moins de 20 balles/mois (et c’est déjà trop !). Moi développeur, je veux tester avant tout, lancer un produit, monter en charge facilement, maitriser mes coûts et ensuite commencer à réfléchir à une architecture/infra « long life ». Amazon propose une offre gratuite sur 12 mois pour tester ses services. En gros on a le droit à des services, mais pour savoir « combien, comment, où, avec qui, tout ça », c’est pas simple (faut attendre la fin du mois, perso j’ai 18$ en 14 jours juste a tester ce qui suit…). On peut monter ses VMs comme je l’ai fait sur Azure, avec une CLI AWS ou sur la Console AWS, mais c’est vraiment long et au départ on a pas besoin d’une armada de trucs. Elastic Beanstalk est la pour ça. AWS EB va s’occuper de tout ce que je ne maitrise pas ou mal. Ce que je veux, c’est deux environnements de staging et de prod. Un site web + une base de données SQL. On couvre l’essentiel de mes besoins pour le moment et à mon avis, les vôtres aussi. Mise en bouche : Avant de commencer à jouer avec la CLI je vous propose deux vidéos intéressantes qui m’ont mis le pied à l’étrier : La première vidéo permet de créer un site web asp.net core mvc tout simple et de l’uploader sur AWS – EB en utilisant la console de management AWS. Cette dernière mal nommé car on pense à une console en ligne de commande. Il n’en est rien. C’est une interface web. Il est intéressant de commencer à se former via celle ci car elle permet de se faire une idée des services et fonctionnalités disponibles. De plus, lorsque nous passerons sur la CLI, c’est un bon moyen de s’assurer du résultat de nos commandes. Faut savoir qu’on peut aussi passer via une API web, donc programmer des trucs avec… La seconde vidéo nous montre comment connecter une base de données à notre site web. En gros le strict minimum pour un site web assez basique, le tout sur le cloud. Il vous faudra bien sur un compte AWS et une carte bancaire. Il existe des offres gratuites sur 12 mois. Il faut faire attention à ce qu’on choisit pour rester dans le pack « gratos ». La CLI – eb La commande line interface d’Elastic Beanstalk (doc officielle) permet d’administrer votre cloud EB comme si vous êtiez sur la console AWS, mais en ligne de commande… L’intérêt est d’automatiser certaines tâches. Le but est de pouvoir coder en dev sur une machine local et de deployer son code en 2 deux trois mouvements sur un environnement cloud Staging et Prod. Je pars du principe que vous avez votre site web de prêt (pour moi ce sera un site asp.net core). On se met à la racine de celui ci via votre terminal préféré. Ci dessus, la console AWS EB qui liste mes environnements et mes applications. Si vous avez fait les tutos des deux vidéos précédentes, vous allez reconnaitre Netcoredemo Le but est de refaire exactement la même chose en ligne de commande. Première commande : eb init Cette commande commence par créer un répertoire .elasticbeanstalk à la racine de votre projet (enfin si vous y êtiez lorsque vous l’avez taper). On y retrouvera quelques fichiers intéressant pour la suite. eb va vous demander les points suivant : Region : pour ma part eu-west-3 Choix de l’app (une existante ou une nouvelle) : une nouvelle App name : DemoDevOps Platform : il y a le choix, pour moi .net core on linux SSH : pour le moment non (c’est à envisager par contre) et biiimmmm : On constate que notre application toute fraîche n’a pas d’environnement d’exécution. Nous allons le créer avec la prochaine commande. Si on regarde dans le répertoire .elasticbeanstalk on y trouve un nouveau fichier config.yml. Il contient tout ce que nous venons de créer sous forme d’un fichier (manifest de deploiement). On verra plus tard qu’on passera via ce fichier pour aller encore plus vite. Deuxième commande : eb create Cette commande va créer un environnement pour notre…

AKS – gestion

Nous allons définir un état souhaité pour le cluster via un fichier de manifeste yaml. Le guide suivant https://docs.microsoft.com/fr-fr/azure/aks/kubernetes-walkthrough nous permet d’utiliser une app toute faite « Azure Vote » écrite en python ainsi qu’une instance Redis. Ces deux éléments sont conteneurisé et disponible sur une base de registre en ligne (docker hub) Le fichier manifeste va faire plusieurs grandes tâches : déploiement kubernetes service kubernetes Déploiement Kubernetes https://docs.microsoft.com/fr-fr/azure/aks/concepts-clusters-workloads#deployments-and-yaml-manifests C’est l’action de « copier » un conteneur sur un ou plusieurs nodes (suivant le nombre de replica). C’est le contrôleur de déploiement qui se charge de gérer les réplicas (création, destruction, mise à jour) Dans cette phase, on peut spécifier des limites de ressources sur l’UC ou la RAM et spécifier l’ouverture d’un port pour le conteneur. Services Kubernetes https://docs.microsoft.com/fr-fr/azure/aks/concepts-network#services Pour simplifier la configuration du réseau pour les charges de travail d’applications, Kubernetes utilise des services pour regrouper logiquement un ensemble de pods et fournir une connectivité réseau. Les types de service suivants sont disponibles : ClusterIP : crée une adresse IP interne pour une utilisation au sein du cluster AKS. NodePort : crée un mappage de port sur le nœud sous-jacent qui rend l’application accessible directement avec l’adresse IP du nœud et le port. LoadBalancer : crée une ressource d’équilibreur de charge Azure, configure une adresse IP externe et connecte les pods demandés au pool back-end d’équilibreurs de charge. ExternalName : crée une entrée DNS spécifique pour faciliter l’accès aux applications. Manifest apiVersion: apps/v1 kind: Deployment metadata:   name: azure-vote-back spec:   replicas: 1   selector:     matchLabels:       app: azure-vote-back   template:     metadata:       labels:         app: azure-vote-back     spec:       nodeSelector:         « beta.kubernetes.io/os »: linux       containers:       – name: azure-vote-back         image: redis         resources:           requests:             cpu: 100m             memory: 128Mi           limits:             cpu: 250m             memory: 256Mi         ports:         – containerPort: 6379           name: redis — apiVersion: v1 kind: Service metadata:   name: azure-vote-back spec:   ports:   – port: 6379   selector:     app: azure-vote-back — apiVersion: apps/v1 kind: Deployment metadata:   name: azure-vote-front spec:   replicas: 1   selector:     matchLabels:       app: azure-vote-front   template:     metadata:       labels:         app: azure-vote-front     spec:       nodeSelector:         « beta.kubernetes.io/os »: linux       containers:       – name: azure-vote-front         image: microsoft/azure-vote-front:v1         resources:           requests:             cpu: 100m             memory: 128Mi           limits:             cpu: 250m             memory: 256Mi         ports:         – containerPort: 80         env:         – name: REDIS           value: « azure-vote-back » — apiVersion: v1 kind: Service metadata:   name: azure-vote-front spec:   type: LoadBalancer   ports:   – port: 80   selector:     app: azure-vote-front   Execution Voici la commande à executer (dans le repertoire de votre fichier yaml) kubectl apply -f azure-vote.yaml Pour vérifier on va taper cette commande kubectl get service azure-vote-front –watch Un tpi tour via un browser sur http://40.71.233.76/ Tindin ! Personnellement je n’ai jamais monté un site web aussi rapidement ! Watch me L’idée maintenant c’est d’aller voir l’interface web de gestion d’AKS. En tapant la commande suivante dans un shell sur le portail web azure (aide) (ça va aussi créer un espace de stockage dédié au shell) ou depuis votre terminal : az aks browse –resource-group myResourceGroup –name myAKSCluster Ca ouvre un tunnel vers AKS et une page sur votre navigateur. Personnellement, j’ai direct 12 erreurs : Ce blog peut aider :https://mohamedradwan.com/2019/06/05/how-to-solve-forbidden-user-error-kubernetes-web-dashboard-for-kubernetes-clusters/ Pour ma part j’ai juste eu à taper cette commande : kubectl create clusterrolebinding kubernetes-dashboard -n kube-system –clusterrole=cluster-admin –serviceaccount=kube-system:kubernetes-dashboard Et bim ! Delete me Pour supprimer le cluster : az aks delete –resource-group TutorialResources –name myAKSCluster –no-wait ou plus brutal : az group delete –name TutorialResources Tarifs Pour l’ensemble des tutos précédents et celui ci, c’est a dire 2 VMs et tout le bardat qui vient avec, un AKS et qq tests, ca m’a couté : 7.18€ Je ne sais pas trop quoi en penser. 3 ou 4€ par jour c’est à la fois pas cher et cher aussi : – cher parce que j’ai concretement pas fait grand chose avec qq requêtes web… – pas cher car j’ai en qq minutes lancer une infra qui m’aurait prit des semaines avec de vrais serveurs. Je n’ai pas encore de notion de tarifs sur Azure. C’est vraiment obscure. L’expérience nous le dira et je ferai un retour la desssus quand ce sera possible. J’ai effacé tous les groupes de resources et ce qu’il contenait, je viens de repartir sur une base fraiche toute neuve, vierge de tout. EDIT : Bon Azure est une pompe a fric pour le simple développeur qui veut juste tester. Heureusement qu’il y a un trial, court, car il se termine aujourd’hui donc 14 jours il me semble. En regardant la projection sur le mois, j’arriverai à 276 €. Hors de question de payer ce montant la. Un jour peut être avec une app qui mérite…