boto/boto3 · error · ResourceNotExistsError
The '{service_name}' resource does not exist. The available
Error message
The '{service_name}' resource does not exist.
The available resources are:
- {available_services}
[Consider using a boto3.client('{service_name}') instead of a resource for '{service_name}'] What it means
Raised as boto3.exceptions.ResourceNotExistsError by Session.resource() when the loader cannot find a resource model for the requested service_name (UnknownServiceError from load_service_model). The resource API only covers a subset of AWS services that have hand-authored resource models in boto3, so requesting a resource for an unsupported service yields this error, which lists the available resources and, if a low-level client exists, suggests using boto3.client() instead.
Source
Thrown at boto3/session.py:433
a region_name value passed explicitly to the method. If
user_agent_extra is specified in the client config, it overrides
the default user_agent_extra provided by the resource API. See
`botocore config documentation
<https://docs.aws.amazon.com/botocore/latest/reference/config.html>`_
for more details.
:return: Subclass of :py:class:`~boto3.resources.base.ServiceResource`
"""
try:
resource_model = self._loader.load_service_model(
service_name, 'resources-1', api_version
)
except UnknownServiceError:
available = self.get_available_resources()
has_low_level_client = (
service_name in self.get_available_services()
)
raise ResourceNotExistsError(
service_name, available, has_low_level_client
)
except DataNotFoundError:
# This is because we've provided an invalid API version.
available_api_versions = self._loader.list_api_versions(
service_name, 'resources-1'
)
raise UnknownAPIVersionError(
service_name, api_version, ', '.join(available_api_versions)
)
if api_version is None:
# Even though botocore's load_service_model() can handle
# using the latest api_version if not provided, we need
# to track this api_version in boto3 in order to ensure
# we're pairing a resource model with a client model
# of the same API version. It's possible for the latest
# API version of a resource model in boto3 to not beView on GitHub (pinned to c7b4afac23)
Solutions
- Use the low-level client instead: boto3.client('service') — it supports all services.
- Check the list in the error message (or boto3.session.Session().get_available_resources()) and correct the service name/casing.
- Upgrade boto3 to pick up newer resource models.
- If the service name is correct but still missing, it has no resource model — switch your code to the client API for that service.
Example fix
// before
resource = boto3.resource('servicewithnoresource') # ResourceNotExistsError
// after
client = boto3.client('servicewithnoresource') # low-level client always works Defensive patterns
Strategy: fallback
Validate before calling
available_resources = boto3.session.Session().get_available_resources()
if service_name not in available_resources:
obj = boto3.client(service_name) # fallback to low-level client
else:
obj = boto3.resource(service_name) Type guard
def has_resource_model(service_name: str) -> bool:
return service_name in boto3.session.Session().get_available_resources() Try / catch
from boto3.exceptions import ResourceNotExistsError
try:
obj = boto3.resource(service_name)
except ResourceNotExistsError:
obj = boto3.client(service_name) # every AWS service has a client Prevention
- Check get_available_resources() before assuming a resource interface exists.
- Default to boto3.client() for services you are unsure about.
- Keep boto3 current so newer services gain resource models over time.
When it happens
Trigger: Calling boto3.resource('service') (or session.resource('service')) for a service without a bundled resource model — e.g. a newer/less-common service, a typo, or a service name using the wrong casing. Also triggered by passing an api_version that resolves to no resource data.
Common situations: Assuming every AWS service has a resource interface; typos or wrong service-name casing (e.g. 'S3' vs 's3'); using a service added after your pinned boto3 version; migrating from client to resource API for a service that has no resource model.
Related errors
- The '{service_name}' resource does not support an API versio
- Search path hits shape type {shape.type_name} from {item}
- Either a boto3.Client or s3transfer.manager.TransferManager
- Manager cannot be provided with client, config, nor osutil.
- Filename must be a string or a path-like object
AI-assisted analysis of boto/boto3@c7b4afac23 (2026-08-04).
Data as JSON: /data/errors/f71db44dd00dd5ce.json.
Report an issue: GitHub.