Как остановить экземпляр EC2, используя имя тега в Java? - PullRequest
1 голос
/ 02 сентября 2011

Я знаю, как остановить экземпляр с его идентификатором, но очень сложно каждый раз давать идентификатор экземпляра EC2.Как я могу остановить экземпляр с помощью Tag Name

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

Как я могу остановить экземпляр с помощью Tag Name?

Ответы [ 2 ]

3 голосов
/ 30 июня 2012

Вы можете создать метод справки для запуска экземпляра с соответствующим тегом:

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

Метод getRunningInstancesByTags просто соответствует только одному тегу, вы можете улучшить его для поддержки большего соответствия тегов.

0 голосов
/ 17 сентября 2018

это просто расширение кода @ 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...