[英]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.