Introduction au AWS SDK Java

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Introduction au AWS SDK Java Formation Introduction au AWS SDK Java 1 1 1

Introduction au AWS SDK Java Formation AWS Boto Introduction au AWS SDK Java 2 2 2 2

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

Présentation & Installation Formation AWS Boto Présentation & Installation 4 4 4 4

Historique API Java (utilisable avec Groovy) Intégration avec Eclipse Formation AWS Boto Historique API Java (utilisable avec Groovy) Intégration avec Eclipse Supporte les services suivants : EC2 (auto-scaling, ELB, CloudWatch) S3, Glacier, Datapipeline, EMR CloudFront, CloudSearch RDS, DynamoDB, SimpleDB SQS, SNS, SES Route53, elasticBeanstalk 5 5 5 5

Installer AWS SDK for Java Formation AWS Boto Installer AWS SDK for Java SDK Eclipse: ajouter le channel AWS http://aws.amazon.com/eclipse AWS SDK for Java : http://aws.amazon.com/fr/sdkforjava/ 6 6 6 6

Formation AWS Boto Concepts Généraux 7 7 7 7

Principes de base Paquetage principal : «com.amazonaws» Formation AWS Boto Principes de base Paquetage principal : «com.amazonaws» Authentification « com.amazonaws.auth » Services « com.amazonaws.services.xxx » Chaque connexion à un service Amazon est représenté par une interface « AmazonXXX » (ie : AmazonEC2) « AmazonXXXClient » : interface synchrone « AmazonXXXClientAsync » : interface asynchrone, retourne des futures 8 8 8 8

