aws命令行界面 - aws ec2 wait - 超出最大尝试次数

ant*_*tov 5 amazon-ec2 amazon-web-services aws-cli

我正在研究shell脚本,女巫确实遵循:

  • 创建EBS卷的快照;
  • 根据此快照创建AMI图像.

1)我使用follow命令创建快照:
SNAPSHOT_ID=$(aws ec2 create-snapshot "${DRYRUN}" --volume-id "${ROOT_VOLUME_ID}" --description "${SNAPSHOT_DESCRIPTION}" --query 'SnapshotId')

2)我使用服务员等待完成状态:
aws ec2 wait snapshot-completed --snapshot-ids "${SNAPSHOT_ID}"

当我使用EBS Volume 8 GB大小进行测试时,一切顺利.
当它是40 GB时,我有一个例外:
Waiter SnapshotCompleted failed: Max attempts exceeded

也许,40 GB需要更多时间,然后需要8 GB,只需要等待.

AWS Docs(http://docs.aws.amazon.com/cli/latest/reference/ec2/wait/snapshot-completed.html)没有任何超时或尝试数量选项.

可能有些人遇到过同样的问题?

ant*_*tov 10

所以,最后,我用以下方式来解决它:

  1. 创建快照
  2. 使用循环检查命令的退出状态 aws ec2 wait snapshot-completed
  3. 如果退出状态不是0那么打印当前状态,进度并再次运行服务员.

# Create snapshot
SNAPSHOT_DESCRIPTION="Snapshot of Primary frontend instance $(date +%Y-%m-%d)"
SNAPSHOT_ID=$(aws ec2 create-snapshot "${DRYRUN}" --volume-id "${ROOT_VOLUME_ID}" --description "${SNAPSHOT_DESCRIPTION}" --query 'SnapshotId')

while [ "${exit_status}" != "0" ]
do
    SNAPSHOT_STATE="$(aws ec2 describe-snapshots --filters Name=snapshot-id,Values=${SNAPSHOT_ID} --query 'Snapshots[0].State')"
    SNAPSHOT_PROGRESS="$(aws ec2 describe-snapshots --filters Name=snapshot-id,Values=${SNAPSHOT_ID} --query 'Snapshots[0].Progress')"
    echo "### Snapshot id ${SNAPSHOT_ID} creation: state is ${SNAPSHOT_STATE}, ${SNAPSHOT_PROGRESS}%..."

    aws ec2 wait snapshot-completed --snapshot-ids "${SNAPSHOT_ID}"
    exit_status="$?"

done
Run Code Online (Sandbox Code Playgroud)

如果您有可以改善它的东西,请与我们分享.


Ric*_*hie 5

你可能应该until在 bash 中使用,看起来更干净一点,而且你不必重复。

echo "waiting for snapshot $snapshot"
until aws ec2 wait snapshot-completed --snapshot-ids $snapshot 2>/dev/null
do
    do printf "\rsnapshot progress: %s" $progress;
    sleep 10
    progress=$(aws ec2 describe-snapshots --snapshot-ids $snapshot --query "Snapshots[*].Progress" --output text)
done
Run Code Online (Sandbox Code Playgroud)