AWS EC2 On-Demand Pricing - amazon-web-services

I'm new to AWS EC2, and I wanted to deploy a web server in it. However I'm concerned about the price because the app will only be used for a few hours per day and I saw in the AWS Calculator that there's a Utilization per month as part of the billing computation https://calculator.aws/#/createCalculator/EC2.
What does the Utilization mean? Let's say I have a running EC2 instance. How do I reduce the charges?
Does it depend on the amount of times the server APIs are invoked in the app? So for the hours that the APIs are NOT being invoked, I won't get charged?
Or
Will it keep on charging me as long as the EC2 instance is running so I should shut it down during idle hours to save up on costs?

Amazon EC2 is charged at an hourly price. The price varies by the Instance Type and the Operating System. Basically, machines with more memory and more CPUs are more expensive, and Windows is more expensive than Linux. There is also a charge for Data Transfer, which is traffic that goes out to the Internet.
If you have a small application, an alternative would be to use Amazon Lightsail, which offers a simple monthly price for both the computer and the traffic.

I've added my response to each of your questions -
What does the Utilization mean? Let's say I have a running EC2 instance. How do I reduce the charges? - You will be charged for the time you let that EC2 instance running, start with a t2.micro under free tier account, you are allowed to run it for 750 hours a month!
Does it depend on the amount of times the server APIs are invoked in the app? So for the hours that the APIs are NOT being invoked, I won't get charged? - No, for EC2, it's the runtime and not the API queries.
Will it keep on charging me as long as the EC2 instance is running so I should shut it down during idle hours to save up on costs? - Shut it down, I would also to setup billing alarms to get an alert once my bill crosses a certain threshold

As long as the servers are up and running you will be charged for it. So yes, you should shut it down during idle hours if you want to save costs.
If you just want to try it out for a simple Rest API server, you can create a new account for a 12-month free tier that will basically entitle you to the smallest 24/7 running (750 hours/month) server.
I've used this server for one of my smaller projects, and it was enough to serve about 100 users in total, with about maximum 10 people coming in and out time to time per day. Had no problem with it.

Related

Does anyone know how to reduce data transfer out charges on AWS?

I created a t3.micro EC2 instance on aws being costed at an hourly rate of $0.0065/hr. It's got 2 vCPUs and 1 GiB Memory. I manged to run a 128 tick CS:GO server on it, but the data transfer out charges are killing it. The estimated cost of this server per month is around $43, considering I only play 5 scrims (5v5 competitives) per day, and data transfer out alone costs me $38 in this case. However, some individuals are offering me a server for as low as $10 per month. What am I doing wrong? How do they do it?
You might consider moving from Amazon EC2 to Amazon Lightsail.
Lightsail has pricing plans that include volumes of Data Transfer traffic and it is designed for people who just want to launch a small number of virtual computers (eg WordPress instances) rather than configure a whole cloud infrastructure.
See: Amazon Lightsail Pricing | Virtual Private Server (VPS) | AWS

Does cost of EC2 on AWS increase at the same rate as user count?

I'm getting ready to launch a mobile app that I have hosted on AWS with an EC2 instance. ($0.0464 per On Demand Linux t2.medium Instance Hour).
This past month I was charged $112 for the EC2 usage, but only had a handful of internal users testing the private version of the app. It's a fairly simple app, not anything that should require a lot of computing power.
So what I'm wondering is if 10 users and dev team costs $112/mo, what happens if I get 1,000 users, or 10k users? Would the cost increase 100x, 1000x? I can't imagine getting auto-billed for $112,000 for a month of service with a small user base like 10k users.
Thanks for any help and guidance, I don't know much about AWS.
Here are the details of my billing for last month:
The billing page shows 2219 hours of t2.medium during this billing month.
That is the equivalent of 92 days. So, it might be 3 instances running for a full month.
Amazon EC2 is charged when the instance is in the Running state. If you are not using an instance, you can Stop the instance. The attached disks (EBS) will still be charged, but there will be no charge for the instance itself.
The charge is not based on the number of users, nor how 'busy' the instance is. It is simply charged when the instance is 'running'. This is because computer resources are exclusively assigned to instances (CPU, RAM) that nobody else can use.
Bottom line: Stop instances that you don't need. Use the smallest instance type for your use-case to reduce costs.
If you were not aware of the charges involved, you can contact AWS Customer Service and request a refund.
FYI, the T2 and T3 family are great for workloads that occasionally 'burst' but then have low-usage periods, but they are not great for sustained workloads. See: Burstable performance instances - Amazon Elastic Compute Cloud

AWS database operations and hour price

