Дождитесь запуска экземпляра EC2.

У меня есть собственный AMI, который запускает мой сервис. Используя AWS Java SDK, я создаю экземпляр EC2, используя RunInstancesRequest из AMI. Теперь, прежде чем я начну использовать свой сервис, я должен убедиться, что только что созданный экземпляр запущен и работает. Я опрашиваю экземпляр, используя:

var transitionCompleted = false
while (!transitionCompleted) {
  val currentState = instance.getState.getName
  if (currentState == desiredState) {
    transitionCompleted = true
  }
  if(!transitionCompleted) {
    try {
      Thread.sleep(TRANSITION_INTERVAL)
    } catch {
      case e: InterruptedException => e.printStackTrace()
    }
  }
}

Поэтому, когда currentState экземпляра превращается в desiredState (то есть running), я получаю статус, что экземпляр готов. Однако любой вновь созданный экземпляр, несмотря на то, что он находится в состоянии running, недоступен для немедленного использования, поскольку он все еще инициализируется.

Как обеспечить возврат только тогда, когда я смогу получить доступ к экземпляру и его службам? Есть ли какие-либо специальные проверки статуса?

PS: я использую Scala


person Slartibartfast    schedule 10.08.2016    source источник
comment
если это http-сервис, просто получите запрос.   -  person Fatih Donmez    schedule 10.08.2016
comment
@FatihDonmez: это похоже на опрос запроса каждые N секунд; своего рода взлом   -  person Slartibartfast    schedule 10.08.2016
comment
да что-то подобное.   -  person Fatih Donmez    schedule 10.08.2016
comment
голосование за закрытие, поскольку неясно, что вы спрашиваете, у вас нет определения возможности доступа к экземпляру и его услугам, и в этом суть вопроса   -  person Vorsprung    schedule 10.08.2016
comment
Я не знаю java sdk, но js sdk имеет функцию ожидания для: docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ — это скажет вам, в порядке ли этот экземпляр. Однако на самом деле вы, вероятно, захотите пропинговать конечную точку службы, чтобы определить ее работоспособность.   -  person stevepkr84    schedule 10.08.2016


Ответы (1)


Вы проверяете экземпляр состояние, в то время как на самом деле вас интересует экземпляр статус проверяет. Вы можете использовать describeInstanceStatus из Amazon Java SDK, но вместо реализации собственного опроса (на неидиоматическом Scala) лучше использовать готовое решение из SDK: метод официанты EC2.

import com.amazonaws.services.ec2._, model._, waiters._

val ec2client: AmazonEC2 = ...

val request = new DescribeInstanceStatusRequest().withInstanceIds(instanceID)

ec2client.waiters.instanceStatusOk.run(
  new WaiterParameters()
    .withRequest(request)
    // Optionally, you can tune the PollingStrategy:
    // .withPollingStrategy(...)
  )
)

Чтобы настроить задержку опроса и стратегии повторных попыток официанта, проверьте PollingStrategy документация.

person laughedelic    schedule 25.10.2016