如何在AWS SDK Java中进行轮询?

时间:2014-01-29 09:25:23

标签: amazon-web-services amazon-ec2

我是AWS sdk java的新手。我正在尝试编写一个代码,通过该代码我想要控制实例并获取所有AWS EC2信息。 我能够启动一个实例并停止它。但是你们都必须意识到启动一个实例需要一些时间,所以我想在那里等待(不想使用Thread.sleep)直到它启动或者当我停止一个实例时它应该等到那里直到我继续下一步。 这是代码:

   AmazonEC2 ec2 = = new AmazonEC2Client(credentialsProvider);

   DescribeInstancesResult describeInstancesRequest = ec2.describeInstances();
   List<Reservation> reservations = describeInstancesRequest.getReservations();
   Set<Instance> instances = new HashSet<Instance>();

   for (Reservation reservation : reservations) {
     instances.addAll(reservation.getInstances());
   }

   for (Instance instance : instances) {
   if ((instance.getInstanceId().equals("myimage"))) {
         List<String> instancesToStart = new ArrayList<String>();
         instancesToStart.add(instance.getInstanceId());
         StartInstancesRequest startr = new StartInstancesRequest();
         startr.setInstanceIds(instancesToStart);
         ec2.startInstances(startr);
         Thread.currentThread().sleep(60*1000);
 }

  if ((instat.getName()).equals("running")) {
         List<String> instancesToStop = new ArrayList<String>();

         instancesToStop.add(instance.getInstanceId());
         StopInstancesRequest stoptr = new StopInstancesRequest();
         stoptr.setInstanceIds(instancesToStop);
         ec2.stopInstances(stoptr);
  }

另外,我想说的是,每当我尝试获取图像列表时,它都会挂在下面的代码中。

   DescribeImagesResult describeImagesResult = ec2.describeImages();

1 个答案:

答案 0 :(得分:0)

每次要查看具有相同“实例ID”的更新状态时,您都可以获取“实例”类的实例。

Instance instance = new Instance(<your instance id that you got previously from describe instances>);

使用以下内容获取更新状态:

InstanceStatus instat = instance.getStatus();

我认为这里的关键是保存您关心的实例的“实例ID”。

Python中的

boto有一个很好的方法instance.update()可以在一个实例上调用,你可以看到它的状态但我找不到它。

希望这有帮助。