La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Formation Introduction à JClouds. Formation AWSBoto 2.

Présentations similaires


Présentation au sujet: "Formation Introduction à JClouds. Formation AWSBoto 2."— Transcription de la présentation:

1 Formation Introduction à JClouds

2 Formation AWSBoto 2

3 Plan Présentation & Installation Concepts généraux Zoom sur EC2 et S3 Alternatives Formation AWSBoto 3

4 Présentation & Installation Formation AWSBoto 4

5 Historique Projet Apache depuis 2011 API Java & Clojure API matures : ComputeService, BlobStore Supporte : AWS Eucalyptus Google Storage OpenStack OpenNebula Azure Formation AWSBoto 5

6 Installer JClouds Utilisation de Maven Formation AWSBoto 6

7 Concepts Généraux Formation AWSBoto 7

8 Principes de base Module principal : « boto » Configuration Logs Méthodes de convenance connect_ pour obtenir un objet Connection à un service AWS spécifique Un module boto. par service AWS (ex : boto.ec2, boto.sqs ) Chaque module fournit une méthode connect_to_region() Formation AWSBoto 8

9 Connections On récupére un objet connection à un service pour une région donnée C'est à travers cet objet qu'on manipulera notre service Paramètres communs aux méthodes connect_ () aws_access_key aws_secret_access_key is_secure : force l'utilisation de HTTPS region : objet boto..regioninfo.RegionInfo initialisé avec le nom de la région debug Formation AWSBoto 9

10 Documentation en ligne Formation AWSBoto 10

11 EC2 Formation AWSBoto 11

12 Instance (1) Un objet boto.ec2.instance.Instance représente une instance EC2 Quelques attributs utiles id : identifiant de l'instance groups : groupe de sécurité (politique pare-feu) State : état de l'instance instance_type : type de l'instance image_id : identifiant de l'AMI public_dns_name : nom DNS publique de l'instance private_dns_name : nom DNS privé de l'instance Formation AWSBoto 12

13 Instance (2) Opérations courantes start() démarrer l'instance stop() mettre en pause l'instance (instance EBS uniquement) terminate() arrêter définitivement l'instance reboot() redémarrer une instance en pause add_tag()/remove_tag() ajouter/enlever un tag à l'instance update() mettre à jour les informations de l'instance Formation AWSBoto 13

14 Réservation boto.ec2.instance.Reservation représente une réservation EC2 Conteneur d'instances (attribut : instances ) Une méthode utile : stop_all() Formation AWSBoto 14

15 Connexion à EC2 import boto import boto.ec2 conn = boto.connect_ec2() # alternatives # conn = boto.ec2.EC2Connection() Formation AWSBoto 15

16 Lister les AMI disponibles # Lister les AMI SysFera amis = conn.get_all_images(owners= [ ]) # récupérer une AMI particulière ami = conn.get_image(image_id='ami-2ea50247') Formation AWSBoto 16

17 Démarrer une instance EC2 Reservation = conn.run_instances('ami-xxx', key_name= key_name, security_groups=['ssh-group'], instance_type='m1.small', user_data=user_data) instance = reservation.instances[0] Formation AWS Boto 17

18 Connaître l'état d'une instance EC2 # mettre à jour les informations instance.update() # afficher les informations print instance.state print instance.public_dns_name print instance.launch_time Formation AWSBoto 18

19 Terminer une instance EC2 # récupérer la réservation resa = conn.get_all_instances(filters={'tag:Name' : 'prod1'})[0] # récupérer l'instance instance = resa[0] instance.terminate() # on peut également tuer toutes les instances # resa.terminate_all() Formation AWSBoto 19

20 Créer un groupe de sécurité try : # on vérifie que le groupe n'existe pas group = conn.get_all_security_groups('ssh-access') except EC2ResponseError as e : # on crée un groupe group = conn.create_security_group('ssh-access', 'open ssh port') Formation AWSBoto 20

21 Configurer un groupe de sécurité # ajouter une règle group.authorize('tcp', 22, 22, ' /0') group.authorize('tcp', 80, 80, ' /0') # supprimer une règle group.revoke('tcp', 80, 80, ' /0') Formation AWSBoto 21

22 Allouer une EIP eip = conn.allocate_address() conn.associate_address(instance.id, eip.public_ip) # ou bien instance.use_ip(eip) conn.disassociate_address(eip) Formation AWSBoto 22

