Boto3 Python SDK

Boto3 is the official AWS SDK for Python. It allows you to create, update, and configure IONOS S3 Object Storage objects from within your Python scripts.

Configuration

Install the latest Boto3 release via pip: pip install boto3

There are several ways to provide credentials, e.g. passing credentials as parameters to the boto.client() method, via environment variables, or with a generic credential file (~/.aws/credentials).

An example of passing credentials as parameters when creating a Session object:

To get the Access Key and Secret Key, log in to the DCD, and go to Menu > Storage > IONOS S3 Object Storage > Key management.

NOTE: Your credentials are not tied to a specific region or bucket.

For information on the supported IONOS S3 Object Storage Service endpoints, see S3 Endpoints.

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)

Sample usage

  • List buckets:

    response = s3_client.list_buckets()
    for bucket in response['Buckets']:
        print(bucket['Name'])
  • Create bucket my-bucket at the region eu-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 the my-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 bucket my-source-bucket to the bucket my-dest-bucket and add the prefix uploaded/. Instead of the client() method, we use the resource() 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, see Boto3 documentation, such as:

For more information on Boto3 and Python, see Realpython.com – Python, Boto3, and AWS S3: Demystified.

Last updated