Boto3 Python SDK
Boto3 is the official AWS SDK for Python. It lets you create, update, and configure IONOS Object Storage objects within your Python scripts.
Configuration
Install the latest Boto3 release via
pip
:pip install boto3
.
Note: Amazon extended the interface of the PutObject
operation and made it the default in the AWS SDK for Python (Boto3) from version 1.36.0
onwards. However, the IONOS Object Storage service does not yet support this change.
To avoid an error that occurs (InvalidTrailer) when calling the PutObject
operation: "Invalid trailing header names in x-amz-trailer," you have two options:
Use AWS boto3 client version
1.35.99
or lower instead of boto3 version1.36.0
or above.Add environment variables
AWS_REQUEST_CHECKSUM_CALCULATION=when_required
andAWS_RESPONSE_CHECKSUM_VALIDATION=when_required
for your script or set them globally.
For more information, see FAQs.
There are several ways to provide credentials, such as passing them as parameters to the boto.client()
method, via environment variables, or with a generic credential file (~/.aws/credentials)
. For more information, see Credentials.
Example of passing credentials as parameters when creating a Session object
To get the Access Key and Secret Key, see Generate a Key.
import boto3
import logging
from botocore.exceptions import ClientError
from botocore.client import Config
config = Config(
signature_version = 's3v4'
)
s3_client = boto3.client('s3',
endpoint_url='https://s3.eu-central-2.ionoscloud.com',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
config=config)
Example
List buckets:
response = s3_client.list_buckets() for bucket in response['Buckets']: print(bucket['Name'])
Create bucket
my-bucket
at the regioneu-central-1
:try: s3_client.create_bucket(Bucket='my-bucket', CreateBucketConfiguration={'LocationConstraint': 'eu-central-2'}) except ClientError as e: logging.error(e)
Upload filename.txt to the bucket
my-bucket
:try: s3_client.upload_file( Filename='filename.txt', Bucket='my-bucket', Key='my-prefix/filename.txt') except ClientError as e: logging.error(e)
For more information, see AWS SDK documentation on Uploading files.
Download the file
filename.txt
from themy-bucket
:s3_client.download_file('my-bucket', 'filename.txt', '/local_path/filename.txt')
List objects of the bucket
my-bucket
response = s3_client.list_objects(Bucket='my-bucket') for obj in response['Contents']: print(obj['Key'])
Copy the
filename.txt
from the bucketmy-source-bucket
to the bucketmy-dest-bucket
and add the prefixuploaded/
. We use theresource()
method instead of theclient()
method here. It provides a higher level of abstraction than the low-level calls made by service clients.config = Config( signature_version = 's3v4' ) s3_resource = boto3.resource('s3', endpoint_url='https://s3.eu-central-2.ionoscloud.com', aws_access_key_id='YOUR_ACCESS_KEY', aws_secret_access_key='YOUR_SECRET_KEY', config=config) copy_source = { 'Bucket': 'my-source-bucket', 'Key': 'filename.txt' } bucket = s3_resource.Bucket('my-dest-bucket') try: bucket.copy(copy_source, 'uploaded/filename.txt') except ClientError as e: logging.error(e)
For more examples, refer to Boto3 Documentation, such as:
For more information on Boto3 and Python, see Realpython.com – Python, Boto3, and AWS S3: Demystified.
Last updated
Was this helpful?