Verwalten von EC2-Instanzen in Java

EC2-Instanzen in Java verwalten

1. Überblick

In diesem Artikel lernen wircontrol EC2 resources using the Java SDK. Wenn Sie mit **EC2 (Elastic Cloud Compute) noch nicht vertraut sind, ist dies eine Plattform, die Rechenkapazität in der Amazon-Cloud bereitstellt.

2. Voraussetzungen

Die Maven-Abhängigkeiten, AWS-Kontoeinstellungen und Clientverbindungen, die zur Verwendung des Amazon AWS SDK für EC2 erforderlich sind, sind dieselben wie inthis article here.

Angenommen, wir haben eine Instanz vonAWSCredentials, erstellt, wie im vorherigen Artikel beschrieben, können wir unseren EC2-Client erstellen:

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

3. Erstellen einer EC2-Instanz

Mit dem SDK können wir schnellset up what we need to start our first EC2 instance.

3.1. Erstellen einer Sicherheitsgruppe

Security groups control the network traffic to our EC2 instances. Wir können eine Sicherheitsgruppe für mehrere EC2-Instanzen verwenden.

Erstellen wir eine Sicherheitsgruppe:

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

Da Sicherheitsgruppen standardmäßig keinen Netzwerkverkehr zulassen, müssen wirconfigure our security group to allow traffic. eingeben

Lassen wir HTTP-Verkehr von einer beliebigen IP-Adresse zu:

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

Schließlich müssen wirattach the ipRange instance to an AuthorizeSecurityGroupIngressRequest und die Anfrage mit unserem EC2-Client stellen:

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

3.2. Erstellen eines Schlüsselpaars

Beim Starten einer EC2-Instanz müssen wirkey pair.We can create a key pair using the SDK: angeben

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

Holen wir uns den privaten Schlüssel:

createKeyPairResult.getKeyPair().getKeyMaterial();

Wir müssenmake sure to keep this key somewhere secure and safe. erreichen. Wenn wir es verlieren, können wir es nicht zurückgeben (Amazon behält es nicht). Nur so können wir eine Verbindung zu unserer EC2-Instanz herstellen.

3.3. Erstellen der EC2-Instanz

Zum Erstellen des EC2 verwenden wirRunInstancesRequest:

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

Die Bild-ID istAMI image that this instance will use.

An instance type definiert diespecifications of the instance.

The key name is optional; Wenn es nicht angegeben ist, können wir keine Verbindung zu unserer Instanz herstellen. Dies ist in Ordnung, wenn wir sicher sind, dass wir unsere Instanz korrekt eingerichtet haben und keine Verbindung herstellen müssen.

Min and max count give bounds as to how many instances will be created. Dies hängt von der Verfügbarkeitszone ab: Wenn AWS nicht mindestens die Mindestanzahl von Instanzen in der Zone erstellen kann, werden keine erstellt.

Wenn AWS hingegen nicht die maximale Anzahl von Instanzen erstellen kann, wird versucht, weniger zu erstellen, vorausgesetzt, diese Anzahl ist höher als die von uns angegebene Mindestanzahl von Instanzen.

Jetzt können wir die Anforderung mit der Methode runInstances () ausführen und die ID der erstellten Instanz abrufen:

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

4. Verwalten einer EC2-Instanz

Mit dem SDK können wirstart, stop, reboot, describe and configure monitoring für unsere EC2-Instanzen festlegen.

4.1. Starten, Stoppen und Neustarten einer EC2-Instanz

Das Starten, Stoppen und Neustarten einer Instanz ist relativ einfach.

Eine Instanz starten:

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

ec2Client.startInstances(request);

Instanz stoppen:

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

ec2Client.stopInstances(request);

Instanz neu starten:

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

RebootInstancesResult rebootInstancesRequest = ec2Client.rebootInstances(request);

Von jeder dieser Anforderungen ist es möglich,interrogate the previous state of the instance:

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

4.2. Überwachen einer EC2-Instanz

Mal sehen, wie manstart and stop monitoring our EC2 instances: macht

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

ec2Client.monitorInstances(monitorInstancesRequest);

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

ec2Client.unmonitorInstances(unmonitorInstancesRequest);

4.3. Beschreiben einer EC2-Instanz

Schließlich können wirdescribe our EC2 instances:

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

EC2-Instanzen werden inreservations gruppiert. Reservierungen sind dieStartInstancesRequest-Aufrufe, mit denen eine oder mehrere EC2-Instanzen erstellt wurden:

response.getReservations()

Von hier aus können wir die tatsächlichen Instanzen abrufen. Lassen Sie uns die erste Instanz in der ersten Reservierung erhalten:

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

Nun können wir unsere Instanz beschreiben:

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

5. Fazit

In diesem kurzen Tutorial haben wir gezeigt, wie manmanage Amazon EC2 instances using the Java SDK. macht

Wie üblich können Codefragmenteover on GitHub gefunden werden.