2

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

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

+1

если это http-сервис, просто получите запрос. –

+0

@FatihDonmez: это похоже на опрос запроса каждые N секунд; kinda a hack – User528491

+0

да, что-то в этом роде. –

ответ

1

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

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.