🔖
CloudFormationでStackのStatusがRollback中の場合、Outputsが存在しない
TL;DR
CloudFormation の Stack の State が UPDATE_ROLLBACK_IN_PROGRESS
の場合、 describe-stacks
の返り値に Outputs が存在しません。
詳細
State が UPDATE_ROLLBACK_IN_PROGRESS
の状態で describe-stacks
を実行すると、以下のような返り値になります。
[
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:******:stack/STACK_NAME/******",
"StackName": "STACK_NAME",
"Description": "some description",
"Parameters": [],
"CreationTime": "2019-03- 31T06:38:34.000000+00:00",
"LastUpdatedTime": "2021-02-12T04:01:50.000000+00:00",
"RollbackConfiguration": {
"RollbackTriggers": []
},
"StackStatus": "UPDATE_ROLLBACK_IN_PROGRESS",
"StackStatusReason": "some reason"
"DisableRollback": false,
"NotificationARNs": [],
"Capabilities": [
"CAPABILITY_IAM",
"CAPABILITY_NAMED_IAM",
"CAPABILITY_AUTO_EXPAND"
],
// 本来ここに Outputs がある。
"Tags": [],
"EnableTerminationProtection": false,
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
}
]
また、 --query
オプションで Outputs の値を取得しようとした場合、None が返ります。
$ aws cloudformation describe-stacks --stack-name some-stack --query 'Stacks[0].Outputs[?OutputKey==`SomeKey`]' --output text
None
どうやって存在することを確かめる?
Status が *_COMPLETE
( UPDATE_COMPLETE
, UPDATE_ROLLBACK_COMPLETE
)の場合にのみ参照すれば、None が返ることは避けられます。
STATUS="$(aws cloudformation describe-stacks --stack-name some-stack --query 'Stacks[0].StackStatus' --output text)"
if [[ $APRICOT_INFRASTRUCTURE_STATUS != *_COMPLETE ]];
then
echo "CloudFormation Stack was not COMPLETE."
exit 1
fi
Discussion