23 EBS # créer un volume de 2Go vol = conn.create_volume(2, 'eu-west-1a', snapshot=None) # attacher le volume conn.attach_volume(volume_id=vol.id, instance_id=instance.id, '/dev/sdb') # créer un snapshot conn.create_snapshot(vol.id) Formation AWSBoto 23

24 S3 Formation AWSBoto 24

25 Connexion à S3 import boto from boto.s3.connection import Location from boto.s3.key import Key conn = boto.connect_s3() Formation AWSBoto 25

26 Créer un bucket # créer un bucket bucket_EN = conn.create_bucket('thumbnails') # créer un bucket dans la région eu-west-1 bucket_FR = conn.create_bucket('vignettes', location=Location.EU) Formation AWSBoto 26

27 Lister les bucket rs = conn.get_all_buckets() for bucket in rs : print bucket.name Formation AWSBoto 27

28 Stocker des données (1) # stocker une image à partir d'un fichier k = Key(bucket_FR) k.key = 'boto_vermelho.jpg' k.set_content_from_filename('~/images/boto_vermelho. jpg') # télécharger un objet dans un fichier k.get_content_to_filename('foobar.jpg) Formation AWSBoto 28

29 Stocker des données (2) # stocker des données brutes k.key = 'vermelho' k.set_content_from_string('rose', headers = {'Content-Type':'text/plain'}) # plus tard k = bucket.get_key('vermelho') content = k.get_content_as_string() Formation AWSBoto 29

30 Lister le contenu d'un bucket # récupérer un bucket à partir de son nom bucket = conn.lookup('toto') keys = bucket.list() # keys = bucket.get_all_keys() for k in keys : print '{0} (size : {1} ko)'.format(k.name, k.size) # lister les clés préfixé par test/bidule Keys = bucket.get_all_keys(prefix='test/bidule',delimiter ='/') Formation AWSBoto 30

31 Métadonnées k.set_metadata('lieu', 'amazonie') lieu = k.get_metadata('lieu') Formation AWSBoto 31

32 Gestion des ACL # rendre public un bucket b.make_public(recursive=True) # rendre public un objet à partir de sa key k.make_public() k.generate_url(3600) # durée de vie : 1h k.set_acl('public-read-write') k.set_acl('private-read-write') Formation AWSBoto 32

33 ELB Formation AWSBoto 33

34 Connexion à ELB import boto from boto.ec2.elb import HealthCheck conn = boto.connect_elb() Formation AWSBoto 34

35 Définir un HealthCheck # un check toutes les 20s # sur la ressource # 3 checks réussis => ressource active # 5 checks échoués => ressource inactive hc = HealthCheck(interval=20, healthy_threshold=3, unhealthy_threshold=5, target='HTTP:8080/health') Formation AWSBoto 35

36 Création d'un load balancer zones = ['us-east-1a', 'us-east-1b'] ports = [(80, 8080, 'http'), (443, 8443, 'https')] lb = conn.create_load_balancer('lb1', zones, ports) # associer notre HealthCheck à notre LB lb.configure_health_check(hc) # récupérer le nom DNS du LB print lb.dns_name Formation AWSBoto 36

37 Ajouter des instances à un LB # ajouter des instances instances = ['i_xxxx', 'i_yyyy'] lb.register_instances(instances) # les retirer lb.deregister_instances(instances) Formation AWSBoto 37

38 Manipuler les zones dans un LB # désactiver une zone lb.disable_zone(['us-east-1a']) # activer une zone lb.enable_zone(['us-east-1b']) Formation AWSBoto 38

39 Détruire un Load Balancer lb.delete() Formation AWSBoto 39

40 SQS Formation AWSBoto 40

41 Connexion à SQS import boto from boto import Message conn = boto.connect_sqs() Formation AWSBoto 41

42 Création d'une file q = conn.create_queue('tasks') # récupérer l'url d'une queue print q.url https://queue.amazonaws.com/ /tasks Formation AWSBoto 42

43 Récupérer une file # lister l'ensemble des files rs = conn.get_all_queues() for i in rs : print i.name q = conn.get_queue('tasks') Formation AWSBoto 43

