What is the difference between Boto3 resource, client, and session? Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python. Boto3 provides an easy-to-use API for interacting with AWS services using Python code.
Boto3.Session manages AWS configuration, including credentials and region. Boto3.Client
offers a lower-level, service-specific interface for direct API calls to AWS services, providing fine-grained control. Boto3.Resource
is a higher-level, object-oriented abstraction for interacting with AWS services, offering a more Pythonic interface. Session
configures settings, Client
executes service-specific actions, and Resource
provides an abstracted, object-oriented interaction with AWS resources, balancing flexibility and convenience in the Boto3 Python SDK.
What is Boto3 Resource, Client, Session
boto3.client
is more suitable when you need fine-grained control over the API requests and responses, and when you want to closely follow the structure of the AWS service API. Whereas boto3.resource
provides a higher-level, object-oriented, and abstracted interface for working with AWS resources,
The choice between client
and resource
depends on your specific use case and the level of abstraction and control you require when interacting with AWS services.
Boto3 Session
In Boto3, a boto3.Session is an object that stores configuration state, including AWS access key ID, secret access key, session token, and other settings. It provides a way to manage and customize the configuration settings for AWS service clients. The Session
class is often used as a central point for configuring AWS credentials and other parameters that are shared among multiple clients and resources.
Boto3 Client
In Boto3, the boto3.client
is a lower-level interface for making direct API calls to AWS services. It provides a more direct and service-specific way to interact with AWS services compared to the higher-level boto3.resource
. The Client
class is used to create service clients for different AWS services, such as S3, EC2, DynamoDB, etc.
Key features and characteristics of Boto3 Client
:
- Each service client (
Client
) has methods that directly map to AWS service API actions. For example, an S3 client might have methods likelist_buckets()
,put_object()
,get_object()
, etc. - With
Client
, you have more control over the details of API requests and responses. You directly invoke API actions with explicit parameters. - Requires explicit passing of credentials (access key, secret key), unless the credentials are available from other sources (environment variables, configuration files, IAM roles, etc.).
Client
provides direct access to features and parameters specific to the underlying AWS service. It mirrors the AWS service API closely.- For operations that can return a large number of results, such as listing objects in an S3 bucket, you need to handle pagination explicitly.
Boto3 Resource
In Boto3, the boto3.resource
is a higher-level, more Pythonic interface for interacting with AWS services. It provides an object-oriented approach to working with AWS resources, abstracting away many of the low-level details of the service API. The Resource
class allows you to interact with AWS resources in a more intuitive and natural way compared to using the lower-level Client
interface.
Here are some key features and characteristics of Boto3 Resource
:
boto3.resource
provides an object-oriented interface, allowing you to work with AWS resources as Python objects.- It abstracts away many of the complexities of the underlying AWS service API, making it easier to work with resources in a Pythonic manner.
- Resource methods that return multiple items (e.g., listing objects in an S3 bucket) automatically handle pagination, simplifying code for large result sets.
- The
Resource
class automatically inherits credentials from the associated Boto3 session or uses default credentials if none are explicitly provided. - Resource methods often reflect the lifecycle of the AWS resource they represent. For example, methods for S3 buckets may include
create()
,delete()
, and others. Resource
allows for customization and extension, making it possible to create more specialized interfaces for specific use cases or services.
While boto3.client
provides a lower-level, service-specific API for direct interactions with AWS services, boto3.resource
is designed to offer a more abstracted, Pythonic, and object-oriented approach to working with AWS resources. The choice between using Boto3 client
or resource
depends on the level of abstraction and convenience you need for your specific use case.
Create Boto3 Resource, Client, and Session
Since the Resource, Client, and Session are objects in Boto3, let’s see the different ways of creating Boto3 Resource, Client, and Session objects in Python.
Boto3 Session Example
Following is an example of the Boto3 session, which is used to set the configuration to the boto3 session.
# Using Session
import boto3
# Creating a Boto3 session with specific credentials and region
session = boto3.Session(
aws_access_key_id='your_access_key',
aws_secret_access_key='your_secret_key',
region_name='your_region'
)
Boto3 Client Example
Following is an example of a Boto3 client to get the S3 buckets and display them to the console.
# Using Client
import boto3
# Create an S3 client
s3_client = boto3.client('s3')
# List all S3 buckets
response = s3_client.list_buckets()
print('S3 Buckets:', response['Buckets'])
In this example, the s3_client
is created using boto3.client('s3')
, and then it is used to make an API call (list_buckets
) to get all S3 buckets.
Boto3 Resource Example
Following is an example of a Boto3 resource to get the S3 buckets and display them to the console.
# Using Resource
import boto3
# Create an S3 resource
s3_resource = boto3.resource('s3')
# List all S3 buckets
for bucket in s3_resource.buckets.all():
print('S3 Bucket:', bucket.name)
In this example, the s3_resource
is created using the boto3.resource
interface, and then it is used to iterate over all S3 buckets using the buckets.all()
method.
Difference between Boto3 Resource vs Client vs Session?
Boto3 Session
is often used to create AWS service clients and resources. Clients and resources created from the same session share the same configurations.
# Using the session to create an S3 client
s3_client = session.client('s3')
# Using the session to create an S3 resource
s3_resource = session.resource('s3')
Below are the features and differences between Boto3 Session, Client and Resource in table format.
Feature | boto3.Session | boto3.client | boto3.resource |
---|---|---|---|
Purpose | Manages configuration for AWS services, | Provides a low-level interface to AWS | Provides a higher-level, more Pythonic |
Creation | Created using boto3.Session() | Created using session.client('service') | Created using session.resource('service') |
Configuration Options | Allows configuration of credentials, | Allows configuration of credentials, | Allows configuration of credentials, |
Usage | Used to create service clients and resources with consistent configuration. | Used for low-level interactions with AWS services using service-specific | Used for higher-level interactions with AWS services using resource-specific |
Credentials | Can be used to explicitly pass credentials, or it inherits from default | Requires explicit passing of credentials or inherits from the default credentials. | Inherits credentials from the associated session or uses default credentials |
Service-Specific Methods | Does not have service-specific methods. | Has service-specific methods that map to AWS service API actions. | Has service-specific methods that map to AWS service API actions. |
Object Orientation | Primarily used for configuration and creating clients/resources. | Lower-level and closely mirrors AWS service APIs. | Higher-level, object-oriented, and abstracts underlying complexities. |
Conclusion
In this article, you have learned what a boto3 session, client, and resource is. And you also learned each topic with examples. In summary Boto3.Resource
is a higher-level, object-oriented abstraction for interacting with AWS services, offering a more Pythonic interface. Session
configures settings, Client
executes service-specific actions, and Resource
provides an abstracted, object-oriented interaction with AWS resources, balancing flexibility and convenience in the Boto3 Python SDK.