簡體   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