formation introduction au aws sdk java. formation awsboto 2

71
Formation Introduction au AWS SDK Java

Upload: simonette-brunel

Post on 04-Apr-2015

117 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Formation

Introduction au AWS SDK Java

Page 2: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Introduction au AWS SDK Java

Formation AWS Boto

2

Page 3: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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

Formation AWS Boto

3

Page 4: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Présentation & Installation

Formation AWS Boto

4

Page 5: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

5

Page 6: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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/

Formation AWS Boto

6

Page 7: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Concepts Généraux

Formation AWS Boto

7

Page 8: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

8

Page 9: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

9

accessKey=XXXXsecretKey=YYYY

Page 10: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Credentials Providers• Interface « com.amazonaws.auth.AWSCredentialsProvider »• Implémentations :

• « AWSCredentialsProviderChain(AWSCredentialsProvider ...credentialsProviders) »

• « ClasspathPropertiesFileCredentialsProvider »• « SystemPropertiesCredentialsProvider » : vérifie les propriétés java « aws.accessKeyId » et « aws.secretKey »

Formation AWS Boto

10

Page 11: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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

Formation AWS Boto

11

Page 12: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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

Formation AWS Boto

12

Page 13: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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

Formation AWS Boto

13

Page 14: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

14

Page 15: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Documentation en ligne

Formation AWS Boto

15

http://aws.amazon.com/fr/sdkforjava/

Page 16: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

EC2

Formation AWS Boto

16

Page 17: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Connexion à EC2AWSCredentialsProvider 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 AWS Boto

17

Page 18: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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') ;

Formation AWS Boto

18

haikel
La méthode get_all_images() est bogué, il faut impérativement passer les owner idPour récupérer son ownerId, pas d'APIconn.get_all_security_groups()[0].owner_idu'443252058477'=> SysFera's owner id
Page 19: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Démarrer une instance EC2RunInstancesRequest request = new RunInstancesRequest(ami, 1, 1) ;

RunInstancesResult res = ec2.runInstances(request) ;

Reservation reservation= res.getReservation() ;

List<Instance> instances = reservation.getInstances() ;

Formation AWSBoto

19

Page 20: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

20

Page 21: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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()

Formation AWS Boto

21

Page 22: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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) ;

Formation AWS Boto

22

Page 23: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Créer un groupe de sécuritéCreateSecurityGroupRequest request = new CreateSecurityGroupRequest('ssh-access', 'open ssh port') ;

ec2.createSecurityGroup(request) ;

Formation AWS Boto

23

Page 24: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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);

Formation AWS Boto

24

Page 25: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Configurer un groupe de sécurité# supprimer une règle

RevokeSecurityGroupIngressRequest request = new RevokeSecurityGroupIngressRequest('ssh-access', perms);

Formation AWS Boto

25

Page 26: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Allouer une EIPAllocateAddressRequest request = new AllocateAddressRequest();

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 AWS Boto

26

Page 27: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Associer une EIPAssociateAddressRequest request = new AssociateAddressRequest(id, eip);

ec2.associateAddress(request);

DisassociateAddressRequest request = new DisassociateAddressRequest(eip);

ec2.disassociateAddress(request);

Formation AWS Boto

27

Page 28: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

28

haikel
Le param snapshot dans la création de volume est ici uniquement à titre indicatif (None est le param par défaut) pour la création de volume à partir de snapshot)
Page 29: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

EBS# créer un volume de 2Go

CreateSnapshotRequest request = new CreateSnapshotRequest(volId, 'description');

CreateSnapshotResult res = ec2.createSnapshot(request);

Snapshot snap = res.getSnapshot();

Formation AWS Boto

29

Page 30: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

S3

Formation AWS Boto

30

Page 31: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Connexion à S3AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());

Formation AWS Boto

31

Page 32: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Créer un bucket# créer un bucket

CreateBucketRequest request = new CreateBucketRequest(bucket);

Bucket b = s3.createBucket(request);

Formation AWS Boto

32

Page 33: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Lister les bucketsListBucketsRequest 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);

}

Formation AWS Boto

33

Page 34: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

34

Page 35: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

35

