Answer – C
The AWS Documentation mentions the following.
AWS CloudFormation is a service that helps you model and set up your Amazon Web Services resources so that you can spend less time managing those resources and more time focusing on your applications that run in AWS. You create a template that describes all the AWS resources you want (like Amazon EC2 instances or Amazon RDS DB instances). AWS CloudFormation takes care of provisioning and configuring those resources for you.
Elastic Beanstalk is intended to make developers` lives easier. CloudFormation is intended to make systems engineers` lives easier.
Elastic Beanstalk is a PaaS layer on top of AWS`s IaaS services which abstracts away the underlying EC2 instances, Elastic Load Balancers, Auto Scaling groups, etc. This makes it a lot easier for developers, who don`t want to deal with all the systems stuff, to get their application quickly deployed on AWS. With Elastic Beanstalk, you don`t need to understand how any of the underlying magic works.
CloudFormation, on the other hand, doesn`t automatically do anything. It`s simply a way to define all the resources needed for deployment in a huge JSON file.
Option A could be a valid choice. But it has been clearly asked in question that the team needs to have control over the infrastructure.
Option B is invalid because Custom AMI will help create an Image for EC2 Instances, not for all the resources.
Option D is invalid because EBS Snapshot is a copy of your Volume used for EC2 Instance.
For more information on CloudFormation, please visit the below URL-
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html