Bien débuter avec AWS

culture générale informatique devops Oct 05, 2022

Hello,

Cette semaine, on part à la découverte d'Amazon Web Services

AWS propose 200+ services, dur de s'y retrouver

J'ai fait une sélection de 13 services que tu es sûr de croiser en tant que Dev.

On va voir à quoi chaque service sert

Comment ca peut s'intégrer dans une archi

Et surtout, en tant que Dev, en quoi ca facilite la vie (ou pas)

On voit à la fin de l'article comment on peut utiliser tout ça sur des cas concrets.

C'est parti

S3 Bucket

 

Selon AWS :
"Service de stockage d'objets qui offre une capacité de mise à l'échelle, une disponibilité des données, une sécurité"
https://aws.amazon.com/fr/s3/

C'est du stockage pure.

Ce qui est chouette, c'est que tu peux utiliser tes buckets par API (du CRUD de fichier/dossier)

Tu peux aussi l'utiliser pour héberger des sites "statiques" : par exemple un build Angular.
Pas besoin de serveur web et tout. Tu mets tous tes fichiers dans le bucket + un peu de conf et ton site est en ligne

Généralement les Buckets servent à stocker des fichiers temporaires "un peu long termes" ou pour les fichiers volumineux (si ton site héberge des vidéos par exemple)

