"Lambda containers" is a bit of a misnomer, as you can have multiple instances of a function run on the same container, it's just that initial startup time once the container shuts down that is slow (which can be somewhat avoided by a "warming" function set to trigger on a cron).
I would definitely go with containers if your intention is to use Spring. ECS containers can autoscale just the same as lambdas.
There's some work being done to package Java code to run more efficiently in serverless computing environments, but IIRC, it's not there yet.
When I looked the Lambda API looked uncomplicated to implement (I saw an example somewhere) and it felt like you could just write a few controllers and gain the ability to run a subset of functionality in Lambda, especially if your app could be kept warm.
(to your cron comment, I thought that the reserved capacity would mean the container would be forcibly kept warm?)
> By default, Lambda polls up to 10 messages in your queue at once and sends that batch to your function.
From https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
If I had a Spring Java (well, Kotlin) app that processes stuff off SQS (large startup time but potentially very high parallelism), would you recommend running ECS containers and scale them up based on SQS back-pressure? Or would you package them up as Lambdas with provisioned capacity? Throughput will be fairly consistent (never zero) and occasionally bursty.