Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中停止使用标记名的EC2实例?_Java_Amazon Ec2 - Fatal编程技术网

如何在java中停止使用标记名的EC2实例?

如何在java中停止使用标记名的EC2实例?,java,amazon-ec2,Java,Amazon Ec2,我知道如何用实例id停止实例,但每次都给EC2实例id是非常困难的。如何使用标记名停止实例 AmazonEC2 ec2 = new AmazonEC2Client(credentials); List<String> instancesToStop = new ArrayList<String>(); instancesToStop.add("INSTANCE_ID"); StopInstancesRequest stoptr = new StopInstancesRe

我知道如何用实例id停止实例,但每次都给EC2实例id是非常困难的。如何使用
标记名停止实例

AmazonEC2 ec2 = new AmazonEC2Client(credentials);

List<String> instancesToStop = new ArrayList<String>();
instancesToStop.add("INSTANCE_ID");
StopInstancesRequest stoptr = new StopInstancesRequest();       
stoptr.setInstanceIds(instancesToStop);
ec2.stopInstances(stoptr);
AmazonEC2 ec2=新的AmazonEC2客户端(凭证);
List instancesToStop=new ArrayList();
instancesToStop.add(“INSTANCE_ID”);
stopInstanceRequest stoptr=新的stopInstanceRequest();
stoptr.setInstanceId(InstanceStop);
ec2.stopInstances(stoptr);

如何通过
标记名
停止实例?

您可以创建一个帮助方法来获取具有匹配标记的正在运行的实例:

public List<String> getRunningInstancesByTags(String tagName, String value) {
    List<String> instances = new ArrayList<String>();
    for (Reservation reservation : ec2client.describeInstances().getReservations()) {
        for (Instance instance : reservation.getInstances()) {
            if (!instance.getState().getName().equals(InstanceStateName.Running.toString())) {
                continue;
            }
            for (Tag tag : instance.getTags()) {
                if (tag.getKey().equals(tagName) && tag.getValue().equals(value)) {
                    instances.add(instance.getInstanceId());
                }
            }
        }
    }
    return instances;
}
public List GetRunningInstanceByTags(字符串标记名,字符串值){
列表实例=新的ArrayList();
对于(保留:ec2client.describeInstances().getReservations()){
例如(实例:reservation.getInstances()){
如果(!instance.getState().getName().equals(InstanceStateName.Running.toString())){
继续;
}
for(标记:instance.getTags()){
if(tag.getKey().equals(标记名)和&tag.getValue().equals(值)){
add(instance.getInstanceId());
}
}
}
}
返回实例;
}

getRunningInstancesByTags方法只是简单地匹配一个标记,您可以改进它以支持更多标记匹配。

这只是@qrtt1代码的扩展,以支持多个标记:

private static final AWSCredentials AWS_CREDENTIALS = new BasicAWSCredentials("ABCDEF", "MNOPQRSTUVWXYZ");
private static final Map<String, String> ec2Tags = new LinkedHashMap<String, String>();
static {
    //ADD YOUR EC2 TAGS
    ec2Tags.put("stage", "test"); 
    ec2Tags.put("canBeStopped", "true");
}
public static List<Instance> getRunningInstancesByTags(Map<String, String> ec2Tags) {
    AmazonEC2 ec2Client = AmazonEC2ClientBuilder.standard()
                         .withCredentials(new AWSStaticCredentialsProvider(AWS_CREDENTIALS))
                         .withRegion(Regions.EU_CENTRAL_1).build();
    List<Instance> instances = new ArrayList<Instance>();
    Map<String, String> instanceTags = new LinkedHashMap<String, String>();
    for (Reservation reservation : ec2Client.describeInstances().getReservations()) {
        for (Instance instance : reservation.getInstances()) {
            if (!instance.getState().getName().equals(InstanceStateName.Running.toString())) {
                continue;
            }
            instanceTags = instance.getTags().stream()
                       .collect(Collectors.toMap(Tag::getKey, Tag::getValue));
            if (instanceTags.entrySet().containsAll(ec2Tags.entrySet())) {
                logger.info("{}", instanceTags.entrySet().toString());
                instances.add(instance);
            }
        }
    }
    return instances;
}
私有静态最终AWSCredentials AWS_凭证=新的基本AWSCredentials凭证(“ABCDEF”、“MNOPQRSTUVXYZ”);
私有静态最终映射ec2Tags=新LinkedHashMap();
静止的{
//添加您的EC2标签
ec2Tags.put(“阶段”、“测试”);
ec2Tags.put(“canBeStopped”、“true”);
}
公共静态列表getRunningInstancesByTags(映射ec2Tags){
AmazonEC2 ec2Client=AmazonEC2ClientBuilder.standard()
.具有凭证(新AWSStaticCredentialsProvider(AWS_凭证))
.withRegion(Regions.EU_CENTRAL_1).build();
列表实例=新的ArrayList();
Map instanceTags=newlinkedhashmap();
对于(保留:ec2Client.describeInstances().getReservations()){
例如(实例:reservation.getInstances()){
如果(!instance.getState().getName().equals(InstanceStateName.Running.toString())){
继续;
}
instanceTags=instance.getTags().stream()
.collect(Collectors.toMap(Tag::getKey,Tag::getValue));
if(instanceTags.entrySet().containsAll(ec2Tags.entrySet())){
logger.info(“{}”,instanceTags.entrySet().toString());
实例。添加(实例);
}
}
}
返回实例;
}