如何在bash中等待AWS CloudFormation堆栈创建或更新完成?

时间:2020-07-20 09:06:32

标签: bash amazon-web-services amazon-cloudformation aws-cli

我有一个用例,我的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

脚本没有等待,而是转到下一行,从而导致事情中断。

3 个答案:

答案 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_COMPLETEUPDATE_COMPLETE,则应打印一条错误消息并退出脚本。