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/)
・ Eclipse-Vorbereitung ・ Registrierung ausführen (eines Tages) ・ Implementierung-Stopp / Start EC2
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.
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
//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 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 in der Argumentliste gespeicherte Instanz-ID
StopInstancesResult ret = ec2.stopInstances(new StopInstancesRequest(instanceIdList));
Sie können die Instanz-ID von List
AmazonWebServiceResult<?> ret
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