Cloudformation hanging during deployment stage
I've noticed a bit of an ongoing issue with the cloudformation deployment.
until echo "$STATUS" | egrep -q 'CREATE_COMPLETE|UPDATE_COMPLETE|COMPLETE|FAILED|DELETE_IN_PROGRESS';
do
# DEPLOYMENT STAGE 1
aws cloudformation describe-stack-events --stack-name "${CFN_STACK_NAME}" --query 'StackEvents[?contains(ResourceStatus,`CREATE_IN_PROGRESS`)].[LogicalResourceId, ResourceStatus, ResourceType, ResourceStatusReason]';
# DEPLOYMENT STAGE 2
aws cloudformation describe-stack-events --stack-name "${CFN_STACK_NAME}" --query 'StackEvents[?contains(ResourceStatus,`FAILED`)].[LogicalResourceId, ResourceStatus, ResourceType, ResourceStatusReason]';
sleep 10;
# DEPLOYMENT STAGE 3
STATUS=$(aws cloudformation describe-stacks --stack-name "${CFN_STACK_NAME}" --query "Stacks[0].StackStatus" --output text);
done
It seems to me that during STAGE 1, the query can become hung and none responsive.. I've noticed this occurs if the stack is in any state that isn't CREATE_IN_PROCESS
A few things that should be noted.
- The
AWS_DEFAULT_REGIONneeds to be the same as the region that thestack-nameexists in. - The logs are being queried at the "most recent" state. This means we are checking if the logs for the stack event (in this case
CREATE_IN_PROGRESSexists in the stack events, not that they are the most recent event.
This will be fixed with the multi-regional deployment change
Snippet of logging output;
STATUS: [CREATE_IN_PROGRESS]
{
"StackEvents": [
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "SecurityGroups-CREATE_IN_PROGRESS-2022-01-13T20:01:50.487Z",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "SecurityGroups",
"PhysicalResourceId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra-SecurityGroups-XRU6YSRBSI9/a5255680-74ab-11ec-96fc-0eb6db23da45",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:50.487000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceStatusReason": "Resource creation Initiated",
"ResourceProperties": "{\"TemplateURL\":\"https://s3.amazonaws.com/clearwater-bitops-deployments/multiregion-deployment/templates/security-groups.yaml\",\"Parameters\":{\"VpcId\":\"vpc-0bc30f5a3a12d11e0\",\"SourceSecurityGroup\":\"sg-0edf34e8738a4688c\",\"Region\":\"us-east-1\"}}"
},
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "SecurityGroups-CREATE_IN_PROGRESS-2022-01-13T20:01:49.433Z",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "SecurityGroups",
"PhysicalResourceId": "",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:49.433000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceProperties": "{\"TemplateURL\":\"https://s3.amazonaws.com/clearwater-bitops-deployments/multiregion-deployment/templates/security-groups.yaml\",\"Parameters\":{\"VpcId\":\"vpc-0bc30f5a3a12d11e0\",\"SourceSecurityGroup\":\"sg-0edf34e8738a4688c\",\"Region\":\"us-east-1\"}}"
},
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "a08f7ab0-74ab-11ec-a9db-12e3f0953fd1",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "test-mr-clearwater-ecs-infra",
"PhysicalResourceId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:42.494000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceStatusReason": "User Initiated"
}
]
}
STATUS: [CREATE_IN_PROGRESS]
{
"StackEvents": [
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "SecurityGroups-CREATE_IN_PROGRESS-2022-01-13T20:01:50.487Z",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "SecurityGroups",
"PhysicalResourceId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra-SecurityGroups-XRU6YSRBSI9/a5255680-74ab-11ec-96fc-0eb6db23da45",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:50.487000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceStatusReason": "Resource creation Initiated",
"ResourceProperties": "{\"TemplateURL\":\"https://s3.amazonaws.com/clearwater-bitops-deployments/multiregion-deployment/templates/security-groups.yaml\",\"Parameters\":{\"VpcId\":\"vpc-0bc30f5a3a12d11e0\",\"SourceSecurityGroup\":\"sg-0edf34e8738a4688c\",\"Region\":\"us-east-1\"}}"
},
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "SecurityGroups-CREATE_IN_PROGRESS-2022-01-13T20:01:49.433Z",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "SecurityGroups",
"PhysicalResourceId": "",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:49.433000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceProperties": "{\"TemplateURL\":\"https://s3.amazonaws.com/clearwater-bitops-deployments/multiregion-deployment/templates/security-groups.yaml\",\"Parameters\":{\"VpcId\":\"vpc-0bc30f5a3a12d11e0\",\"SourceSecurityGroup\":\"sg-0edf34e8738a4688c\",\"Region\":\"us-east-1\"}}"
},
{
"StackId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"EventId": "a08f7ab0-74ab-11ec-a9db-12e3f0953fd1",
"StackName": "test-mr-clearwater-ecs-infra",
"LogicalResourceId": "test-mr-clearwater-ecs-infra",
"PhysicalResourceId": "arn:aws:cloudformation:us-east-1:186513196687:stack/test-mr-clearwater-ecs-infra/a08ce2a0-74ab-11ec-a9db-12e3f0953fd1",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "2022-01-13T20:01:42.494000+00:00",
"ResourceStatus": "CREATE_IN_PROGRESS",
"ResourceStatusReason": "User Initiated"
}
]
}
@mickmcgrath13 / @ConnorGraham What are your thoughts on having a verbose logging flag for cloudformation.
verbose would look like the above, and non verbose would strip it to be;
STATUS: [CREATE_IN_PROGRESS]
STATUS: [CREATE_IN_PROGRESS]
STATUS: [CREATE_COMPLETED]
@PhillypHenning there are already checks through bitops for the DEBUG env var. Would this suffice or do you want something more specific to CF?
I was thinking this would be specifically for CF logs, though if you think it should be encompassed in the DEBUG flag I don't have any objections.