Credentials Interface « com.amazonaws.auth.AWSCredentials » Formation AWS Boto Credentials Interface « com.amazonaws.auth.AWSCredentials » Implémentations : « BasicAWSCredentials(String accessKey, String secretKey) » « PropertiesCredentials(File file) » « PropertiesCredentials(InputStream stream) »[EDF - Évolution Exemple de fichier properties : accessKey=XXXX secretKey=YYYY 9 9 9 9

Credentials Providers Formation AWS Boto Credentials Providers Interface « com.amazonaws.auth.AWSCredentialsProvider » Implémentations : « AWSCredentialsProviderChain(AWSCredentialsProvid er ...credentialsProviders) » « ClasspathPropertiesFileCredentialsProvider » « SystemPropertiesCredentialsProvider » : vérifie les propriétés java « aws.accessKeyId » et « aws.secretKey » 10 10 10 10

Formation AWS Boto Client On récupére un objet « <service>Client » à un service pour une région donnée C'est à travers cet objet qu'on manipulera notre service Paramètres communs aux constructeurs AWSCredentials ou AWSCredentialsProvider ClientConfiguration : permet de configurer différents aspects du client REST (proxy, retries, timeout,protocoles -HTTP/HTTPS-) 11 11 11 11

Requests Paquetage « com.amazonaws.<service>.model » Formation AWS Boto Requests Paquetage « com.amazonaws.<service>.model » Les objets « request » représente une requêtes HTTP C'est à travers cet objet qu'on fournira les paramètres de notre requêtes Ceux-ci sont fourni à une méthode du client pour soumission à AWS 12 12 12 12

Model Paquetage « com.amazonaws.<service>.model » Formation AWS Boto Model Paquetage « com.amazonaws.<service>.model » Contient les représentations des différents concepts : Instance, Bucket, SecurityGroup, etc. 13 13 13 13

Region Paquetage « com.amazonaws.regions » Formation AWS Boto Region Paquetage « com.amazonaws.regions » Enum « regions.Region » listant les différentes régions Classe « regions.Region »/ « regions.RegionUtils » Permet de lister les régions Obtenir l'objet région à partir d'une chaine ID Lister les régions supportant un service AWS donné Récupérer l'endpoint d'un service Créer un client pour un service 14 14 14 14

Documentation en ligne Formation AWS Boto Documentation en ligne http://aws.amazon.com/fr/sdkforjava/ 15 15 15 15

Formation AWS Boto EC2 16 16 16 16

Formation AWS Boto Connexion à EC2 AWSCredentialsProvider provider = new ClasspathPropertiesFileCredentialsProvider() ; AmazonEC2 ec2 = new AmazonEC2Client(provider) ; # connexion à une autre région Region usWest2 = new Region.getRegion(Regions.US_WEST_2) ; ec2.setRegion(usWest2) ; 17 17 17 17

Lister les AMI disponibles Formation AWS Boto Lister les AMI disponibles # Lister les AMI SysFera DescribeImagesRequest request = new DescribeImagesRequest() ; Request.setOwners(Arrays.asList('443252058477'))  ; DescribeImagesResults res = ec2.describeImages(request) ; List<Images> images = res.getImages() ; # récupérer une AMI particulière Request.setImageIds(Arrays.asList('ami- 2ea50247') ; 18 18 18 18

Démarrer une instance EC2 Boto Formation AWS Démarrer une instance EC2 RunInstancesRequest request = new RunInstancesRequest(ami, 1, 1) ; RunInstancesResult res = ec2.runInstances(request) ; Reservation reservation= res.getReservation() ; List<Instance> instances = reservation.getInstances() ; 19 19 19 19

Connaître l'état d'une instance EC2 Formation AWS Boto Connaître l'état d'une instance EC2 # récupérer les informations InstanceState state = instance.getState() ; String dns = instance.getPublicDnsName() ; String ip = instance.getPublicIpAddress() ; Date launchDate = instance.getLaunchTime() ; 20 20 20 20

Terminer une instance EC2 Formation AWS Boto Terminer une instance EC2 # récupérer la réservation DescribeInstancesRequest request = new DescribeInstancesRequest() ; Filter filter = new Filter('tag:name', Arrays.asList('prod1')) ; request.setFilters(Arrays.asList(filter)) ; DescribeInstancesResult res = ec2.describeInstances(request) ; List<Reservation> reservations = result.getReservations() ; Reservation resa = reservations[0] ; # récupérer l'instance instance = resa[0] instance.terminate() # on peut également tuer toutes les instances # resa.terminate_all() 21 21 21 21

Terminer une instance EC2 Formation AWS Boto Terminer une instance EC2 # récupérer l'instance List<Instance> instances = reservation.getInstances() ; List<String> ids = new List<String>() ; for(Instance i : instances) { ids.add(i.getInstanceId()); } TerminateInstancesRequest request = new TerminateInstancesRequest() ; request.setImageIds(ids) ; Ec2.terminateInstances(request) ; 22 22 22 22

Créer un groupe de sécurité Formation AWS Boto Créer un groupe de sécurité CreateSecurityGroupRequest request = new CreateSecurityGroupRequest('ssh-access', 'open ssh port') ; ec2.createSecurityGroup(request) ; 23 23 23 23

Configurer un groupe de sécurité Formation AWS Boto Configurer un groupe de sécurité # ajouter une règle IpPermission ssh = new IpPermission(); ssh.withFromPort(22).withToPort(22).withIpRanges('0. 0.0.0/0'); IpPermission http = new IpPermission(); http.withFromPort(22).withToPort(22).withIpRanges('0 .0.0.0/0'); List<IpPermission> perms = Arrays.asList(ssh, http) ; AuthorizeSecurityGroupIngressRequest request = new authorizeSecurityGroupIngressRequest('ssh-access', perms); 24 24 24 24

Configurer un groupe de sécurité Formation AWS Boto Configurer un groupe de sécurité # supprimer une règle RevokeSecurityGroupIngressRequest request = new RevokeSecurityGroupIngressRequest('ssh-access', perms); 25 25 25 25

Formation AWS Boto Allouer une EIP AllocateAddressRequest request = new Alloca teAddressRequest(); AllocateAddressResult res = ec2.allocateAddress(request); String eip = res.getPublicIp(); # associer l'ip à une machine AssociateAddressRequest request conn.associate_address(instance.id, eip.public_ip) # ou bien instance.use_ip(eip) conn.disassociate_address(eip) 26 26 26 26

Formation AWS Boto Associer une EIP AssociateAddressRequest request = new AssociateAddressRequest(id, eip); ec2.associateAddress(request); DisassociateAddressRequest request = new DisassociateAddressRequest(eip); ec2.disassociateAddress(request); 27 27 27 27

EBS # créer un volume de 2Go Formation AWS Boto EBS # créer un volume de 2Go CreateVolumeRequest request = new CreateVolumeRequest(2, 'eu-west-1a'); CreateVolumeResult res = ec2.createVolume(request); Volume vol = res.getVolume(); # attacher le volume AttachVolumeRequest request = new AttachVolumeRequest(volId, instanceId, '/dev/sdb'); ec2.attachVolume(request); 28 28 28 28

EBS # créer un volume de 2Go Formation AWS Boto EBS # créer un volume de 2Go CreateSnapshotRequest request = new CreateSnapshotRequest(volId, 'description'); CreateSnapshotResult res = ec2.createSnapshot(request); Snapshot snap = res.getSnapshot(); 29 29 29 29

Formation AWS Boto S3 30 30 30 30

Formation AWS Boto Connexion à S3 AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider()); 31 31 31 31

Créer un bucket # créer un bucket Formation AWS Boto Créer un bucket # créer un bucket CreateBucketRequest request = new CreateBucketRequest(bucket); Bucket b = s3.createBucket(request); 32 32 32 32

