aws-cdk: Deploy error reporting is not showing the reason of failure when using nested stacks.
main/root stack is not properly reporting errors from nested stacks, there is no way to know why it actually failed because the error is generalized that some resources could not be created, but why, there is no reason. The only chance to see the error is to constantly monitor the deployment on AWS CloudFormation Console, and once it starts to roll back and delete nested stacks you can quickly see why the nested stack failed in events tab.
E.g.:
creating CloudFormation changeset...
0/3 | 2:07:56 PM | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata
0/3 | 2:07:56 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | appsync-bizon.NestedStack/appsync-bizon.NestedStackResource (appsyncbizonNestedStackappsyncbizonNestedStackResource814A53CF)
0/3 | 2:07:57 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | appsync-bizon.NestedStack/appsync-bizon.NestedStackResource (appsyncbizonNestedStackappsyncbizonNestedStackResource814A53CF) Resource creation Initiated
0/3 | 2:07:58 PM | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
1/3 | 2:07:58 PM | CREATE_COMPLETE | AWS::CDK::Metadata | CDKMetadata
2/3 | 2:08:19 PM | CREATE_FAILED | AWS::CloudFormation::Stack | appsync-bizon.NestedStack/appsync-bizon.NestedStackResource (appsyncbizonNestedStackappsyncbizonNestedStackResource814A53CF) Embedded stack arn:aws:cloudformation:eu-west-2:452364846299:stack/ProductName-bizon-appsyncbizonNestedStackappsyncbizonNestedStackResource814A53CF-4NAE12ZLOQGT/a92a4b40-3c46-11ea-9fec-06452e71541c was not successfully created: The following resource(s) failed to create: [dynamodbstackbizonNestedStackdynamodbstackbizonNestedStackResource0AACEAF0, productnameresolversNestedStackproductnameresolversNestedStackResource42DF9B6A].
as you can see there is no reason why it failed, just saying that some resources failed to create. While actually the error on the nested stack events tab is:
E.g.:
Service role arn not specified (Service: AWSAppSync; Status Code: 400; Error Code: BadRequestException; Request ID: 5a9b00be-f21c-4cea-97ad-3d0e8552c5e5)
or
Only one resolver is allowed per field. (Service: AWSAppSync; Status Code: 400; Error Code: BadRequestException; Request ID: 39813c06-7d28-4d72-be32-f05785f4338e)
QueryListEvents, WikiArticleLastRevision
or
Property validation failure: [Value for property {/Name} does not match pattern {[_A-Za-z][_0-9A-Za-z]*}]
So there is no way to know about those errors because on roll back those stacks are removed, and developer will never know why it failed.
Reproduction Steps
Just add a nested stack and try to simulate the above error examples:
- Create AppSync nested stack but don’t create service roll for it, and try to create another resource which should rely on that service role.
- Name a resource in a nested stack improperly with
-or. - Create 2 same resolver in one nested stack. etc … basically any error that will be thrown inside nested stack
Error Log
already specified above
Environment
- CLI Version : 1.21.0
- Framework Version:
- OS : Windows
- Language : Typescript
Other
I found this issue opened as a feature #4489 but I don’t think it is a feature, rather it is a bug, since the feature of having Nested Stacks exists, this means that error reporting for nested stack to be chained in the parent wasn’t.
This is 🐛 Bug Report
About this issue
- Original URL
- State: open
- Created 4 years ago
- Reactions: 50
- Comments: 16 (1 by maintainers)
I faced the same issue, but found the failed nested stack in the CloudFormation CLI under stacks and when toggling the dropdown from “Active” to “Deleted”. The stack events for that one contained the failure reason.
I’m also trying to learn CDK right now and wondering how I’m supposed to debug anything when all I’m getting is something like “The following resource(s) failed to create: [Serverapp, EbsStackawselasticbeanstalkec2roleD9735CA4].”
Just to highlight the OP’s solution
It actually worked for and unblocked me
Change https://github.com/aws/aws-cdk/pull/27318 is released with aws-cdk 2.100.0. Can you test with this version and see if this issue is resolved?
Update please? It would help to see an error when debugging.
You can actually get the error on the CloudFormation console by going to the parent stack, finding the event for the child stack that failed, copying the name of the stack. Going to the sidebar and selecting ‘Deleted Stacks’, then searching for the child stack name.
Then look through the events of the deleted child stack to find the actual issue.
This is very far from user friendly.