2015-06-22 64 views
4

我的shell腳本工作,巫不遵循:AWS命令行界面 - AWS EC2等待 - 最大嘗試突破

  • 創建EBS卷的快照;
  • 根據此快照創建AMI圖像。

1)我使用遵循命令創建快照:
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卷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)沒有任何超時或嘗試數量選項。

可能你們有些人面臨同樣的問題?

+1

「它將每15秒輪詢一次,直到達到成功狀態,在40次失敗檢查後,退出代碼爲255。 –

+1

感謝您的信息,@AdamOcsvari,在這種情況下,我們將循環,直到退出代碼爲0。 – antonbormotov

回答

6

所以,最後,我用如下的方法來解決這個問題:

  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 

如果你有什麼可以改善它,請與我們分享。

0

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%