我正在使用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之前服务器实际上已启动并正在运行(这是练习的全部要点)。
最后,我找不到关于超时的任何信息,这对于阻止异步操作来说似乎非常重要。在哪里可以定义等待超时?
任何想法是否在我的代码中有一个小故障,或者我需要考虑一些具体的考虑因素?
Opsworks运营始终必须使用us-east-1,而不管服务器在哪个区域,而EC2和其他基础服务在每个区域都暴露。 – monohusche 2014-12-10 00:29:03