Skip to main content

Async AWS SDK for Python

https://img.shields.io/pypi/v/aioboto3.svg https://travis-ci.com/terrycain/aioboto3.svg?branch=master Documentation Status Updates

This package is mostly just a wrapper combining the great work of boto3 and aiobotocore.

aiobotocore allows you to use near enough all of the boto3 client commands in an async manner just by prefixing the command with await.

With aioboto3 you can now use the higher level APIs provided by boto3 in an asynchronous manner. Mainly I developed this as I wanted to use the boto3 dynamodb Table object in some async microservices.

While all resources in boto3 should work I havent tested them all, so if what your after is not in the table below then try it out, if it works drop me an issue with a simple test case and I’ll add it to the table.

Services

Status

DynamoDB Service Resource

Tested and working

DynamoDB Table

Tested and working

S3

Working

Kinesis

Working

SSM Parameter Store

Working

Athena

Working

Example

Simple example of using aioboto3 to put items into a dynamodb table

import asyncio
import aioboto3
from boto3.dynamodb.conditions import Key


async def main():
    async with aioboto3.resource('dynamodb', region_name='eu-central-1') as dynamo_resource:
        table = dynamo_resource.Table('test_table')

        await table.put_item(
            Item={'pk': 'test1', 'col1': 'some_data'}
        )

        result = await table.query(
            KeyConditionExpression=Key('pk').eq('test1')
        )

        # Example batch write
        more_items = [{'pk': 't2', 'col1': 'c1'}, \
                      {'pk': 't3', 'col1': 'c3'}]
        async with table.batch_writer() as batch:
            for item_ in more_items:
                await batch.put_item(Item=item_)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

# Outputs:
#  [{'col1': 'some_data', 'pk': 'test1'}]

Things that either dont work or have been patched

As this library literally wraps boto3, its inevitable that some things won’t magically be async.

Fixed:

  • s3_client.download_file* This is performed by the s3transfer module. – Patched with get_object

  • s3_client.upload_file* This is performed by the s3transfer module. – Patched with custom multipart upload

  • s3_client.copy This is performed by the s3transfer module. – Patched to use get_object -> upload_fileobject

  • dynamodb_resource.Table.batch_writer This now returns an async context manager which performs the same function

  • Resource waiters - You can now await waiters which are part of resource objects, not just client waiters, e.g. await dynamodbtable.wait_until_exists()

  • Resource object properties are normally autoloaded, now they are all co-routines and the metadata they come from will be loaded on first await and then cached thereafter.

  • S3 Bucket.objects object now works and has been asyncified. Examples here - https://aioboto3.readthedocs.io/en/latest/usage.html#s3-resource-objects

Amazon S3 Client-Side Encryption

Boto3 doesn’t support AWS client-side encryption so until they do I’ve added basic support for it. Docs here CSE

CSE requires the python cryptography library so if you do pip install aioboto3[s3cse] that’ll also include cryptography.

This library currently supports client-side encryption using KMS-Managed master keys performing envelope encryption using either AES/CBC/PKCS5Padding or preferably AES/GCM/NoPadding. The files generated are compatible with the Java Encryption SDK so I will assume they are compatible with the Ruby, PHP, Go and C++ libraries as well.

Non-KMS managed keys are not yet supported but if you have use of that, raise an issue and i’ll look into it.

Documentation

Docs are here - https://aioboto3.readthedocs.io/en/latest/

Examples here - https://aioboto3.readthedocs.io/en/latest/usage.html

Features

  • Closely mimics the usage of boto3.

Todo

  • More examples

  • Set up docs

  • Look into monkey-patching the aws xray sdk to be more async if it needs to be.

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template. It also makes use of the aiobotocore and boto3 libraries. All the credit goes to them, this is mainly a wrapper with some examples.

History

7.0.0 (2020-03-12)

  • Upgrade to aiobotocore 0.12

  • Bumped minimum python version to 3.6, adding support for 3.8

  • Eliminate use of deprecated loop arguments