44 Envoi d'un message msg = message() # par défaut encodage base64 msg.set_body('hello world') msg.attributes['hostname'] = socket.gethostname() q.write(msg) Formation AWSBoto 44

45 Consommer un message (1) # nombre de messages dans une queue print q.count() # récupérer un message msg = q.read() # récupérer plusieurs messages msgs = q.get_all_messages(num_messages=20) # afficher le contenu du message print msg.get_body() Formation AWSBoto 45

46 Consommer un message (2) # attention récupérer un message, ne veut pas dire => consommer ! print q.count() # valider la consommation msg.delete() # ou q.delete_message(msg) Formation AWSBoto 46 #

47 Sauvegarder/Restaurer une file # dans un fichier q.save_to_filename('tasks_backup', sep='\n') q.load_from_filename('tasks_backup') # dans S3 (sous le schéma / ) q.save_to_s3(bucket_bak, prefix=None) q.load_from_s3() Formation AWSBoto 47

48 Détruire notre file # vider la file q.clear() # destruction Conn.delete_queue(q) Formation AWSBoto 48

49 SimpleDB Formation AWSBoto 49

50 Connexion à SimpleDB import boto conn = boto.connect_sdb() Formation AWSBoto 50

51 Création d'un domaine # on vérifie que le domaine n'existe pas domain = conn.lookup('commandes') if domain is None : domain = conn.create_domain('commandes') # lister les domaines rs =conn.get_all_domains() # autre façon de récupérer un domaine domain = conn.get_domain('commandes') Formation AWSBoto 51

52 Métadonnées associés à un domaine md = domain.domain_metadata() # lister les attributs disponibles dir(md) # lister le nombre d'items dans le domaine print md.item_count Formation AWSBoto 52

53 Insérer un item # en un coup domain.put_attributes('cmd1', {'id' : 1, 'nb' : 7}) # en plusieurs coups item = domaine.new_item('cmd2') item['id'] = 1 item.add_value('nb', 9) item.save() # en batch domain.put_attributes({'cmd4' : {'id' : 1, 'nb' : 7}}) Formation AWSBoto 53

54 Récupérer un item (1) item = domain.get_item('cmd7') # forcer une lecture vérouillée item = domain.get_item('cmd7', consistent_read=True) Formation AWSBoto 54

55 Récupérer un item (2) # possibilité d'utiliser « SQL » rs = dom.select(select * from commandes where id="7"') for i in rs : print i Formation AWSBoto 55

56 Sauvegarde XML doc = domain.to_xml() Formation AWSBoto 56

57 Alternatives Formation AWSBoto 57

58 Libcloud (1) Bibliothèque Python Couche d'abstraction entre les API des différents fournisseurs d'IaaS Supporte Service d'instances virtuelles Service de stockage Service de load balancing Service de DNS Formation AWSBoto 58

59 Libcloud (2) Plus de 26 fournisseurs supportés AWS, Rackspace, Eucalyptus, OpenStack, OpenNebula, CloudSigma, Google Storage, Vsphere, Gandi.net, etc... Formation AWSBoto 59 https://libcloud.apache.org

60 Deltacloud (1) Formation AWSBoto 60

61 Deltacloud (2) Couche d'abstraction sous forme d'API REST Développé en Ruby par Red Hat Accessible directement par des requêtes et des bibliothèques clients (Ruby, Python, C, C++) et via Curl Top Level Project Apache Formation AWSBoto 61

62 Deltacloud (3) Architecture flexible : Un proxy REST 3 API en frontend : deltacloud, EC2 et CIMI Des pilotes pour gérer différents fournisseurs Supporte environ 15 fournisseurs AWS, Rackspace, OpenStack, OpenNebula, Eucalyptus, Azure (stockage), vSphere etc. Pilote « mock » pour tester ses applications ! Formation AWSBoto 62

63 Formation AWSBoto 63 Autres Langages SDK officiel pour les langages PHP, Ruby, Java,.Net https://aws.amazon.com/developertools En Ruby, l'excellent Fog : Gère plusieurs fournisseurs Supporte libvirt Mode « mock » pour les tests

64 Formation AWSBoto 64 Bibliographie

65 Mise en pratique Formation AWSBoto 65


Télécharger ppt "Formation Introduction à JClouds. Formation AWSBoto 2."

Présentations similaires


Annonces Google