haikel
Le header content-type permet de configurer le bon type mime pour les téléchargements via HTTP
Page 36: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Lister le contenu d'un bucketListObjectRequest request = new ListObjectRequest().withBucketName('toto');

ObjectListing res = S3.listObject(request);

List<S3ObjectSummary> summaries = res.getObjectSummaries();

Formation AWS Boto

36

Page 37: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

ELB

Formation AWS Boto

37

Page 38: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Connexion à ELBAmazonElasticLoadBalancing elb = new AmazonElasticloadBalancing(provider);

Formation AWS Boto

38

Page 39: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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);

Formation AWS Boto

39

Page 40: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Création d'un load balancerList<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);

Formation AWS Boto

40

Page 41: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

41

Page 42: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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);

Formation AWS Boto

42

Page 43: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Retirer des instances à un LB# retirer des instances

DeregisterInstancesFromLoadBalancerRequest request = new DeregisterInstancesFromLoadBalancerRequest('lb1', instances);

elb.deregisterInstancesFromLoadBalancer(request);

Formation AWS Boto

43

Page 44: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

44

Page 45: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Détruire un Load BalancerDeleteLoadBalancerRequest request = new DeleteLoadBalancerRequest('lb1');

elb.deleteLoadBalancer(request);

Formation AWS Boto

45

Page 46: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

SQS

Formation AWS Boto

46

Page 47: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Connexion à SQSAmazonSQS sqs = new AmazonSQSClient(provider);

Formation AWS Boto

47

Page 48: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Création d'une fileCreateQueueRequest 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

Formation AWS Boto

48

Page 49: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Récupérer une file# lister l'ensemble des files

ListQueuesRequest request = new ListQueuesRequest();

ListQueuesResult res = sqs.listQueues(request);

List<String> qUrls = res.getQueuesUrls();

Formation AWS Boto

49

Page 50: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Envoi d'un messageString message = 'xxxxx';

SendMessageRequest request = new SendMessageRequest(qUrls, message);

sqs.sendMessage(request);

Formation AWS Boto

50

Page 51: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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()

Formation AWS Boto

51

Page 52: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Consommer un message (3)# récupérer un message

ReceiveMessageRequest request = new ReceiveMessageRequest(qUrls).withMaxNumberOfMessages(20);

ReceiveMessageResult res = sqs.receiveMessage(request);

List<Messages> messages = res.getMessages();

# afficher le contenu du message

System.out.println(messages.get(0).getBody());

Formation AWS Boto

52

Page 53: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

53

Page 54: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Détruire notre file# destruction

DeleteQueueRequest request = new DeleteQueueRequest(qUrls);

sqs.deleteQueue(request);

Formation AWS Boto

54

Page 55: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

SimpleDB

Formation AWS Boto

55

Page 56: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Connexion à SimpleDB

AmazonSimpleDB sdb = new AmazonSimpleDB(provider);

Formation AWS Boto

56

Page 57: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Création d'un domaineCreateDomainRequest request = new CreateDomainRequest('domain1');

sdb.createDomain(request);

# lister les domaines

ListDomainsResult res = sdb.listDomain(new ListDomainsRequest());

List<Strings> names = res.getDomainNames();

Formation AWS Boto

57

Page 58: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

58

Page 59: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

59

Page 60: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

60

Page 61: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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());

}

Formation AWS Boto

61

Page 62: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Alternatives

Formation AWS Boto

62

Page 63: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Boto• Bibliothèque Python• SDK officiel Python• Beaucoup moins verbeux !

Formation AWS Boto

63

Page 64: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

64

Page 65: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Libcloud (2)• Plus de 26 fournisseurs supportés

• AWS, Rackspace, Eucalyptus, OpenStack, OpenNebula, CloudSigma, Google Storage, Vsphere, Gandi.net, etc...

Formation AWS Boto

65

https://libcloud.apache.org

Page 66: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Deltacloud (1)

Formation AWS Boto

66

Page 67: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

67

Page 68: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

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 AWS Boto

68

Page 69: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Formation AWS Boto

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

http://fog.io/

Page 70: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Formation AWS Boto

70

Bibliographie

Page 71: Formation Introduction au AWS SDK Java. Formation AWSBoto 2

Mise en pratique

Formation AWS Boto

71