理解EC2 waiters:instanceStatusOK如何识别实例期望运行状态
代码逻辑疑问解答
你调用的ec2.waiters().instanceStatusOK()返回的是AWS Java SDK预先封装实现的专用等待器,它的期望状态是SDK内置定义好的,不需要你额外手动传入。
这个等待器内置的判定规则是必须同时满足以下两个条件才会终止轮询:
- 目标EC2实例的*实例状态检查(Instance Status Check)*结果为
ok - 目标EC2实例的*系统状态检查(System Status Check)*结果为
ok
上述两个状态是AWS官方定义的EC2实例完全正常运行的健康标准,SDK在开发阶段就把这两个值作为instanceStatusOK()等待器的默认期望状态硬编码在实现逻辑里。
你在第四行代码中传入的DescribeInstanceStatusRequest对象,作用仅为告知等待器需要查询哪台实例的状态,并不承担指定期望状态的作用:等待器会基于你传入的请求参数反复调用EC2的describeInstanceStatus接口拉取实例状态,和自身内置的期望状态做对比,直到状态匹配、或者达到超时/最大重试次数阈值后抛出异常。
如果你的业务场景不需要等待健康检查通过,只需要等实例状态变为running就可以执行后续逻辑,可以不用这个内置等待器,自行自定义等待器,设置以InstanceState.Name = running作为期望判定条件即可。
内容的提问来源于stack exchange,提问作者croakPedlar
相关产品推荐
相关产品推荐

