我正在研究shell脚本,女巫确实遵循:
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文档(http://docs.aws.amazon.com/cli/latest/reference/ec2/wait/snapshot-completed.html)没有任何超时或尝试数量选项。
你可能有些人遇到过同样的问题吗?答案 0 :(得分:9)
所以,最后,我使用了以下方式来解决它:
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
如果您有可以改善它的内容,请与我们分享。
答案 1 :(得分:3)
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秒打印一次进度消息。完成的快照会立即返回100%
。
答案 2 :(得分:1)
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
答案 3 :(得分:0)
您可能应该在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