在 Amazon EC2 上启动实例时,我将如何检测故障,例如,如果没有可用的机器来满足我的请求?我正在使用一种不太常见的机器类型,并且担心它不会启动,但在找出要查找的消息来检测这一点时遇到了麻烦。
我正在使用 EC2 命令行工具来执行此操作。我知道当我执行 ec2-describe-instance 以查看机器是否已启动时,我可以查找“正在运行”,但不知道要查找什么以查看启动是否失败。
谢谢!
在 Amazon EC2 上启动实例时,我将如何检测故障,例如,如果没有可用的机器来满足我的请求?我正在使用一种不太常见的机器类型,并且担心它不会启动,但在找出要查找的消息来检测这一点时遇到了麻烦。
我正在使用 EC2 命令行工具来执行此操作。我知道当我执行 ec2-describe-instance 以查看机器是否已启动时,我可以查找“正在运行”,但不知道要查找什么以查看启动是否失败。
谢谢!
的输出ec2-start-instances
仅返回 you stopped pending
,正如您所说,您需要使用它ec2-describe-instances
来检索状态。
为此,您有几个选择;您可以使用循环来检查instance-state-name
,寻找running
or的结果stopped
;或者,您可以查看reason
orstate-reason-code
字段;不幸的是,您需要触发您担心的失败,以获得指示失败的值。
我用来等待启动成功的批处理文件(下划线填写):
@echo off
set EC2_HOME=C:\tools\ec2-api-tools
set EC2_PRIVATE_KEY=C:\_\pk-_.pem
set EC2_CERT=C:\_\cert-_.pem
set JAVA_HOME=C:\Program Files (x86)\Java\jre6
%EC2_HOME%\bin\ec2-start-instances i-_
:docheck
%EC2_HOME%\bin\ec2-describe-instances | C:\tools\gnuwin32\bin\grep.exe -c stopped > %EC2_HOME%\temp.txt
findstr /m "1" %EC2_HOME%\temp.txt > nul
if %errorlevel%==0 (c:\tools\gnuwin32\bin\echo -n "."
goto docheck)
del temp.txt
ec2-start-instances 将返回您之前的状态(在最后一个命令到实例之后)和当前状态(在您的命令之后)。ec2-stop 实例做同样的事情。问题是,如果您正在编写脚本并且在“停止”实例上使用-start--或者-您使用-stop-在“待定”实例上。这些将导致命令行工具出现异常,并且 NASTILY 将脚本一直退出到原始控制台(非常糟糕的行为,亚马逊)。所以你必须一路解析 ec2-describe-instances [instance-id] 结果。但是,这仍然使您容易受到从您的实例获取状态和应用命令之间的那一点点时间的影响。如果其他人或亚马逊将您置于挂起或停止状态,然后您分别执行“停止”或“启动”,您的脚本将中断。我真的不知道如何用脚本捕捉这样的异常。糟糕的亚马逊 AWS,糟糕的狗!