Formation AWS Boto Lister les buckets ListBucketsRequest request = new ListBucketsRequest(); List<Bucket> buckets = s3.listBuckets(request); for (Bucket b: buckets) { String s = String.format("====\n" + "name: %s\n" + "Date: %s\n", b.getName(), b.getCreationDate()); System.out.println(s); } 33 33 33 33

Stocker des données (1) # stocker une image à partir d'un fichier Formation AWS Boto Stocker des données (1) # stocker une image à partir d'un fichier PutObjectRequest request = new PutObjectRequest(bucket_name, 'boto', new File('boto_vermelho.jpg')); s3.putObject(request); 34 34 34 34

Stocker des données (2) # télécharger un objet dans un fichier Formation AWS Boto Stocker des données (2) # télécharger un objet dans un fichier GetObjectrequest request = new GetObjectRequest(bucket_name, 'boto'); S3Object res = s3.getObject(request); S3ObjectInputStream stream = res.getObjectContent(); IOUtils.copy(stream, new FileOutputStream("test.jpg")); 35 35 35 35

Lister le contenu d'un bucket Formation AWS Boto Lister le contenu d'un bucket ListObjectRequest request = new ListObjectRequest().withBucketName('toto'); ObjectListing res = S3.listObject(request); List<S3ObjectSummary> summaries = res.getObjectSummaries(); 36 36 36 36

Formation AWS Boto ELB 37 37 37 37

Formation AWS Boto Connexion à ELB AmazonElasticLoadBalancing elb = new AmazonElasticloadBalancing(provider); 38 38 38 38

Définir un HealthCheck Formation AWS Boto Définir un HealthCheck # un check toutes les 20s # sur la ressource HTTP:8080/health # 3 checks réussis => ressource active # 5 checks échoués => ressource inactive HealthCheck hc = new HealthCheck('HTTP:8080/health', 20, 20, 5, 3); 39 39 39 39

Création d'un load balancer Formation AWS Boto Création d'un load balancer List<String> zones = Arrays.asList('us-east-1a', 'us-east-1b'); Listener http = new Listener('http', 80, 8080); Listener https = new Listener('https', 443, 8443); List<Listener> listeners = Arrays.asList(http, https); CreateLoadBalancerRequest request = new CreateLoadBalancerRequest('lb1', listeners, zones) ; CreateLoadBalancerResult res = elb.createLoadBalancer(request); 40 40 40 40

Création d'un load balancer Formation AWS Boto Création d'un load balancer # récupérer le nom DNS du LB String dns = res.getDNSName() ; # configurer le healthCheck ConfigureHealthCheckRequest request = new ConfigureHealthCheckRequest('lb1', hc); elb.configureHealthCheck(request) 41 41 41 41

Ajouter des instances à un LB Formation AWS Boto Ajouter des instances à un LB # ajouter des instances List<Instances> instances = Arrays.asList(new Instance('i-xxx'), new Instance('i-yyy')); RegisterInstancesWithLoadBalancerRequest request = new RegisterInstancesWithLoadBalancerRequest('lb1', instances); Elb.registerInstancesWithLoadBalancer(request); 42 42 42 42

Retirer des instances à un LB Formation AWS Boto Retirer des instances à un LB # retirer des instances DeregisterInstancesFromLoadBalancerRequest request = new DeregisterInstancesFromLoadBalancerRequest('lb1', instances); elb.deregisterInstancesFromLoadBalancer(request); 43 43 43 43

Manipuler les zones dans un LB Formation AWS Boto Manipuler les zones dans un LB # désactiver une zone DisableAvailabilityZonesForLoadBalancerRequest request = new DisableAvailabilityZonesForLoadBalancerRequest('lb1' ,Arrays.asList('us-east-1a')); elb.disableAvailabilityZonesForLoadBalancer(request) ; # activer une zone EnableAvailabilityZonesForLoadBalancerRequest request = new EnableAvailabilityZonesForLoadBalancerRequest('lb1', Arrays.asList('us-east-1a')); elb.enableAvailabilityZonesForLoadBalancer(request)  ; 44 44 44 44

Détruire un Load Balancer Formation AWS Boto Détruire un Load Balancer DeleteLoadBalancerRequest request = new DeleteLoadBalancerRequest('lb1'); elb.deleteLoadBalancer(request); 45 45 45 45

Formation AWS Boto SQS 46 46 46 46

Connexion à SQS AmazonSQS sqs = new AmazonSQSClient(provider); 47 Formation AWS Boto Connexion à SQS AmazonSQS sqs = new AmazonSQSClient(provider); 47 47 47 47

