Threading in Lambda is almost always the wrong move. You're fighting the runtime, not with it. Good call ripping it out.
That said, watch your async library choices. httpx is solid, but boto3's async story is still rough around the edges. aioboto3 works but adds a dependency. We ended up wrapping the sync boto3 calls in a thread pool with asyncio.to_thread() for DynamoDB - sounds backwards but it actually performs better than fighting boto3's internals.
The real win here is Lambda's event-driven nature. You're getting IO concurrency without managing threads. Exactly what async was built for.