aws 命令行界面 - aws ec2 wait - 超出最大尝试次数
aws command line interface - aws ec2 wait - Max attempts exceeded
我正在编写 shell 脚本, 确实遵循:
- 创建 EBS 卷的快照;
- 基于此快照创建 AMI 映像。
1) 我使用以下命令创建快照:
SNAPSHOT_ID=$(aws ec2 create-snapshot "${DRYRUN}" --volume-id "${ROOT_VOLUME_ID}" --description "${SNAPSHOT_DESCRIPTION}" --query 'SnapshotId')
2)我用waiter等待完成状态:
aws ec2 wait snapshot-completed --snapshot-ids "${SNAPSHOT_ID}"
当我使用 8 GB 大小的 EBS 卷对其进行测试时,一切顺利。
当它是40 GB时,我有一个例外:
Waiter SnapshotCompleted failed: Max attempts exceeded
估计是40GB的比较费时间吧,然后8GB的,稍等一下。
AWS Docs (http://docs.aws.amazon.com/cli/latest/reference/ec2/wait/snapshot-completed.html) 没有任何超时或尝试次数选项。
你们中的一些人可能遇到过同样的问题吗?
所以,最后,我用下面的方法解决了:
- 创建快照
- 使用循环检查命令的退出状态
aws ec2 wait snapshot-completed
- 如果退出状态不是
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
如果您有什么可以改进的地方,请与我们分享。
aws ec2 wait snapshot-completed
需要一段时间才能超时。此代码段使用 aws ec2 describe-snapshots
来获取进度。当它是 100%
时它调用 snapshot-completed
.
# create snapshot
SNAPSHOTID=$(aws ec2 create-snapshot --volume-id $VOLUMEID --output text --query "SnapshotId")
echo "Waiting for Snapshot ID: $SNAPSHOTID"
SNAPSHOTPROGRESS=$(aws ec2 describe-snapshots --snapshot-ids $SNAPSHOTID --query "Snapshots[*].Progress" --output text)
while [ $SNAPSHOTPROGRESS != "100%" ]
do
sleep 15
echo "Snapshot ID: $SNAPSHOTID $SNAPSHOTPROGRESS"
SNAPSHOTPROGRESS=$(aws ec2 describe-snapshots --snapshot-ids $SNAPSHOTID --query "Snapshots[*].Progress" --output text)
done
aws ec2 wait snapshot-completed --snapshot-ids "$SNAPSHOTID"
这与上面的基本相同,但每 15 秒打印一次进度消息。立即完成的快照 return 100%
。
你应该在 bash 中使用 until
,看起来更干净一些,你不必重复。
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
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-retries.html
您可以设置变量或使用配置文件来增加超时。
AWS_MAX_ATTEMPTS=100
~/.aws/config
[default]
retry_mode = standard
max_attempts = 6
我正在编写 shell 脚本, 确实遵循:
- 创建 EBS 卷的快照;
- 基于此快照创建 AMI 映像。
1) 我使用以下命令创建快照:
SNAPSHOT_ID=$(aws ec2 create-snapshot "${DRYRUN}" --volume-id "${ROOT_VOLUME_ID}" --description "${SNAPSHOT_DESCRIPTION}" --query 'SnapshotId')
2)我用waiter等待完成状态:
aws ec2 wait snapshot-completed --snapshot-ids "${SNAPSHOT_ID}"
当我使用 8 GB 大小的 EBS 卷对其进行测试时,一切顺利。
当它是40 GB时,我有一个例外:
Waiter SnapshotCompleted failed: Max attempts exceeded
估计是40GB的比较费时间吧,然后8GB的,稍等一下。
AWS Docs (http://docs.aws.amazon.com/cli/latest/reference/ec2/wait/snapshot-completed.html) 没有任何超时或尝试次数选项。
你们中的一些人可能遇到过同样的问题吗?
所以,最后,我用下面的方法解决了:
- 创建快照
- 使用循环检查命令的退出状态
aws ec2 wait snapshot-completed
- 如果退出状态不是
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
如果您有什么可以改进的地方,请与我们分享。
aws ec2 wait snapshot-completed
需要一段时间才能超时。此代码段使用 aws ec2 describe-snapshots
来获取进度。当它是 100%
时它调用 snapshot-completed
.
# create snapshot
SNAPSHOTID=$(aws ec2 create-snapshot --volume-id $VOLUMEID --output text --query "SnapshotId")
echo "Waiting for Snapshot ID: $SNAPSHOTID"
SNAPSHOTPROGRESS=$(aws ec2 describe-snapshots --snapshot-ids $SNAPSHOTID --query "Snapshots[*].Progress" --output text)
while [ $SNAPSHOTPROGRESS != "100%" ]
do
sleep 15
echo "Snapshot ID: $SNAPSHOTID $SNAPSHOTPROGRESS"
SNAPSHOTPROGRESS=$(aws ec2 describe-snapshots --snapshot-ids $SNAPSHOTID --query "Snapshots[*].Progress" --output text)
done
aws ec2 wait snapshot-completed --snapshot-ids "$SNAPSHOTID"
这与上面的基本相同,但每 15 秒打印一次进度消息。立即完成的快照 return 100%
。
你应该在 bash 中使用 until
,看起来更干净一些,你不必重复。
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
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-retries.html
您可以设置变量或使用配置文件来增加超时。
AWS_MAX_ATTEMPTS=100
~/.aws/config
[default]
retry_mode = standard
max_attempts = 6