使用 AWS CLI EC2“等待”功能的正确方法是啥?

Posted

技术标签:

【中文标题】使用 AWS CLI EC2“等待”功能的正确方法是啥?【英文标题】:What is the proper way of using the AWS CLI EC2 "wait" function?使用 AWS CLI EC2“等待”功能的正确方法是什么? 【发布时间】:2015-02-05 18:43:16 【问题描述】:

我正在使用 AWS opsworks 静态配置一个简单的堆栈,由两层(Rails 应用服务器和 mysql db)组成。

在成功配置并启动堆栈并部署我的应用程序后,我想将堆栈的启动活动作为我管道的一部分自动化。 AWS CLI 提供了启动堆栈、检索各个服务器的实例 ID,然后使用 EC2 等待命令轮询 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 中运行最后一个命令,结果会在服务器实际启动并运行之前返回等待命令(这是练习的重点)。

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

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

【问题讨论】:

【参考方案1】:

aws opsworks describe-instances 命令使用--region us-east-1,但aws ec2 wait 命令使用--region ap-southeast-1。您确定您等待的实例位于 ap-southeast-1 而不是 us-east-1 中吗?

【讨论】:

Opsworks 操作始终必须使用 us-east-1,无论服务器位于哪个区域,而 EC2 和其他基础服务在每个区域都公开。

以上是关于使用 AWS CLI EC2“等待”功能的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

sh AWS CLI:使用标记值描述EC2实例

描述 EC2 实例 使用 AWS cli 过滤实例名称

使用 AWS CLI 删除 OpsWorks EC2 实例

AWS:使用 Elastic Beanstalk 命令行界面 (EB CLI) 3.x SSH 到 EC2

AWS SDK/CLI 访问错误,AWS Redshift create-cluster 的 EC2 实例凭证

markdown EC2上的AWS redis-cli