我正在编写 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 等待快照完成 --snapshot-ids "${SNAPSHOT_ID}"
当我使用 EBS 卷 8 GB 大小对其进行测试时,一切顺利。
当它是 40 GB 时,我有一个异常(exception):
Waiter SnapshotCompleted 失败:超出最大尝试次数
可能 40 GB 需要更多时间,然后 8 GB 需要更多时间,只需等待。
AWS 文档 ( http://docs.aws.amazon.com/cli/latest/reference/ec2/wait/snapshot-completed.html ) 没有任何超时或尝试数量选项。
也许你们中的一些人也遇到过同样的问题?
最佳答案
所以,最后我用以下方法解决了这个问题:
- 创建快照
- 使用循环检查命令的退出状态
aws ec2 wait snapshot-completed
- 如果退出状态不是
0
,则打印当前状态、进度并再次运行 waiter。
# 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
如果您有可以改进的地方,请与我们分享。
关于amazon-web-services - aws 命令行界面 - aws ec2 等待 - 超出最大尝试次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977532/