Ich verwende ein Bash-Skript, um eine AWS-Instanz über CLI und eine Cloud-Vorlage zu erstellen. Ich möchte, dass mein Skript wartet, bis die Erstellung der Instanz abgeschlossen ist, bevor ich in meinem Skript weitermache. Im Moment benutze ich eine while-Schleife, um alle 5 Sekunden "zu beschreiben-stacks" und bricht die Schleife ab, wenn der Status = "CREATE_COMPLETE" oder ein Fehlerstatus ist. Kennt jemand einen eleganteren Weg, dies zu tun?Warten im Bash-Skript, bis die Erstellung der AWS-Instanz abgeschlossen ist
stackStatus="CREATE_IN_PROGRESS"
while [[ 1 ]]; do
echo "${AWS_CLI_PATH}" cloudformation describe-stacks --region "${CfnStackRegion}" --stack-name "${CfnStackName}"
response=$("${AWS_CLI_PATH}" cloudformation describe-stacks --region "${CfnStackRegion}" --stack-name "${CfnStackName}" 2>&1)
responseOrig="$response"
response=$(echo "$response" | tr '\n' ' ' | tr -s " " | sed -e 's/^ *//' -e 's/ *$//')
if [[ "$response" != *"StackStatus"* ]]
then
echo "Error occurred creating AWS CloudFormation stack. Error:"
echo " $responseOrig"
exit -1
fi
stackStatus=$(echo $response | sed -e 's/^.*"StackStatus"[ ]*:[ ]*"//' -e 's/".*//')
echo " StackStatus: $stackStatus"
if [[ "$stackStatus" == "ROLLBACK_IN_PROGRESS" ]] || [[ "$stackStatus" == "ROLLBACK_COMPLETE" ]] || [[ "$stackStatus" == "DELETE_IN_PROGRESS" ]] || [[ "$stackStatus" == "DELETE_COMPLETE" ]]; then
echo "Error occurred creating AWS CloudFormation stack and returned status code ROLLBACK_IN_PROGRESS. Details:"
echo "$responseOrig"
exit -1
elif [[ "$stackStatus" == "CREATE_COMPLETE" ]]; then
break
fi
# Sleep for 5 seconds, if stack creation in progress
sleep 5
done
Nichts falsch mit diesem Ansatz, so stellen Sie sicher, dass Sie schlafen nicht ewig sitzen - Sie können nach einer * lange brechen wollen * Zeit sowieso. Es gibt elegantere Lösungen, aber wahrscheinlich außerhalb des Rahmens von "bash" – arco444
würde ich gerne eine elegantere Lösung auch sehen! (in erster Linie um Spam zu vermeiden aws api ...) – Cyberwiz