[英]Check if EC2 instance finished initializing. Using the AWS Java SDK v2
並不真地。
Amazon EC2 負責創建虛擬機,將磁盤與操作系統連接,然后啟動實例。 之后的一切都取決於操作系統和啟動腳本。 Amazon EC2 服務無法“看到”實例上發生的事情。
如果您特別需要了解此信息,您可以使用實例上的腳本在某處“發布”此事實。 例如,它可以向實例添加一個標記為State: Ready
。 或者,如果您需要以某種方式以編程方式響應,腳本可以觸發 AWS Lambda 函數或將消息放入 Amazon SQS 隊列。
使用此 Java 代碼和 AWS 開發工具包啟動實例后,我會檢查 EC2 實例狀態。 EC2 cd5.large 實例大約需要 90 秒才能停止並重新啟動到“正在運行”狀態,然后大約需要 3.5 分鍾才能完成初始化。 此代碼在您可能擁有的將實例旋轉到“運行”的部分之后......
boolean isInstanceInitialized = false;
while (!isInstanceInitialized) {
final DescribeInstanceStatusResult result = ec2
.describeInstanceStatus(
new DescribeInstanceStatusRequest()
.withInstanceIds(instanceId));
final List<InstanceStatus> instanceStatuses = result.getInstanceStatuses();
boolean isInstanceStatusOK;
boolean isSystemStatusOK;
for (final InstanceStatus instanceStatus : instanceStatuses) {
LOGGER.info(" InstanceStatus.instanceStatus: " + instanceStatus.getInstanceStatus().getStatus());
LOGGER.info(" SystemStatus: " + instanceStatus.getSystemStatus().getStatus());
isInstanceStatusOK = ("ok".equals(instanceStatus.getInstanceStatus().getStatus()));
isSystemStatusOK = ("ok".equals(instanceStatus.getSystemStatus().getStatus()));
isInstanceInitialized = isInstanceStatusOK && isSystemStatusOK;
}
if (isInstanceInitialized) {
break;
} else {
try {
// sleep 10 seconds between polling the instance state
Thread.sleep(10_000);
} catch (InterruptedException ex) {
// ignore
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.