scala - 等待 EC2 实例启动

标签 scala amazon-web-services amazon-ec2 aws-sdk aws-java-sdk

我有一个运行我的服务的自定义 AMI。使用 AWS Java SDK,我使用 RunInstancesRequest 创建了一个 EC2 实例来自 AMI。现在,在我开始使用我的服务之前,我必须确保新创建的实例已启动并正在运行。我使用以下方法轮询实例:

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

最佳答案

您正在查看实例 state ,而您真正感兴趣的是实例 status检查。您可以使用 describeInstanceStatus 方法来自 Amazon Java SDK,但与其实现自己的轮询(在非惯用的 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(...)
  )
)

自定义waiter的轮询延迟和重试策略查看 PollingStrategy 文档。

关于scala - 等待 EC2 实例启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38864331/

相关文章:

amazon-web-services - 具有有限弹性IP的AWS架构

ruby-on-rails - Rails 部署到 Amazon EC2 - 设备上没有剩余空间

arrays - 将 Long 转换为 Array Byte 的 Scala 方法

generics - 如何使用未出现在第一个参数列表中的类型参数来改进 Scala 的类型推断?

amazon-web-services - 访问 index.html Amazon S3 静态网站被拒绝

amazon-web-services - 云信息弹性疼痛 : "cannot be specified along with CacheSecurityGroupNames"

php - SQLSTATE[HY000] [2003] 无法连接到 MySQL 服务器

scala - Scala 是否允许重载构造函数具有 'this' 以外的语句?

regex - 解析 scala 中的 case 语句

django - 使用 create-react-app 自定义静态文件路径?