formation introduction au aws sdk java. formation awsboto 2

Post on 04-Apr-2015

117 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Formation

Introduction au AWS SDK Java

Introduction au AWS SDK Java

Formation AWS Boto

2

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

Formation AWS Boto

3

Présentation & Installation

Formation AWS Boto

4

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

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

Concepts Généraux

Formation AWS Boto

7

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

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

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

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

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

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

Formation AWS Boto

13

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

Documentation en ligne

Formation AWS Boto

15

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

EC2

Formation AWS Boto

16

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

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

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

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

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

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

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

ec2.createSecurityGroup(request) ;

Formation AWS Boto

23

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

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

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

Formation AWS Boto

25

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

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

ec2.associateAddress(request);

DisassociateAddressRequest request = new DisassociateAddressRequest(eip);

ec2.disassociateAddress(request);

Formation AWS Boto

27

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)

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

S3

Formation AWS Boto

30

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

Formation AWS Boto

31

Créer un bucket# créer un bucket

CreateBucketRequest request = new CreateBucketRequest(bucket);

Bucket b = s3.createBucket(request);

Formation AWS Boto

32

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

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

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

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

ELB

Formation AWS Boto

37

Connexion à ELBAmazonElasticLoadBalancing elb = new AmazonElasticloadBalancing(provider);

Formation AWS Boto

38

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

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

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

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

Retirer des instances à un LB# retirer des instances

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

elb.deregisterInstancesFromLoadBalancer(request);

Formation AWS Boto

43

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

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

elb.deleteLoadBalancer(request);

Formation AWS Boto

45

SQS

Formation AWS Boto

46

Connexion à SQSAmazonSQS sqs = new AmazonSQSClient(provider);

Formation AWS Boto

47

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

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

Envoi d'un messageString message = 'xxxxx';

SendMessageRequest request = new SendMessageRequest(qUrls, message);

sqs.sendMessage(request);

Formation AWS Boto

50

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

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

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

Détruire notre file# destruction

DeleteQueueRequest request = new DeleteQueueRequest(qUrls);

sqs.deleteQueue(request);

Formation AWS Boto

54

SimpleDB

Formation AWS Boto

55

Connexion à SimpleDB

AmazonSimpleDB sdb = new AmazonSimpleDB(provider);

Formation AWS Boto

56

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

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

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

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

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

Alternatives

Formation AWS Boto

62

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

Formation AWS Boto

63

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

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

Deltacloud (1)

Formation AWS Boto

66

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

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

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/

Formation AWS Boto

70

Bibliographie

Mise en pratique

Formation AWS Boto

71

top related