Verwenden von Java mit AWS Lambda-Implementierung-Stop / Launch EC2

Was du machen willst

Starten / Stoppen Sie EC2 mit Java, das auf Lambda ausgeführt wird (Versuchen Sie, ↓ in Java zu schreiben, und passen Sie es ein wenig an. https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)

Verwenden von Java mit AWS Lambda-Inhalten

Eclipse-Vorbereitung ・ Registrierung ausführen (eines Tages) ・ Implementierung-Stopp / Start EC2

Erstellen Sie vorerst eine Klasse

Da ich es letztes Mal möglich gemacht habe, eine Beispielklasse in Eclipse zu erstellen, Verwenden Sie diese Option, um ein Lambda-Projekt mit dem Eingabetyp "Benutzerdefiniert" zu erstellen. image.png

Hier ist, was Sie damit machen können

LambdaFunctionHandler.java


	package com.amazonaws.lambda.demo;

	import com.amazonaws.services.lambda.runtime.Context;
	import com.amazonaws.services.lambda.runtime.RequestHandler;

	public class LambdaFunctionHandler implements RequestHandler<Object, String> {

	    @Override
	    public String handleRequest(Object input, Context context) {
	        context.getLogger().log("Input: " + input);

	        // TODO: implement your handler
	        return "Hello from Lambda!";
	    }
	}

Da die handleRequest-Methode erstellt wurde, schreiben Sie den Inhalt, den Sie mit Lambda ausführen möchten. Unten finden Sie eine Beschreibung des Handlers https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html Sie können json als Argument erhalten. https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler-pojo.html

Gehen Sie zu EC2

Erstellen Sie ein EC2-Objekt

//Erstellen Sie ein EC2-Objekt
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion("us-east-1").build();

Jetzt können Sie mit EC2 im Argumentbereich arbeiten. Hier finden Sie den Regionalcode https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html Ich werde es diesmal nicht verwenden, aber da Enum auch unter dem Namen Regions vorbereitet wird, können auch die folgenden Klassen verwendet werden. com.amazonaws.regions.Regions

Starten Sie eine Instanz

//Starten Sie die in der Argumentliste gespeicherte Instanz-ID
StartInstancesResult ret = ec2.startInstances(new StartInstancesRequest(instanceIdList));

Jetzt können Sie die Instanz-ID in der Liste starten.

Stoppen Sie die Instanz

//Stoppen Sie die in der Argumentliste gespeicherte Instanz-ID
StopInstancesResult ret = ec2.stopInstances(new StopInstancesRequest(instanceIdList));

Sie können die Instanz-ID von List auf die gleiche Weise wie beim Starten stoppen. AmazonWebServiceResult wird von den Rückgabewerten von start und stop geerbt, sodass Sie wie folgt vorgehen können.

AmazonWebServiceResult<?> ret 

Hier ist das fertige Produkt

Stellen Sie das Argument wie ↓ ein, damit Sie mehrere Regionen und Instanzen bearbeiten können.

{"targets":[
    {
         "action":"start"
        ,"targetReagion":"us-east-1"
        ,"targetInstances":"x-xxxxxxxxxxxxx"
    }
    ,{
         "action":"stop"
        ,"targetReagion":"ap-northeast-1"
        ,"targetInstances":"y-yyyyyyyyyyy"
    }
]}

Starten Sie im Beispiel dieses Arguments eine Instanz mit dem Namen x-xxxxxxxxxxxxx in Nord-Virginia. Stoppen Sie die Instanz y-yyyyyyyyyyy in Tokio.

ActionEC2Instances


package com.amazonaws.lambda.demo;

import java.util.ArrayList;
import java.util.List;

import com.amazonaws.AmazonWebServiceResult;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.StartInstancesRequest;
import com.amazonaws.services.ec2.model.StopInstancesRequest;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import com.amazonaws.lambda.demo.ActionEC2Instances.Input;
import com.amazonaws.lambda.demo.ActionEC2Instances.Output;

public class ActionEC2Instances implements RequestHandler<Input, Output> {

	@Override
	public Output handleRequest(Input input, Context context) {
		context.getLogger().log("Input : " + input);
		Output output = new Output();

		for (Target action : input.targets) {
			output.result.add(doAction(action));
		}

		return output;
	}

	private String doAction(Target target) {
		AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(target.targetReagion).build();
		List<String> instances = target.targetInstances;

		AmazonWebServiceResult<?> ret = null;
		if ("start".equals(target.action)) {
			ret = ec2.startInstances(new StartInstancesRequest(instances));

		} else if ("stop".equals(target.action)) {
			ret = ec2.stopInstances(new StopInstancesRequest(instances));

		} else {
			return "Unexpected Action";

		}
		return ret.toString();
	}