I need to host Accounting desktop application on Windows server. SQL database of this application will be used as a source for ecommerce website, so there will be quite often read/write operations to this database (from different linux server). Is using AWS a good idea here? Does the read/write database operations count for usage? Meaning, if I have a cron that reads DB every 5 minutes, does it mean I will be billed for 24/7 usage?
Thanks.
In databases PaaS = RDS (like in EC2, so with VMs) you're paying per hour of instance that you have available, it doesn't matter if you use it or not.
Answering your question - it doesn't matter if you will be querying the DB every 5 minutes, 1 second or 1 hour. You will pay for the database the same amount (transfer costs are in most cases negligible when compared to EC2/RDS costs) = for the availability you need. If you need it to be available 24x7, you will pay for 24x7. If you need your database to run only during specific hours during the day (or only Mon-Fri) you can automate starting/stopping it (e.g. with CloudWatch Events + AWS Lambda) to lower your cost.
But then I guess if it's ecommerce, you anyway need the database to be available 24x7 :)
Depends. If you want to setup your own SQL server on an EC2 instance or use AWS RDS.
In case of former you SQL server is like any other application running on an EC2 instance and the costs are simply a factor of EC2 pricing
In case of latter refer AWS RDS pricing for SQL Server

AWS site down issue because cpu utilization reach 100%

I am using an Amazon EC2 instance with instance type m3.medium and an Amazon RDS database instance.
In my working hours the website goes down because CPU utilization reaches 100%, and at night (not working hours) the CPU utilization is 60%.
So please give me right solution for this site down issue. I am not sure why I am experiencing this problem.
Once I had set a cron job for every minutes, but I was removed it because of slow down issue, but still I have site down issue.
When i try to use "top" command, i had shows below images for cpu usage, in which httpd command consume more cpu usage, so any suggestion for settings to reduce cpu usage with httpd command
Without website use by any user below two images:
http://screencast.com/t/1jV98WqhCLvV
http://screencast.com/t/PbXF5EYI
After website access simultaneously 5 users
http://screencast.com/t/QZgZsiNgdCUl
If you are CPU Utilization is reaching 100% you have two options.
Increase your EC2 Instance Type to large.
Use AutoScaling to launch one more EC2 Instance of same Instance Type.
Looks like you need some scheduled actions as you donot need 100% CPU Utilization during non-working hours.
The best possible option is to use AWS AutoScaling with Scheduled actions.
http://docs.aws.amazon.com/autoscaling/latest/userguide/schedule_time.html
AWS AutoScaling can launch new EC2 instances based on your CPU Utilization (or other metrics like Network Load, Disk read/write etc). This way you can always keep your site alive.
Using the AutoScaling scheduled actions you can specify metrics such that you stop your autoscaled instances during non-working hours and autoscale instances during working hours according to CPU Utilization(or other metrics).
You can even stop your severs if you donot need them at some point of time.
If you are not familiar with AWS AutoScaling you can follow the Documentation which is very precise and easy.
http://docs.aws.amazon.com/autoscaling/latest/userguide/GettingStartedTutorial.html
If the cpu utilization reach 100% bacause of the number of visitors your site have, you must consider to change the instance type, Auto Scaling or AWS CloudFront in order to cache as many http requests as posible (static and dynamic content).
If visitors are not the problem and there are other scheduled tasks on the EC2 isntance, I strongly recomend to decouple these workload via AWS SQS & AWS Elasticbeanstalk - Worker type

Computing power of AWS Elastic Beanstalk instances

I have a CPU-intensive application that I'm considering hosting on 1+ AWS Elastic Beanstalk instances. If at all possible, I'd like to throttle it so that I don't dip over the "free" utilization of the instances.
So I need to figure out what kind of hardware/virtualized hardware the Beanstalk instances are running on, and compare that to the maximum CPU utilization of the free versions.
So for instance, if each Beanstalk instance is running on, say, 2GHz CPUs, and my app performs a specific "supercalc" operation that takes 50 million CPU operations, but the free version of the app only allows me to utilize 100 billion operations per day, then I am limited to 100billion/50million = 2,000 "supercalcs" per day on a free instance. So if the CPU is 2GHz, then my app instance could only run for 2GHz/50million = 40 seconds before I've already "maxed out" the free CPU utilization on the Beanstalk instance.
This is probably not a great example, but hopefully illustrates what I'm trying to achieve. I need to figure out how much I need to throttle my app, or how long my app could run before I max out the Beanstalk CPU utilization, and it really comes down to how beefy the AWS Beanstalk machines are. Thanks in advance!
Amazon EC2 instances aren't based on a "CPU utilisation" billing system (I think Google App Engine is?) - EC2 instance billing is based on the amount of time the machine is "on" regardless of what is doing. See the Amazon EC2 Pricing for the amount it costs to run the different instances sizes in different regions.
There is a special case which is the "Micro" instance - this provides the ability to have short bursts of higher CPU usage than the "small" instance at a lower cost, but if you overuse it you get throttled back for a period (which you don't with a Small). This isn't the same as having an operation limit though, and the price remains the same whether you're throttled or not.
Also note that with Elastic Beanstalk you're also paying for the Elastic Loadbalancer, any storage and bandwidth, and also any database service you are using.
Given all that though - AWS does have a Free Tier - however this is only for the first 12 months of a new account. The Free Tier will cover the cost of a micro EC2 instance, Elastic Loadbalancer, RDS database and other ancillary services - see the link for more info.