I had the same issue a year ago. I implemented a fargate acting as a rate limiter in front of the stepfunctions and check the number of executions every 60 secs. If it's more than the threshold, I wait or launch a new stepfunction execution. The ratelimiter was launched by a lambda with concurrency limit 1