	public static class Input {
		public List<Target> targets;

		@Override
		public String toString() {
			StringBuffer sbf = new StringBuffer();
			for (Target target : targets) {
				sbf.append(target);
			}
			return sbf.toString();
		}
	}

	public static class Target {

		private String action;
		private String targetReagion;
		private List<String> targetInstances;

		public String getAction() {
			return action;
		}

		public void setAction(String action) {
			this.action = action;
		}

		public String getTargetReagion() {
			return targetReagion;
		}

		public void setTargetReagion(String targetReagion) {
			this.targetReagion = targetReagion;
		}

		public List<String> getTargetInstances() {
			return targetInstances;
		}

		public void setTargetInstances(List<String> targetInstances) {
			this.targetInstances = targetInstances;
		}

		@Override
		public String toString() {
			StringBuffer sbf = new StringBuffer();
			sbf.append("{action :").append(action).append(" targetReagion :").append(targetReagion)
					.append(" targetInstances :").append(targetInstances).append("}");

			return sbf.toString();
		}

	}

	public static class Output {
		public List<String> result = new ArrayList<String>();
	}
}

Pom hinzugefügt

<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-java-sdk-core</artifactId>
	<version>1.11.719</version>
</dependency>
<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-lambda-java-events</artifactId>
	<version>1.3.0</version>
</dependency>
<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-lambda-java-core</artifactId>
	<version>1.1.0</version>
</dependency>
<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-java-sdk-ec2</artifactId>
	<version>1.11.602</version>
	<scope>compile</scope>
</dependency>

Recommended Posts

Verwenden von Java mit AWS Lambda-Implementierung-Stop / Launch EC2
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
Verwenden von Java mit AWS Lambda-Implementation-Check CloudWatch-Argumenten
Verwenden von Mapper mit Java (Spring)
Versuchen Sie es mit Redis mit Java (jar)
HTML5-Entwicklung von Java mit TeaVM
Verwenden des Proxy-Dienstes mit Java-Crawling
Bis INSERT S3 Objekt in EC2 DB mit Lambda @ java: AWS
Einfache Bereitstellung mit Capistrano + AWS (EC2) + Rails
Verwenden von JupyterLab + Java mit WSL unter Windows 10
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Spieleentwicklung mit zwei Personen mit Java 2
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Spieleentwicklung mit zwei Personen mit Java 1
Versuchen Sie, Java-Bibliotheken mit AWS CodeArtifact zu verwalten
Starten Sie die Java-Überprüfungsumgebung lokal mit Vagrant
Spieleentwicklung mit zwei Personen mit Java 3
Versuchen Sie es mit der Wii-Fernbedienung in Java
Verwenden von Java mit AWS Lambda-Implementierungstipps - Abrufen des Instanznamens aus Reagion und Instanz-ID
Interagieren Sie mit der LINE Message API mit Lambda (Java)
Verwendung des Java-Frameworks mit AWS Lambda! ??
Geben Sie ClassPath an, wenn Sie jupyter + Java mit WSL verwenden
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
Richten Sie signierte Cookies (für CloudFront) mit benutzerdefinierten Richtlinien mithilfe des AWS SDK für Java ein
Verwenden von Java 8 mit Bluemix (auf Liberty Runtime & DevOps Service)
Erste Schritte mit Java-Programmen mit Visual Studio Code
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
Bereitstellen von Laravel mit Docker auf EC2 unter AWS ① (EC2-Instanz erstellen)
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
[Java] Entwicklung mit mehreren Dateien mittels Paket und Import
Installieren Sie Java mit Homebrew
Sortieren mit Java-Komparator
Starten Sie EC2 Rails
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Verwenden Sie Pair mit OpenJDK
Starten Sie MariaDB mit Docker
Bequemer Download mit JAVA
Schrottpraxis mit Java ②
Schalten Sie Java mit direnv
Schrottpraxis mit Java ①
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
Stellen Sie Laravel mit Docker auf EC2 unter AWS bereit (Elastic IP Acquisition-Linking).
Veröffentlichen Sie regelmäßig Bild-Tweets auf Twitter mit AWS Lambda + Java
Protokollaggregation und -analyse (Arbeiten mit AWS Athena in Java)
Verwenden mehrerer Java-Versionen mit Brew auf Mac + jEnv
Registrieren Sie Ihr eigenes Docker-Image in ECR mithilfe der AWS CLI
Stellen Sie Laravel mit Docker auf EC2 unter AWS bereit (Git Clone-Deployment, Migration).
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen
PriorityQueue, wo ich Probleme mit der Dyxtra-Methode unter Verwendung einer benachbarten Liste (Java) hatte.
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden