2014-12-08 46 views
1

我正在使用AWS opsworks来静态配置由两层(Rails应用服务器和mySQL db)组成的简单堆栈。使用AWS CLI EC2“等待”功能的正确方法是什么?

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

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

#!/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命令返回BEFORE之前服务器实际上已启动并正在运行(这是练习的全部要点)。

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

任何想法是否在我的代码中有一个小故障,或者我需要考虑一些具体的考虑因素?

回答

0

aws opsworks describe-instances命令使用--region us-east-1,但aws ec2 wait命令使用--region ap-southeast-1。你确定你正在等待的事件是在东南1,而不是我们东1?

+0

Opsworks运营始终必须使用us-east-1,而不管服务器在哪个区域,而EC2和其他基础服务在每个区域都暴露。 – monohusche 2014-12-10 00:29:03

相关问题