Gestion des instances EC2 en Java

Gestion des instances EC2 en Java

1. Vue d'ensemble

Dans cet article, nous allons apprendre àcontrol EC2 resources using the Java SDK. Si vous êtes nouveau dans **EC2 (Elastic Cloud Compute), il s'agit d'une plate-forme qui fournit une capacité de calcul dans le cloud d'Amazon.

2. Conditions préalables

Les dépendances Maven, les paramètres de compte AWS et la connexion client nécessaires pour utiliser Amazon AWS SDK pour EC2 sont les mêmes que dansthis article here.

En supposant que nous ayons créé une instance deAWSCredentials, comme décrit dans l'article précédent, nous pouvons continuer et créer notre client EC2:

AmazonEC2 ec2Client = AmazonEC2ClientBuilder
  .standard()
  .withCredentials(new AWSStaticCredentialsProvider(credentials))
  .withRegion(Regions.US_EAST_1)
  .build();

3. Créer une instance EC2

En utilisant le SDK, nous pouvons rapidementset up what we need to start our first EC2 instance.

3.1. Créer un groupe de sécurité

Security groups control the network traffic to our EC2 instances. Nous pouvons utiliser un groupe de sécurité pour plusieurs instances EC2.

Créons un groupe de sécurité:

CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest()
  .withGroupName("exampleSecurityGroup")
  .withDescription("example Security Group");
CreateSecurityGroupResult createSecurityGroupResult = ec2Client.createSecurityGroup(
  createSecurityGroupRequest);

Étant donné que les groupes de sécurité n'autorisent aucun trafic réseau par défaut, nous devronsconfigure our security group to allow traffic.

Autorisons le trafic HTTP provenant de n’importe quelle adresse IP:

IpRange ipRange = new IpRange().withCidrIp("0.0.0.0/0");
IpPermission ipPermission = new IpPermission()
  .withIpv4Ranges(Arrays.asList(new IpRange[] { ipRange }))
  .withIpProtocol("tcp")
  .withFromPort(80)
  .withToPort(80);

Enfin, il fautattach the ipRange instance to an AuthorizeSecurityGroupIngressRequest et faire la requête en utilisant notre client EC2:

AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest
  = new AuthorizeSecurityGroupIngressRequest()
  .withGroupName("exampleSecurityGroup")
  .withIpPermissions(ipPermission);
ec2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);

3.2. Créer une paire de clés

Lors du lancement d'une instance EC2, nous devons spécifier unkey pair.We can create a key pair using the SDK:

CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
  .withKeyName("example-key-pair");
CreateKeyPairResult createKeyPairResult = ec2Client.createKeyPair(createKeyPairRequest);

Récupérons la clé privée:

createKeyPairResult.getKeyPair().getKeyMaterial();

Nous devonsmake sure to keep this key somewhere secure and safe. Si nous le perdons, nous ne pourrons pas le récupérer (Amazon ne le garde pas). C'est le seul moyen de nous connecter à notre instance EC2.

3.3. Création de l'instance EC2

Pour créer l'EC2, nous utiliserons unRunInstancesRequest:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
  .withImageId("ami-97785bed")
  .withInstanceType("t2.micro")
  .withKeyName("example-key-pair")
  .withMinCount(1)
  .withMaxCount(1)
  .withSecurityGroups("exampleSecurityGroup");

L'ID de l'image correspond auAMI image that this instance will use.

An instance type définit lesspecifications of the instance.

The key name is optional; s'il n'est pas spécifié, nous ne pouvons pas nous connecter à notre instance. Cela convient si nous sommes convaincus que nous avons correctement configuré notre instance et que nous n'avons pas besoin de nous connecter.

Min and max count give bounds as to how many instances will be created. Cela dépend de la zone de disponibilité: si AWS ne peut pas créer au moins le nombre minimum d'instances dans la zone, il n'en créera aucune.

À l'inverse, si AWS ne peut pas créer le nombre maximal d'instances, il essaiera d'en créer moins, à condition que ce nombre soit supérieur au nombre minimal d'instances que nous avons spécifié.

Maintenant, nous pouvons exécuter la demande à l'aide de la méthode runInstances () et récupérer l'id de l'instance créée:

String yourInstanceId = ec2Client.runInstances(runInstancesRequest)
  .getReservation().getInstances().get(0).getInstanceId();

4. Gérer une instance EC2

En utilisant le SDK, nous pouvonsstart, stop, reboot, describe and configure monitoring pour nos instances EC2.

4.1. Démarrage, arrêt et redémarrage d'une instance EC2

Démarrer, arrêter et redémarrer une instance est relativement simple.

Démarrer une instance:

StartInstancesRequest startInstancesRequest = new StartInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.startInstances(request);

Arrêter une instance:

StopInstancesRequest stopInstancesRequest = new StopInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.stopInstances(request);

Redémarrage d'une instance:

RebootInstancesRequest request = new RebootInstancesRequest()
  .withInstanceIds(yourInstanceId);

RebootInstancesResult rebootInstancesRequest = ec2Client.rebootInstances(request);

À partir de chacune de ces demandes, il est possible deinterrogate the previous state of the instance:

ec2Client.stopInstances(stopInstancesRequest)
  .getStoppingInstances()
  .get(0)
  .getPreviousState()
  .getName()

4.2. Surveillance d'une instance EC2

Voyons commentstart and stop monitoring our EC2 instances:

MonitorInstancesRequest monitorInstancesRequest = new MonitorInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.monitorInstances(monitorInstancesRequest);

UnmonitorInstancesRequest unmonitorInstancesRequest = new UnmonitorInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.unmonitorInstances(unmonitorInstancesRequest);

4.3. Décrire une instance EC2

Enfin, on peutdescribe our EC2 instances:

DescribeInstancesRequest describeInstancesRequest
 = new DescribeInstancesRequest();
DescribeInstancesResult response = ec2Client
  .describeInstances(describeInstancesRequest);

Les instances EC2 sont regroupées enreservations. Les réservations sont les appelsStartInstancesRequest qui ont été utilisés pour créer une ou plusieurs instances EC2:

response.getReservations()

De là, nous pouvons obtenir les instances réelles. Obtenons la première instance de la première réservation:

response.getReservations().get(0).getInstances().get(0)

Maintenant, nous pouvons décrire notre instance:

// ...
.getImageId()
.getSubnetId()
.getInstanceId()
.getImageId()
.getInstanceType()
.getState().getName()
.getMonitoring().getState()
.getKernelId()
.getKeyName()

5. Conclusion

Dans ce tutoriel rapide, nous avons montré commentmanage Amazon EC2 instances using the Java SDK.

Comme d'habitude, des extraits de code peuvent être trouvésover on GitHub.