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 au AWS SDK Java. Formation AWSBoto 2.

Présentations similaires


Présentation au sujet: "Formation Introduction au AWS SDK Java. Formation AWSBoto 2."— Transcription de la présentation:

1 Formation Introduction au AWS SDK Java

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 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 Formation AWSBoto 5

6 Installer AWS SDK for Java SDK Eclipse: ajouter le channel AWS AWS SDK for Java : Formation AWSBoto 6

7 Concepts Généraux Formation AWSBoto 7

8 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 Formation AWSBoto 8

9 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 : Formation AWSBoto 9 accessKey=XXXX secretKey=YYYY

10 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 » Formation AWSBoto 10

11 Client On récupére un objet « 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-) Formation AWSBoto 11

12 Requests Paquetage « com.amazonaws..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 Formation AWSBoto 12

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

14 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 Formation AWSBoto 14

15 Documentation en ligne Formation AWSBoto 15

16 EC2 Formation AWSBoto 16

17 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) ; Formation AWSBoto 17

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

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

20 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() ; Formation AWSBoto 20

21 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 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() Formation AWSBoto 21

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

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

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

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

26 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) Formation AWSBoto 26

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

28 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); Formation AWSBoto 28

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

30 S3 Formation AWSBoto 30

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

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

33 Lister les buckets ListBucketsRequest request = new ListBucketsRequest(); List 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); } Formation AWSBoto 33

34 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); Formation AWSBoto 34

35 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")); Formation AWSBoto 35

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

37 ELB Formation AWSBoto 37

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

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

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

41 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) Formation AWSBoto 41

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

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

44 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) ; Formation AWSBoto 44

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

46 SQS Formation AWSBoto 46

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

48 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/ /tasks Formation AWSBoto 48

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

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

51 Consommer un message (1) # nombre de messages dans une queue GetQueueAttributeRequest = new GetQueueAttributeRequest(qUrls).withAttributesName ('ApproximateNumberOfMessages'); GetQueueAttributeResult res = sqs.getQueueAttribute(request); map 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() Formation AWSBoto 51

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

53 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()); Formation AWSBoto 53

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

55 SimpleDB Formation AWSBoto 55

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

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

58 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()); Formation AWSBoto 58

59 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 59

60 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); Formation AWSBoto 60

61 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 items = res.getItems(); for (Item item : items) { System.out.println(item.getName()); } Formation AWSBoto 61

62 Alternatives Formation AWSBoto 62

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

64 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 64

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

66 Deltacloud (1) Formation AWSBoto 66

67 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 67

68 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 68

69 Formation AWSBoto 69 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

70 Formation AWSBoto 70 Bibliographie

71 Mise en pratique Formation AWSBoto 71


Télécharger ppt "Formation Introduction au AWS SDK Java. Formation AWSBoto 2."

Présentations similaires


Annonces Google