我有一个用例,我的bash脚本需要等待,直到AWS CloudFormation完成创建或更新堆栈。
我发现可以使用以下命令:
aws cloudformation wait stack-create-complete --stack-name STACK_NAME
aws cloudformation wait stack-update-complete --stack-name STACK_NAME
以下是脚本的摘录-
echo "Creating stack ..."
aws cloudformation create-stack --stack-name $STACK_NAME \
--parameters ParameterKey=Environment,ParameterValue=Development \
--template-body file://someCfScript.yaml \
--capabilities CAPABILITY_AUTO_EXPAND --profile someProfileName
aws cloudformation wait stack-create-complete --stack-name $STACK_NAME
但是我不能这样做,并且出现以下错误:
{
"StackId": "arn:aws:cloudformation:ap-southeast-1:someAwsAcId:stack/someStackName/xxxx-xxx-xx-xxx-xxxxx"
}
Waiter StackCreateComplete failed: Waiter encountered a terminal failure state
脚本没有等待,而是转到下一行,从而导致事情中断。
答案 0 :(得分:1)
wait 命令期望堆栈 arn
添加到创建堆栈命令jq -r '.StackId'
类似于:
ID=$(aws cloudformation create-stack --stack-name $STACK_NAME \
--parameters ParameterKey=Environment,ParameterValue=Development \
--template-body file://someCfScript.yaml \
--capabilities CAPABILITY_AUTO_EXPAND --profile someProfileName| jq -r '.StackId')
然后你就可以了
aws cloudformation wait stack-create-complete --stack-name "${STACKID}"
答案 1 :(得分:0)
您正在等待stack-update-complete,它正在等待:
等待直到堆栈状态为UPDATE_COMPLETE。
但是,您正在创建堆栈,而不是对其进行更新。因此,您应该等待stack-create-complete:
等待直到堆栈状态为CREATE_COMPLETE。
答案 2 :(得分:0)
该错误消息指示堆栈达到终端故障状态。与其他任何事情一样,如果您执行的操作失败,则不应继续。
您可以在达到终端状态后获取堆栈的状态:
aws cloudformation describe-stacks --stack-name STACK_NAME --query 'Stacks[].StackStatus' --output text
如果状态不是CREATE_COMPLETE
或UPDATE_COMPLETE
,则应打印一条错误消息并退出脚本。