6.5.0 (2020-02-20)

  • @bact fixed some typos :)

  • Asyncified the S3 resource Bucket().objects API and by extension, anything else in boto3 that uses the same object structure

  • Bumped aiobotocore version so that eventstreams would now work

6.4.0 (2019-06-20)

  • Updated `upload_fileobj` to upload multiple parts concurrently to make best use of the available bandwidth

6.2.0 (2019-05-07)

  • @inadarei Added batch writing example

  • Added waiter support in resources

  • Made resource object properties coroutines and lazy load data when called

6.2.0 (2019-02-27)

  • Added S3 Client side encryption functionality

6.1.0 (2019-02-13)

  • nvllsvm cleaned up the packaging, requirements, travis, sphinx…

  • Unvendored aiobotocore

6.0.1 (2018-11-22)

  • Fixed dependencies

6.0.0 (2018-11-21)

  • Fixed readthedocs

  • Vendored aiobotocore for later botocore version

5.0.0 (2018-10-12)

  • Updated lots of dependencies

  • Changed s3.upload_fileobj from using put_object to doing a multipart upload

  • Created s3.copy shim that runs get_object then does multipart upload, could do with a better implementation though.

4.1.2 (2018-08-28)

  • updated pypi credentials

4.1.0 (2018-08-28)

  • aiobotocore dependancy bump

4.0.2 (2018-08-03)

  • Dependancy bump

4.0.0 (2018-05-09)

  • Dependancy bump

  • Now using aiobotocore 0.8.0

  • Dropped < py3.5 support

  • Now using async def / await syntax

  • Fixed boto3 dependancy so it only uses a boto3 version supported by aiobotocore’s max botocore dependancy

  • Important, `__call__` in `AIOServiceAction` tries to yield from a coroutine in a non-coroutine, this code shouldn’t be hit anymore but I can’t guarantee that, so instead `__call__` was duplicated and awaited properly so “should” be fine. Credit goes to Arnulfo Solis for doing PR.

3.0.0 (2018-03-29)

  • Dependancy bump

  • Asyncified dynamodb Table Batch Writer + Tests

  • Added batch writer examples

  • Now using aiobotocore 0.6.0

2.2.0 (2018-01-24)

  • Dependancy bump

2.1.0 (2018-01-23)

  • Dependancy bump

  • Fix bug where extras isn’t packaged

2.0.0 (2017-12-30)

  • Patched most s3transfer functions

1.1.2 (2017-11-29)

  • Fixup of lingering GPL license texts

0.1.0 (2017-09-25)

  • First release on PyPI.

Metadata

Release files for aioboto3 7.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aioboto3 7.1.0
File Size Uploaded Provenance Actions
aioboto3-7.1.0.tar.gz 47.9 kB Without provenance Details for aioboto3-7.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for aioboto3 7.1.0
File Interpreter ABI Platform Actions
aioboto3-7.1.0-py2.py3-none-any.whl Python 3, Python 2 none any Details for aioboto3-7.1.0-py2.py3-none-any.whl

Total release size: 76.9 kB

Release files / aioboto3-7.1.0.tar.gz

Download URL aioboto3-7.1.0.tar.gz
Size 47.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0c6f66777b121363a0e267a006f8dd40537cbf4dce581009bfb5c110f1cdd758
BLAKE2b-256 checksum
How to use checksums
5d8a5819dc497df36e8c4116bc86a1c8fe67429f26422038e75699cf94b9900c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.7.1

Release files / aioboto3-7.1.0-py2.py3-none-any.whl

Download URL aioboto3-7.1.0-py2.py3-none-any.whl
Size 28.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
2a8847925edafc63e177019300179158f9d9d990fc7cf64962cf18bd6658ca0f
BLAKE2b-256 checksum
How to use checksums
c09a0feb95e5ba8e169e2ab07f4a6e3734ea5a382250e3bb1f5d3e9cc3b0f05a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.7.1

Security for aioboto3 7.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

7.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page