Ils sont très utilisés dans une archi serverless pour persister des fichiers (ben oui, en serverless, tu n'as pas accès à un système de fichier qui dure dans le temps)

Petite particularité : S3 Glacier. Ca peut permet de faire de l'archivage à grande échelle, à moindre couts, mais c'est pas très rapide.

Truc super cool aussi : tu peux associer des actions à des évènments
Exemple : quand un fichier est uploadé dans tel dossier, exécute tel bout de code (des lambdas et/ou des ECS que l'on voit plus bas)

Elastic Beanstalk

 

Selon AWS :
"Service simple à utiliser servant à déployer et mettre à l'échelle des applications et services Web développés avec Java, .NET, PHP, Node.js, Python, Ruby, Go et Docker sur des serveurs familiers, tels qu'Apache, Nginx, Passenger et IIS."
https://aws.amazon.com/fr/elasticbeanstalk/

Tu as besoin de faire tourner ton PHP. D'habitude, tu installes un Linux, puis Apache, puis PHP ...

Avec EB, plus besoin. Tu choisis la version de PHP dont tu as besoin, tu pousses ton code dans un zip. Et ca tourne.

Simple et efficace.

Lambda

 

Selon AWS :
"Service de calcul d'évènement sans serveur qui vous permet d'exécuter du code pour presque tout type d'application ou de service de backend, sans vous soucier de l'allocation ou de la gestion des serveurs"
https://aws.amazon.com/fr/lambda/

Bon, dis autrement, ca permet d'exécuter du code à la demande. Tu ne code plus des app complètes, mais juste des fonctions.
Chaque fonction va dans une Lambda (ca peut prendre des paramètres et tout). Et tu déclenches les Lambda quand tu en as besoin.

C'est ce qui a démocratisé les archis "serverless micro service".

Tu peux déclencher des lambdas en les appellant, sur évènement ou en réaction à une action sur un autre service AWS (on a vu le bucket plus haut, il y a d'autres exemples plus bas)

C'est super utilisé et pratique. La limitation est le temps d'exécution. Ca ne peut tourner que quelques minutes. Si tu veux faire un gros traitement, tu peux privilégier ECS (voir plus bas)

Petite subtilité, comme tu ne peux y mettre qu'une fonction, tu ne peux pas (a priori) faire des include ou utiliser des lib. Tu es obligé de tout inclure dans ta lambda. C'est chiant, ca va l'encontre du fait que la lambda doit rester lisible et légère.

Mais comme chez AWS, ils pensent à tous, tu as les Layer (un peu comme dans les outils de retouche d'images)

Tu peux dire quand dans une layer, je stocke toutes les libs.
Ensuite tu peux dire à tes lambda, lorsqu'elles s'exécutent, "d'inclure" la layer.
Donc quand tu as besoin de maj les libs tu le fais à un seul endroit et toutes tes Lambda ont accès à la maj (sans rien faire de plus)

Api Gateway

 

Selon AWS :
"Service entièrement opéré, qui permet aux développeurs de créer, publier, gérer, surveiller et sécuriser facilement des API à n'importe quelle échelle"
https://aws.amazon.com/fr/api-gateway/

Pour le coup, c'est assez clair.

Tu veux gérer ton API sans code : pour gérer tes endpoints, l'authentification (avant d'autoriser les appels) ...

SQS

 

Selon AWS :
"Service de file d'attente de messagerie entièrement géré qui vous permet de découpler et mettre à l'échelle des microservices, des systèmes distribués et des applications sans serveur"
https://aws.amazon.com/fr/sqs/

On parle de gestion de message (et pas de mail ni de sms).

Tu as plusieurs types de SQS : haute performance, ordonnancement garantie ...

Tu peux gérer les rejeux, les lettres mortes ...

Si tu ne connais pas les systèmes de message, tu peux te renseigner. C'est super intéressant.

Aurora / RDS

 

C'est pour gérer les bases de données (Mysql, Postgre...)

Pas besoin d'installer de linux et de les maintenir. Tu as accès à des BDD prêtes à l'emploi.

DynamoDB

 

https://aws.amazon.com/fr/dynamodb/
"Service de base de données NoSQL rapide et flexible pour des performances de latence de l'ordre de quelques millisecondes à n'importe quelle échelle"

Pas grand chose de plus à ajouter. Ce qui est important c'est que toi tu ne t'occupes pas des serveurs. Tu ne fais qu'utiliser le service.

EC2

 

Selon AWS :
"Capacité de calcul sécurisée et redimensionnable pour pratiquement toutes les charges de travail"
https://aws.amazon.com/fr/ec2/

Dit autrement, c'est un VPS comme on a l'habitude. Tu installes ton OS, tu t'y connectes, tu configures tout à la main.
De façon générale, on essaye de ne plus utiliser ça pour préférer des services prêts à l'emploi.

Plusieurs services en vrac

 

Les VPC te permettent de gérer tes "réseaux" au sein d'AWS. C'est très utile pour faire communiquer tes services sans passer par internet
Donc top pour gérer un peu la sécurité

CloudFront te permet de gérer un CDN pour stocker tes assets

Les services SES et SNS te permettent de gérer les notifications au sens large : envoyer des mails, de sms, de notification push

CloudWatch centralise toutes les logs de ton infra chez AWS. Quand tu as des Lambda (serverless donc), tu n'as pas de dossier log pour voir ce qu'il se passe. Donc il y a les log group de Cloudwatch.

Cognito te permet de gérer les users de tes app. Toujours dans un monde de micro service, il te faut une "bdd" centralisée qui peut être interrogée facilement. Plus besoin de dev ça toi même. C'est encore plus efficace quand tu as plusieurs app mais que tu souhaites mutualiser la base user (au sein d'une entreprise par exemple).

AWS CLI te permet de faire le kéké et d'administrer tes services AWS par la ligne de commande au lieu de passer par l'interface web comme un noobs :p

Cloudformation te permet de faire de l'infra as code. Au lieu d'aller sur la page d'AWS (ou un CLI) pour configurer tous les services, tu peux "coder" la configuration. AWS se charge alors de mettre ton infra dans le même état que donné par ton code.

ECS te permet de gérer des tâches qui vont exécuter tes images dockers. Tu peux stocker tes images buildées grâce à ECR.

IAM te permet de gérer les droits pour administrer ton infra aws. Ca permet aussi de gérer les droits entre tes services (tel service a le droit d'agir sur tel S3 par exemple).

Les régions te permettent de choisir géographiquement où tes services vont tourner. Pour être RGPD compliant, être au plus proche de tes users ...

Si on résume

 

Bon là on a survolé un paquet de trucS, comme d'hab pour passer de 0 à 1. Tu pourras orienter tes recherches sur les parties qui t'intéressent.

On peut essayer, quand même d'imaginer une archi pour une appli web :

  • Tu as front en JS que tu stockes sur un S3

  • Ton front fais des appels API géré par ApiGateway

  • Les endpoints API déclenches tes lambdas

  • Tu stockes tes données sur Aurora

  • Tes users s'enregistre avec Cognito

    • Ta lambda envoie un mail de confirmation via SES

  • Toute l'activité de tes users sont envoyé dans une Queue SQS

    • Cette Queue SQS traite en asynchrone les données grâce à une lambda qui se charge de stocker les infos dans une base NoSQL avec DynamoDB

  • Côté Backend, tu héberges ton appli php sur EB

    • Back qui affiche le dashboard des activités des users présentes dans la DynamoDB par une connexion en direct grâce à ton VPC

  • Tu supervises la bonne exécution de tes lambda dans Cloudwatch

    • Tu as même branché ton AWS Grafana sur Cloudwatch pour plus d'observabilité

  • Et tu configures tout ça avec Cloudformation et tu fais de l'infra as Code

Cerise sur le gateau : tout est mis dans une CI/CD :p

De manière générale, si tu as besoin d'un truc, il y a de fortes chances qu'AWS le fasse.

Voilà. J'espère que ca t'as été utile.  

Imrane 🏖

La newsletter pour ne rien louper

Rejoins les 2500 lecteurs de  la newsletter pour obtenir des conseils, des stratégies et des ressources pour développer et monétiser tes compétences Tech.