Formation AWS Boto Création d'une file CreateQueueRequest request = new CreateQueueRequest('tasks'); CreateQueueResult res = elb.createQueue(request); # récupérer l'url d'une queue System.out.println(res.getQueueUrl()); https://queue.amazonaws.com/443252058477/tasks 48 48 48 48

Récupérer une file # lister l'ensemble des files Formation AWS Boto Récupérer une file # lister l'ensemble des files ListQueuesRequest request = new ListQueuesRequest(); ListQueuesResult res = sqs.listQueues(request); List<String> qUrls = res.getQueuesUrls(); 49 49 49 49

Envoi d'un message String message = 'xxxxx'; Formation AWS Boto Envoi d'un message String message = 'xxxxx'; SendMessageRequest request = new SendMessageRequest(qUrls, message); sqs.sendMessage(request); 50 50 50 50

Consommer un message (1) Formation AWS Boto Consommer un message (1) # nombre de messages dans une queue GetQueueAttributeRequest = new GetQueueAttributeRequest(qUrls).withAttributesName ('ApproximateNumberOfMessages'); GetQueueAttributeResult res = sqs.getQueueAttribute(request); map<String, String> attrs = res.getAttributes(); Attrs['ApproximateNumberOfMessages'] ; # 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() 51 51 51 51

Consommer un message (3) Formation AWS Boto Consommer un message (3) # récupérer un message ReceiveMessageRequest request = new ReceiveMessageRequest(qUrls).withMaxNumberOfMessag es(20); ReceiveMessageResult res = sqs.receiveMessage(request); List<Messages> messages = res.getMessages(); # afficher le contenu du message System.out.println(messages.get(0).getBody()); 52 52 52 52

Consommer un message (3) Formation AWS Boto Consommer un message (3) # attention récupérer un message, ne veut pas dire => consommer ! # valider la consommation DeleteMessageRequest request = new DeleteMessageRequest(qUrls, message.getReceiptHandle()); 53 53 53 53

Détruire notre file # destruction Formation AWS Boto Détruire notre file # destruction DeleteQueueRequest request = new DeleteQueueRequest(qUrls); sqs.deleteQueue(request); 54 54 54 54

Formation AWS Boto SimpleDB 55 55 55 55

Formation AWS Boto Connexion à SimpleDB AmazonSimpleDB sdb = new AmazonSimpleDB(provider); 56 56 56 56

Formation AWS Boto Création d'un domaine CreateDomainRequest request = new CreateDomainRequest('domain1'); sdb.createDomain(request); # lister les domaines ListDomainsResult res = sdb.listDomain(new ListDomainsRequest()); List<Strings> names = res.getDomainNames(); 57 57 57 57

Métadonnées associés à un domaine Formation AWS Boto Métadonnées associés à un domaine DomainMetadataRequest request = new DomainMetadataRequest('domain1') ; DomainMetadataResult res = sdb.domainMetaData(request); # lister le nombre d'items dans le domaine System.out.println(res.getItemCount()); 58 58 58 58

Insérer un item # en un coup Formation AWS Boto 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}}) 59 59 59 59

Formation AWS Boto Récupérer un item (1) GetAttributesRequest request = new GetAttributesRequest('domain1', 'cmd7'); # forcer une lecture vérouillée request.setConsistentRead(true); GetAttributesResult res = sdb.getAttributes(request); 60 60 60 60

Récupérer un item (2) # possibilité d'utiliser « SQL » Formation AWS Boto Récupérer un item (2) # possibilité d'utiliser « SQL » SelectRequest request = new SelectRequest('select * from commandes where id="7"'); SelectResult res = sdb.select(request); List<Item> items = res.getItems(); for (Item item : items) { System.out.println(item.getName()); } 61 61 61 61

Formation AWS Boto Alternatives 62 62 62 62

Boto Bibliothèque Python SDK officiel Python Beaucoup moins verbeux ! Formation AWS Boto Boto Bibliothèque Python SDK officiel Python Beaucoup moins verbeux ! 63 63 63 63

Libcloud (1) Bibliothèque Python Formation AWS Boto 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 64 64 64 64

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

Formation AWS Boto Deltacloud (1) 66 66 66 66

Deltacloud (2) Couche d'abstraction sous forme d'API REST Formation AWS Boto 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 67 67 67 67

Deltacloud (3) Architecture flexible : Un proxy REST Formation AWS Boto 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 ! 68 68 68 68

Autres Langages SDK officiel pour les langages PHP, Ruby, Java, .Net Formation AWS Boto 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 http://fog.io/ 69 69 69 69

Formation AWS Boto Bibliographie 70 70 70 70

Formation AWS Boto Mise en pratique 71 71 71 71