使用AWS CLI EC2"等待"的正确方法是什么?功能?

时间:2014-12-08 06:20:18

标签: shell amazon-web-services amazon-ec2 aws-opsworks aws-cli

我使用AWS opsworks静态配置一个简单的堆栈,由两层组成(Rails app server和mySQL db)。

在成功配置并启动堆栈并部署我的应用程序之后,我想自动将堆栈的启动活动作为管道的一部分。 AWS CLI提供启动堆栈的功能,检索各个服务器的实例ID,然后使用EC2等待命令轮询AWS以获取完成状态(“实例运行”)。

下面的脚本是我正在使用的(第一个命令启动堆栈,第二个命令检索两个主机的实例ID,第三个命令启动这两个服务器的wait命令):

#!/bin/bash

aws opsworks --region us-east-1 start-stack --stack-id 9e1b0534-5b38-4fa5-b30c-f849dda8f46b          

instance_id=$(aws opsworks --region us-east-1 describe-instances --stack-id 9e1b0534-5b38-4fa5-b30c-f849dda8f46b --query "Instances[].Ec2InstanceId" --output text)

aws ec2 wait --region ap-southeast-1 instance-running --instance-ids $instance_id

运行此脚本时,我总是在两个id中的一个上获得“InvalidInstanceID”异常,即使它肯定是正确的ID。其次,如果在通过AWS控制台并行启动堆栈时直接在shell中运行最后一个命令,则事实证明wait命令在服务器实际启动并运行之前返回(这是练习的重点)。 / p>

最后,我找不到任何关于超时的信息,这对于阻止异步操作似乎非常重要。可以在哪里定义等待超时?

我是否知道我的代码中是否存在故障,或者需要考虑一些具体的考虑因素?

1 个答案:

答案 0 :(得分:0)

aws opsworks describe-instances命令正在使用--region us-east-1,但aws ec2 wait命令正在使用--region ap-southeast-1。你确定你所等待的实例位于东南1号而不是us-east-1吗?