Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Scripting Python sous Linux
  3. Python et le Cloud
Extrait - Scripting Python sous Linux Développez vos outils système (2e édition)
Extraits du livre
Scripting Python sous Linux Développez vos outils système (2e édition)
3 avis
Revenir à la page d'achat du livre

Python et le Cloud

Python et l’informatique en Nuage (« Cloud Computing »)

1. Introduction « Bonus » par ChatGPT

Petite parenthèse sur l’intelligence artificielle avant d’aborder réellement le chapitre.

Depuis quelque temps sur la toile et même au journal télévisé, ChatGPT, une « intelligence artificielle », fait beaucoup parler d’elle.

ChatGPT : ce nom provient du mot anglais « chat » signifiant échanges de messages sur le net et de GPT acronyme de « Generative Pre-trained Transformer » (Transformateur génératif pré-entraîné).

Cet outil est très intéressant car il peut vraiment être utile et d’ailleurs voici sa réponse quand on lui demande d’écrire une courte introduction à AWS (Amazon Web Services).

Voici son texte (après traduction en français) :

« Amazon Web Services (AWS) est une plate-forme de cloud computing qui fournit une gamme de services et d’outils pour créer et gérer des applications, des sites Web et d’autres ressources en ligne. Il est exploité par Amazon, l’une des entreprises technologiques les plus importantes et les plus prospères au monde.

AWS propose une large gamme de services, notamment l’informatique, le stockage, la mise...

AWS et Python

Voici un exemple de ce l’on peut faire avec cette librairie (issu de la page de présentation du Kit SDK AWS pour Python).

for i in ec2.instances.all():  
    if i.state['Name'] == 'stopped':  
        i.start() 

Quelques explications :

AWS EC2 est le service qui permet de créer des instances (machines virtuelles) sur le cloud.

La librairie boto3 fournit un objet ec2 qui permet de parcourir les instances pour un compte donné et de retourner un objet liste.

Il est ainsi possible de démarrer les instances qui le nécessitent en fonction de leur état, tout simplement en utilisant la méthode start().

La majorité des services AWS sont accessibles en Python avec cette librairie.

Mais avant de se lancer tête baissée dans du scripting, il est nécessaire d’appréhender certains points et notamment de connaître certaines bonnes pratiques.

Les bonnes pratiques avec Amazon Web Services

AWS facture à l’utilisation, mais certaines ressources comme le stockage ou les adresses IP publiques réservées ont un coût, même si elles ne sont pas utilisées.

Par exemple une petite instance de type t2.micro ne coûte rien quand elle est arrêtée, par contre le stockage associé, lui, est réservé et même si le coût est minime, le compteur tourne.

Exemple avec 50 Go (c’est une estimation)

0,053 $ / Go / Mois = 2,54 € par mois pour 50 Go

Aussi, pour une utilisation régulière, il est préférable de mettre en place une structure basée sur une organisation (AWS Organization), dans laquelle il y a un compte principal (ou compte de gestion) et de multiples comptes « racine ».

Seul le compte principal (ou de gestion) nécessite un moyen de paiement, son but est de regrouper les coûts générés par les autres comptes.

Ainsi il sera facile de retrouver par compte et par service AWS le détail de ce qui est facturé.

Les autres comptes, dits « racine », permettent l’allocation de ressources et de services AWS, cela permet d’avoir un compte racine par projet.

Chaque nouveau compte bénéficie de l’offre gratuite pendant un an, ce qui permet largement d’effectuer des tests, à condition d’utiliser les ressources bénéficiant de l’offre gratuite.

Le compte principal et les comptes racine sont liés à des adresses mail.

Ainsi, quand un projet est terminé, il est possible de clôturer le compte et ainsi être sûr de ne plus être facturé. Mais cela sous-entend que l’adresse mail ne sera plus réutilisable avec AWS.

Dans les bonnes pratiques, les comptes racine et de gestion ne doivent pas être utilisés comme comptes de travail pour l’allocation de ressource, même si c’est possible.

