我想了解习惯的Bash(即Bash相当于'Pythonic')方式与AWS CLI创建AWS资源(说AWS Cloud9 EC2环境),然后'poll'/'等待'/'睡眠'为该资源达到一定的状态;当AWS资源达到给定状态时,命令完成,用户可以将命令输入回shell。
输入
[cloudshell-user@ip-10-10-10-10 ~]$ #an idiomatic Bash one-liner that combines 'aws cloud9 create-environment-ec2 --name this-resource-will-take-a-moment-to-create --instance-type t2.micro' and 'aws cloud9 describe-environments --environment-ids tHiSiDwAsThEoUtPuToFtHePrEvIoUsCoMmAnD'
一段时间后,用户将看到
[cloudshell-user@ip-10-10-10-10 ~]$ #an idiomatic Bash one-liner that combines 'aws cloud9 create-environment-ec2 --name this-resource-will-take-a-moment-to-create --instance-type t2.micro' and 'aws cloud9 describe-environments --environment-ids tHiSiDwAsThEoUtPuToFtHePrEvIoUsCoMmAnD'
[cloudshell-user@ip-10-10-10-10 ~]$
此时AWS Cloud9 EC2环境已达到给定状态。
由于创建(创建-,启动-等)/等待(获取-/描述-)模式在AWS服务API调用和相应的AWS CLI命令中是常见的,因此只要对其他服务进行微小的更改,这个单行程序应该是可重用的。
Bash一行程序将在CloudShell中使用,但应该可以移植到其他Bash安装中。
我已经阅读了关于&&
和sleep
的内容,但是我想知道如何将这些命令(或任何替代命令)集成到一个惯用的Bash一行程序中。此外,我还担心不会违反AWS api的任何限制或请求限制。
正如jarmod评论的'boto3侍者',我进一步研究了AWS CLI的Github问题,发现了这个问题
为CLI提供动力的底层库botocore已经通过一个称为"waiters"的概念具有此功能,这是一种数据驱动的方式,用于描述等待资源达到特定状态…我们只需要想出一个合适的API来在CLI中公开它。
该功能是在aws-cli中实现的,但是每个服务必须在自己的服务中使用该功能。
在撰写本文时,aws的Cloud9部分不支持等待。