【问题标题】:Script for checking if the created AMI is available or not,检查创建的 AMI 是否可用的脚本,
【发布时间】:2018-05-31 04:44:00
【问题描述】:

我正在尝试编写一个脚本,我们在其中备份一个 AMI(亚马逊机器映像),一旦它完成并且它的状态显示为“可用”,而不是通过电子邮件通知我们。

我已经涵盖了第一部分,但第二部分有问题,即不断检查图像何时可用并给我们发送电子邮件。要检查状态是否可用,我使用以下命令,

/usr/bin/aws ec2 describe-images --image-ids=$AMI_ID --query "Images[*].{st:State}" |  grep -e "available" | wc -l'

当 AMI 可用但无法创建循环以连续运行上述命令以检查输出是否等于 1 时,这将返回输出为 1。

请帮忙弄清楚这个循环。

PS IMAGE 创建需要 10 到 30 分钟,在某些情况下甚至更长时间。

【问题讨论】:

    标签: linux bash shell amazon-web-services scripting


    【解决方案1】:

    你可以使用无限循环

    while true
       do
           if /usr/bin/aws ec2 describe-images --image-ids=$AMI_ID --query "Images[*].{st:State}" |  grep -e "available" | wc -l'; then
              break
           fi
       esac
    done
    

    【讨论】:

    • 如果图像永远无法制作,我们将陷入无限循环。
    • 为其添加超时
    【解决方案2】:

    您也可以尝试如下:[根据需要更新 sleepTime]

    请注意,我已将标志 --executable-users self 添加到您的命令中,以列出您可用的图像。

    sleepTime=60 # sleepTime in seconds
    while true ; do
      count=$(aws ec2 describe-images --executable-users self --query "Images[*].{st:State}" |  grep -e "available" | wc -l)
      if [[ $count == 1 ]] ; then
         echo "Image is ready... Add your emailing code here"
         exit 0
      fi
      sleep $sleepTime;
      printf "." 
    done
    

    【讨论】:

    • 去掉三个反引号并在每行代码的开头添加4个空格,你的脚本会更容易阅读。
    • 按照建议格式化。现在看起来不错。谢谢@Michael-sqlbot。
    • 很抱歉这么久没有回复,这是我需要的。谢谢
    【解决方案3】:

    来自AWS Image-Exists Docs 可以在脚本中包含以下代码:

    aws ec2 wait image-exists \
    --image-ids ami-0abcdef1234567890
    

    (将 ami-0abcdef1234567890 替换为寻找的 AMI 代码)

    根据文档,image-exists 没有输出,但是当找到时,wait 会继续执行脚本。

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多