Il est préférable de créer un compte AWS IAM (Identity and Access Management) et de lui donner les droits d’administration.

Il est judicieux d’appliquer ces bonnes pratiques pour une utilisation régulière et dans la durée des services AWS.

1. Les prérequis

Quelques prérequis...

AWS Lambda et Python

Dans les services que propose AWS, certains sont très simples à utiliser et AWS Lamdba fait partie de cette catégorie.

AWS Lambda permet d’exécuter du code sans allouer de ressources, parfait pour automatiser des actions comme l’arrêt d’exploitation de toutes les instances et la remise en route de celles-ci par exemple.

Voici un exemple concret :

Une connexion à la console AWS sur le compte de travail est nécessaire.

1. Définition des autorisations

La première chose à faire est de créer un rôle IAM (Identity and Access Management) et de lui donner les autorisations nécessaires pour effectuer les tâches demandées. 

Le service IAM, dans les grandes lignes, permet de contrôler l’accès aux ressources à travers des utilisateurs, des groupes d’utilisateurs et des rôles.

Dans le cas présent, il faut avoir les droits d’exécution d’une fonction Lambda et un accès Lecture/Écriture sur les instances existantes.

Ce qui se traduit par les autorisations suivantes :

  • AWSLambdaBasicExecutionRole

  • AmazonEc2FullAccess

Il y a beaucoup de rôles et de stratégies existantes, cependant une rapide recherche sur le net permet de trouver la « recette » qui convient pour la fonction cible.

La création d’un rôle, quand on connaît les autorisations que l’on veut accorder, se fait en trois étapes :

  • Sélection d’une entité de confiance.

  • Ajout des autorisations.

  • Vérification et création.

images/p455.png

Création d’un rôle IAM

Ensuite il faut rajouter la modification du rôle pour ajouter toutes les autorisations nécessaires.

Voici la procédure à suivre :

Étape...

AWS et Python

Les fonctions Lambda permettent d’interagir sur des objets existants.

Et la librairie boto3 derrière tout cela est capable de beaucoup plus.

boto3 peut aussi créer, configurer et gérer des Services AWS comme Amazon Elastic Compute Cloud (EC2).

Ainsi, il est possible d’utiliser cette librairie à distance et non plus dans un environnement cloisonné comme AWS Lambda.

1. AWS boto3 Ligne de commande, premiers pas

La première chose à faire pour utiliser le module boto3 est de modifier le compte de travail (admin_splsl) et de lui assigner une clé secrète.

Cela se passe dans AWS IAM et il faut modifier l’utilisateur concerné et aller dans l’onglet Informations d’identifications de sécurité puis dans la partie Clé Accès.

Il suffit alors de créer une clé d’accès sans oublier de noter cette clé et la clé d’accès secrète. Il est possible aussi de charger un fichier au format CSV.

La deuxième chose à faire est d’installer aws-cli avec apt install aws-cli ou yum install aws-cli.

puis de le configurer avec aws configure :

$ aws configure 
AWS Access Key ID [None]: <CLE SECRETE> 
AWS Secret Access Key [None]: <CODE ACCES CLE SECRETE> 
Default region name [None]: eu-west-3 
Default output format [None]: ENTER  

Après activation de l’environnement Python, il suffit de lancer tout simplement :

pip install boto3 

Il est possible de saisir un premier script de test :

#fichier : tb1.py  
  
import boto3  
ec2 = boto3.client('ec2')  
response = ec2.describe_instances()  
print(response) 

Le résultat dépend des instances configurées.

L’environnement Python avec la librairie boto3 est prêt.

Quelques explications sur ce script de test :

ec2 = boto3.client(‘ec2') 

La librairie boto3 fournit des objets sur les ressources AWS, ici il s’agit d’un objet EC2 qui permet d’agir sur les instances.

Il est possible d’utiliser cette librairie de plusieurs manières via boto3.clientboto2.resource et boto3.session.

boto3.client est le plus bas niveau en termes d’abstraction et permet d’accéder à tous les services AWS....