我使用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>
最后,我找不到任何关于超时的信息,这对于阻止异步操作似乎非常重要。可以在哪里定义等待超时?
我是否知道我的代码中是否存在故障,或者需要考虑一些具体的考虑因素?
答案 0 :(得分:0)
aws opsworks describe-instances
命令正在使用--region us-east-1
,但aws ec2 wait
命令正在使用--region ap-southeast-1
。你确定你所等待的实例位于东南1号而不是us-east-1吗?