With EC2 you can (to some extent) scale both horizontally (adding more instances) and vertically (going to a larger instance) - however, the latter cannot be done automatically.
Almost nothing is inherently shared between instances - they run their own operating systems, have their own memory, and their own storage, and own IPs. Treat them as you would any VPS - just with a bit more automated provisioning system.
One place where EC2 differs from most VPS solutions is in the ability to add storage. This can be done without stopping the instance, in the form of 'adding new volumes' (so you would have, for example, /dev/xvda, and then add /dev/xvdb, etc.)
You can go to a larger instance via the following:
Stop (not terminate) the instance
Use ec2-modify-instance-attribute i-xxxxxx -t to change the instance type
Start the instance
For all other aspects of scalability, you are on your own - you have to design your application to make use of what Amazon provides:
Elastic IPs - to provide a single constant public IP despite changing the underlying instance
Elastic Load Balancers - to distribute requests between the instances
EBS volumes - for persistent storage
EC2 instances - for computing power
S3 & Cloudfront - for content delivery
RDS - for MySQL databases managed by AWS (there is no built in scalability though)
AWS definitely doesn't do everything for you - it is not an automatic solution to take any application and instantly let it scale, but it does provide a framework on which you can build an application that will easily scale.
You can provision additional servers at will - either identical to existing ones, or different from them, and AWS will increase/decrease the number of instances on a number of metrics (e.g. load) if you want.
You can build arrays of disks, setup network file systems, network your instances together (VPC), and perform pretty much any function that would be necessary to build a scalable architecture.
At least in part the underlying reason for the setup on AWS is because each 'instance' is a predefined virtual machine. To modify the specs of a virtual machine would require you to stop and start it anyway. Amazon has provided a large assortment of instance types, to choose from, but beyond that, you cannot customize the CPU/RAM of an instance-type. Additionally, horizontal scaling overcomes the limitation of a single machine (for instance, it would be unimaginable for any large site to run on one server, no matter how large) - and avoids single points of failures. Arguably, if you need more power than is offered by their largest instances, horizontal scaling would likely end up as your solution, whether or not you ran on AWS.
Best Answer
This is not a step by step guide, but should start giving you an overall idea of what's involved.
You can have both Apache and IIS running on the same machine (regardless whether it's an EC2 or some other sort of server), and if you don't mind having them running on different ports then it should be fairly easy.
Make sure you configure the security group into which the EC2 is located to allow inbound traffic to port 80 and 8088.
Assign an elastic IP to your EC2.
At that point the Apache hosted websites are going to be reachable through:
http://my.elasticip.address:8088/...
and the IIS ones through:
http://my.elasticip.address/...
Alternatively you could assign multiple internal IPS to the EC2 and bind IIS and Apache to one specific ip (that way both web servers could listen on the default HTTP port).
http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-AssignPrivateIpAddresses.html
This part would require more research / tests, since I don't think you can assign an elastic ip to a specific internal EC2 ip address, unless your EC2 is inside a VPC (http://aws.amazon.com/vpc/).