This issue has shown that, when we introduce new providers and propagate the configs to users, then remove the config ("asf" was removed and renamed to "default"), user configuration breaks
- #6358

One way of dealing with this is checking at startup time whether the configured providers are available, and if not, log a warning and fall back to the default provider.
apis = get_enabled_apis()
    names = [name for name, plugin in SERVICE_PLUGINS.items() if name in apis]
    def check(name):
        check_service_health(api=name, expect_shutdown=True)
        LOG.debug("[shutdown] api %s has shut down", name)
    
    with ThreadPoolExecutor(max_workers=10) as executor:
        executor.map(check, names)
def check_service_health(api, expect_shutdown=False):
    status = SERVICE_PLUGINS.check(api)
    if status == expect_shutdown:
        if not expect_shutdown:
            LOG.warning('Service "%s" not yet available, retrying...', api)
        else:
            LOG.warning('Service "%s" still shutting down, retrying...', api)
        raise Exception("Service check failed for api: %s" % api)
def local_api_checker(service: str) -> Callable:
    """
    Creates a health check method for the given service that works under the assumption that the real backend service
    ports are locatable through the PROXY_LISTENER global.
    """
    from localstack.services.infra import PROXY_LISTENERS
    if config.EAGER_SERVICE_LOADING:
        
        
        
        return lambda *args, **kwargs: None
    def _check(expect_shutdown=False, print_error=False):