Amazon web services 如何以编程方式检查EC2实例是否已完成重新启动?

Amazon web services 如何以编程方式检查EC2实例是否已完成重新启动?,amazon-web-services,amazon-ec2,aws-sdk,aws-cli,Amazon Web Services,Amazon Ec2,Aws Sdk,Aws Cli,我发现实例的状态在重新启动期间不会改变。那么,有没有办法检查实例是否刚刚完成重新启动?重新启动是一个操作系统级别的事件,因此虚拟机监控程序不会意识到操作系统的重新启动。正如您所指出的,在API/CLI级别重新启动期间,您无法从命令行工具检测到任何更改 但是,假设在入站安全组中启用了ICMP回显请求,则可以使用PING报告实例的网络访问能力。这类似于EC2状态检查在报告实例运行状况时所做的操作 在重新启动过程中,您将看到PING数据包瞬间丢失: Reply from 10.0.0.1: bytes

我发现实例的状态在重新启动期间不会改变。那么,有没有办法检查实例是否刚刚完成重新启动?

重新启动是一个操作系统级别的事件,因此虚拟机监控程序不会意识到操作系统的重新启动。正如您所指出的,在API/CLI级别重新启动期间,您无法从命令行工具检测到任何更改

但是,假设在入站安全组中启用了ICMP回显请求,则可以使用PING报告实例的网络访问能力。这类似于EC2状态检查在报告实例运行状况时所做的操作

在重新启动过程中,您将看到PING数据包瞬间丢失:

Reply from 10.0.0.1: bytes=32 time=97ms TTL=101
Reply from 10.0.0.1: bytes=32 time=80ms TTL=101
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from 10.0.0.1: bytes=32 time=82ms TTL=101
Reply from 10.0.0.1: bytes=32 time=77ms TTL=101
Reply from 10.0.0.1: bytes=32 time=106ms TTL=101
然后,在实例完成后,数据包将返回并重新启动

我经常以这种方式使用PING来确定重新启动何时完成。您可以通过编程方式执行相同的操作。


使用节点SDK,您可以使用
instanceStatusOk
重新启动后进行检查

instanceStatusOk
>通过每隔15秒(最多40次)定期调用基础EC2.describeInstanceStatus()操作来等待instanceStatusOk状态


示例:

调用Reboot后,实例状态可以是Ok(30秒)=>Init(3秒)=>Ok。如果此转换在5秒内发生,则每15秒进行一次轮询可能会失败。