2014-12-08 41 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

相關問題