According to the [AWS CFN docs for SQS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-properties-sqs-queues-return-values-ref), the physical resource ID should be its queue URL.

>Ref
>
>When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the queue URL. For example:
>
>{ "Ref": "https://sqs.us-east-2.amazonaws.com/123456789012/aa4-MyQueue-Z5NOSZO2PZE9" }

However, SQS queues created in Localstack via CloudFormation have physical resource IDs that are equal to the queue name:

```
$ aws cloudformation list-stack-resources --stack-name my-stack --endpoint http://localhost:4581 | grep -A3 -B3 Queue
        {
            "LogicalResourceId": "EventQueue",
            "PhysicalResourceId": "my-stack-events",
            "ResourceType": "AWS::SQS::Queue",
            "LastUpdatedTimestamp": "2011-06-21T20:15:58Z",
            "ResourceStatus": "CREATE_COMPLETE"
        },
```

I believe that this [was fixed at one point](https://github.com/localstack/localstack/pull/577) in Localstack, but seems to have since been reverted. I've [submitted an upstream issue](https://github.com/spulec/moto/issues/2407) to Moto as well.
sleep_time = max(sleep_time, 10)
        
        for name, plugin in SERVICE_PLUGINS.items():
            if name in apis:
                t1 = plugin.start(asynchronous=True)
                thread = thread or t1
        time.sleep(sleep_time)
        
        check_infra(apis=apis)
        
        restore_persisted_data(apis=apis)
        print('Ready.')
        sys.stdout.flush()
        if not asynchronous and thread:
            
            
            
            while True:
                time.sleep(1)
        return thread
    except KeyboardInterrupt:
        print('Shutdown')
    except Exception as e:
        print('Error starting infrastructure: %s %s' % (e, traceback.format_exc()))
        sys.stdout.flush()
        raise e
    finally:
        if not asynchronous:
            stop_infra()