Currently the fleets (spot and on-demand) have no instance running
I see. This is the issue. If you are using FlexMatch with queues, then FlexMatch will ensure that your players are placed into a server process before calling the matchmaking “successful”, otherwise, it’ll continue to wait for a server process to be available until it times out.
If you look at DescribeMatchmaking API, you’ll see that it returns the IP address, DnsName and port of the server process that your players are placed in: DescribeMatchmaking - GameLift Service
although they are configured to maintain a buffer of 20% of game session availability.
Autoscaling should have scaled up the fleet for you since your available is at 0% (because there is no instances running). Did you by any chance set the min/max/desired fleet capacity to 0? Or stopped fleet autoscaling action?
If you want to simply test out your ruleset without having your players placed into any instances (and therefore save some cost on running instances), you can use Standalone mode on your matchmaking configuration instead, see: CreateMatchmakingConfiguration - GameLift Service. With this mode selected, matchmaking will not try to place game session into instances, and immediately send you successful events if players are matched.
NOTE: there is some charges for standalone flexmatch, see pricing plan, but for development purposes it should be cheap (if not for free with free tier)