Démarrer / arrêter EC2 avec Java s'exécutant sur Lambda (Essayez d'écrire ↓ en Java et personnalisez-le un peu. https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)
・ Préparation à l'éclipse ・ Exécution de l'inscription (un jour) ・ Implementation-Stop / Start EC2
Depuis que j'ai rendu possible la création d'un exemple de classe dans Eclipse la dernière fois, Utilisez-le pour créer un projet Lambda avec le type d'entrée "Personnalisé".
Voici ce que vous pouvez faire avec
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!";
}
}
Depuis la création de la méthode handleRequest, écrivez le contenu que vous souhaitez exécuter avec Lambda. Voir ci-dessous pour la description du gestionnaire https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html Vous pouvez recevoir json comme argument. https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler-pojo.html
//Créer un objet EC2
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion("us-east-1").build();
Vous pouvez maintenant travailler avec EC2 dans la région des arguments. Voir ici pour le code de région https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html Je ne vais pas l'utiliser cette fois, mais comme Enum est également préparé sous le nom Regions, les classes ci-dessous peuvent également être utilisées. com.amazonaws.regions.Regions
//Démarrez l'ID d'instance stocké dans la liste d'arguments
StartInstancesResult ret = ec2.startInstances(new StartInstancesRequest(instanceIdList));
Vous pouvez maintenant lancer l'ID d'instance dans la liste.
//Arrêtez l'ID d'instance stocké dans la liste d'arguments
StopInstancesResult ret = ec2.stopInstances(new StopInstancesRequest(instanceIdList));
Vous pouvez arrêter l'ID d'instance de List
AmazonWebServiceResult<?> ret
Présentez l'argument comme ↓ pour pouvoir opérer sur plusieurs régions et instances.
{"targets":[
{
"action":"start"
,"targetReagion":"us-east-1"
,"targetInstances":"x-xxxxxxxxxxxxx"
}
,{
"action":"stop"
,"targetReagion":"ap-northeast-1"
,"targetInstances":"y-yyyyyyyyyyy"
}
]}
Dans l'exemple de cet argument, démarrez une instance appelée x-xxxxxxxxxxxxx dans le nord de la Virginie, Arrêtez l'instance y-yyyyyyyyyyy à Tokyo.
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>();
}
}
Ajout de pom
<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