AWS Chalice Integration (EXPERIMENTAL)¶
How it works¶
Using aioboto3.experimental.async_chalice.AsyncChalice
as the main app entrypoint for a chalice app adds some shims in so
that you can use async def
functions with HTTP routes normally. Additionally a app.aioboto3
contains an aioboto3 Session
object which can be used to get s3 clients etc… Passing in a session to AsyncChalice
overrides the default empty session.
Chalice has some interesting quirks to how it works, most notably the eventloop can disappear between invocations so storing references to anything which could store the current event loop is not recommended. Because of this, caching aioboto3 clients and resources is not a good idea and realistically because this code is designed to be ran in a lambda, said caching buys you little.
The Chalice integration is very experimental, until someone runs it for a while and has faith in it, I would not recommend using this for anything critical.
Example¶
from aioboto3.experimental.async_chalice import AsyncChalice
app = AsyncChalice(app_name='testclient')
@app.route('/hello/{name}')
async def hello(name):
return {'hello': name}
@app.route('/list_buckets')
async def get_list_buckets():
async with app.aioboto3.client("s3") as s3:
resp = await s3.list_buckets()
return {"buckets": [bucket['Name'] for bucket in resp['Buckets']]}