繁体   English   中英

检查 EC2 实例是否完成初始化。 使用 AWS Java SDK v2

[英]Check if EC2 instance finished initializing. Using the AWS Java SDK v2

我正在以编程方式从 AWS Java SDK v2 启动一个 EC2 实例。 然后,我将弹性 IP 地址关联到此实例。 这需要几分钟。 AWS 然后初始化实例。 在 AWS 控制台中它看起来像这样...... 在此处输入图像描述 在初始化完成之前,我不能 ssh 进入这个实例。 有没有办法以编程方式检查实例是否已完成初始化? 我看过 describeInstances() 方法,但据我所知,此方法的响应包含的最相关信息是实例的 state。state 正在“运行”,因此可能不是指示初始化状态的变量。 也许有不同的变量或不同的方法有助于监视这个初始化过程? 干杯。

并不真地。

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
    }
  }
}

您可以潜在地使用 AWS SDK 中的服务员功能来表示 Java。EC2 支持服务员执行多种操作,其中之一是waitUntilInstanceExists

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM