I know there's an answer that has already been accepted and another one with an upvote, but I don't believe that either answer is particularly good.
Firstly, let's recap what Elastic Beanstalk (EB), ECS and Lambda actually are:
EB is definitely NOT your traditional hosting. Traditional hosting is where you spin up a server and it gets allocated an IP address and you ssh into the box and start installing stuff. EB, on the other hand, is a managed PaaS that allows the user to easily spin up a load balancer with one or more EC2s sitting behind it, which EB will then monitor and manage on your behalf. You can then upload your native application code (e.g. PHP, Python, etc) OR you can upload a Docker image OR define an S3 URL where the image is stored OR you can use ECR. Out of the box EB provides a web server configuration and a queue worker configuration, but it is easy enough to run queue workers on the web server configuration with a little bit of customisation. EB provides several options for auto-scaling and I have found average CPU to be the most effective - our production systems idle with two servers off-peak and auto-scale to around a dozen or so servers during peak times every single day. The upshot of this is that no, you cannot, and MUST not, treat EB as "Pets" - they are most definitely "Cattle". Nor can you rely on their storage being permanent, because just like ECS, EB will create and destroy EC2s according to your scaling requirements or if it detects that they are unhealthy.
ECS is a solution for running Docker containers and it provides more control over the configuration and, by virtue of that, is more complex to set up, monitor and manage. You either need to spin up and assign your own EC2s for the ECS clusters or you can let Fargate look after the creation and destruction of the EC2s for you. The latter is less work but more expensive as you can't take advantage of cost optimisation opportunities such as reserved instances.
Lambda, as the accepted answer notes, is a "server-less" concept for hosting that is often touted as being most appropriate for "small functions", but you can actually host monolithic web applications in Lambda, as long as your application doesn't exceed the memory limits of the configuration. (Look up Laravel Vapor by way of example). In reality, Lambda is not "server-less" - these functions run on VMs hosting a tiny version of Linux (which I've heard is called "Firecracker") and the whole thing is optimised around being able to boot up these VMs really quickly. That's why Lambda has the concept of "cold start", which is what happens when your "function" (aka VM) hasn't received any requests for a while and gets shut down. The main limitation of Lambda is cost (depending on your load) and the fact that a "function" isn't allowed to run for more than 15 minutes.
My advice to the OP, and, indeed, anyone new to AWS, would MOST DEFINITELY be to go with Elastic Beanstalk rather than ECS or Lambda. Using EB will provide a good introduction to load balancers, VPCs, EC2s and CloudWatch and the AWS console and will enable them to get started quickly. You'll be able to host either native code or Docker containers and you'll be able to run queue workers as well as serve web traffic. The scaling options are more than adequate for 99% of situations. The most commonly noted limitation of EB is the 4KB limit on environment variables, although even that has a workaround using Secure Secrets Manager.
ECS is the best option if you have some particularly long running and CPU-intensive batch operations, as you have better control over the cluster(s) running those task(s). However, ECS is more complicated and will require much more knowledge in order to set everything up. Honestly, for hosting a web application with some modest batch processing needs, EB is fine.
There are some SDKs and other tools that make Lambda fairly easy to use, even with monolithic web applications, but it can get expensive depending on your traffic volume and if you want to run batch jobs longer than 15 minutes then Lambda is not an option.
In summary, go with Elastic Beanstalk.