diff --git a/ecs/sdk.go b/ecs/sdk.go index 7b8a943d1..6709a621d 100644 --- a/ecs/sdk.go +++ b/ecs/sdk.go @@ -264,9 +264,20 @@ func (s sdk) CreateChangeSet(ctx context.Context, name string, template []byte) return "", err } - err = s.CF.WaitUntilChangeSetCreateCompleteWithContext(ctx, &cloudformation.DescribeChangeSetInput{ + // we have to WaitUntilChangeSetCreateComplete even this in fail with error `ResourceNotReady` + // so that we can invoke DescribeChangeSet to check status, and then we can know about the actual creation failure cause. + s.CF.WaitUntilChangeSetCreateCompleteWithContext(ctx, &cloudformation.DescribeChangeSetInput{ // nolint:errcheck ChangeSetName: changeset.Id, }) + + desc, err := s.CF.DescribeChangeSetWithContext(ctx, &cloudformation.DescribeChangeSetInput{ + ChangeSetName: aws.String(update), + StackName: aws.String(name), + }) + if aws.StringValue(desc.Status) == "FAILED" { + return *changeset.Id, fmt.Errorf(aws.StringValue(desc.StatusReason)) + } + return *changeset.Id, err }