Can you explain AWS billing rates on data transfer - amazon-web-services

To design a system I need to decide on where to deploy the instances (suppose that I don't really care where they are but only want to optimize costs).
The on-demand page mentions several billing items:
Data Transfer IN To Amazon EC2 From Internet
Data Transfer OUT From Amazon EC2 To Internet
Data Transfer OUT From Amazon EC2 To (a list of regions)
Data Transfer Across AZ within this Region
My questions:
About item 1 - they say this is free, is it? does it make sense that from Internet to Amazon is free while from Amazon to Amazon is not free? (I'm talking on the inbound data here, not the outbound).
In items 2-3: does "Amazon" refer to all AWS services, including another EC2 instance?
Regarding item 4: it is written "Data transferred "in" to and "out" of Amazon EC2, Amazon RDS, Amazon Redshift , Amazon DynamoDB Accelerator (DAX), and Amazon ElastiCache instances or Elastic Network Interfaces across VPC peering connections in the same AWS region is charged at $0.01/GB." Is that meaning that if I run a process between 2 EC2 instances on the same region then I pay for each GB twice? first for outbound from one instance and second for the inbound on the other instance.

The simple rules-of-thumb are:
Inbound traffic from the Internet to the AWS Cloud is free.
Outbound traffic from the AWS Cloud to the Internet is charged at the applicable rates in each region (this is the majority of the cost). This applies to anything that sends traffic out to the Internet from your AWS services.
Outbound traffic from the AWS Cloud to Amazon CloudFront has a lesser rate
Traffic within a region but between Availability Zones is 1c/GB in each direction. In fact, the wording on the EC2 Instance Pricing page now shows this.
To answer your specific questions:
Inbound is free
Outbound is for any AWS service that sends traffic to the Internet
Traffic between AZs or via VPC Peering is charged in "each direction"

Related

Is the data traffic between EC2 and Lightsail free (in EC2 billing)?

I looked at the pricing pages for both EC2 and Lightsail but could not find anything.
I am more concerned about data bills on EC2 side as EC2 data is much more expensive.
I can relocate servers to be in the same region if that helps reduce cost.
Data between Regions is definitely charged at full Data Transfer prices.
Data within the same Region but in different AZs would be charged at 1c/GB (possibly 2c/GB since it might be charged from both ends).
The lowest-cost option would be to establish VPC Peering between Lightsail and your VPC, and having the resources in the same AZ. This should (?) eliminate any Data Transfer charge.
This might be helpful: Understanding Data Transfer in AWS - The Duckbill Group

Internal communication in AWS for microservices

I have 7 Spring microservices which I would like to deploy into AWS Elastic Beanstalk. I see that I will be charged by outbound and inbound network traffic. It's not clear to me will I be charged for the internal communication between the microservices?
will I be charged for the internal communication between the microservices?
Depends. If all services are in same AZ and you use private IP addresses, they you will not be charged for traffic. From docs:
Data transferred between Amazon EC2, Amazon RDS, Amazon Redshift, Amazon ElastiCache instances, and Elastic Network Interfaces in the same Availability Zone is free.
But if you spread your services across AZs, then you will be probably paying for the traffic:
Data transferred "in" to and "out" from Amazon EC2, Amazon RDS, Amazon Redshift, Amazon DynamoDB Accelerator (DAX), and Amazon ElastiCache instances, Elastic Network Interfaces or VPC Peering connections across Availability Zones in the same AWS Region is charged at $0.01/GB in each direction.
Cross-region traffic will also have cost.

Is traffic from a VPC EC2 instance with a public IP address to an S3 bucket in the same region guaranteed to stay within Amazon's network?

This question is inspired by this tweet by someone who accidentally and unexpectedly incurred a large bill due to NAT gateway.
I'm using EC2 to process terabytes of data from an S3 bucket. The bucket and the instance are in the same region.
My goal is to minimize costs. In particular, I want to pay $0 for S3 data transfer costs. According to the S3 pricing page, this should be possible:
Transfers between S3 buckets or from Amazon S3 to any service(s) within the same AWS Region are free.
My instance is in a VPC, has a public IP address, no NAT gateway, no S3 gateway endpoint.
I observe that over months of doing this, I'm not being charged. Whereas traceroute from a server in a different region shows intermediate hops to the S3 host, the route from a server in the same region shows no intermediate hops to the S3 endpoint. Is this always guaranteed? Could Amazon's DNS resolver one day give me an IP address that requires routing over the public Internet, thus incurring thousands of dollars of fees?
This question seems a bit related, but doesn't really address the core question.
The tweet does not appear to accurately reflect the true nature of the charges they incurred.
(I'm not saying they weren't charged, I'm saying that it isn't correct to describe it as if S3 isn't free in this case, even though the tweet implies that this is the case.)
S3 traffic to/from other services within the same region isn't free with a * -- it's just free.
Transfers between S3 buckets or from Amazon S3 to any service(s) within the same AWS Region are free.
https://aws.amazon.com/s3/pricing/
That doesn't say anything about the routing of the traffic, and the routing of the traffic is not important, because -- back to the tweet -- they would not have been billed those usage charges by Amazon S3.
They would have been billed by Amazon VPC for using a NAT Gateway. What you access through a NAT Gateway isn't relevant, because the "data processing" charge always apply to traffic passing through it.
Data processing charges apply for each Gigabyte processed through the NAT gateway regardless of the traffic’s source or destination. (emphasis added)
https://aws.amazon.com/vpc/pricing/
The NAT Gateway pricing page (including old versions like this one) specifically mentions that accessing S3 through a NAT Gateway is subject to all the charges applicable to NAT Gateway.
Accessing S3 within the same region using either an EC2 instance with a public IP address or using an S3 endpoint does not incur any data transfer charges.
When you access S3 within the region, the traffic -- by the relevant definition -- doesn't leave the region, because objects stored in a given region are always located in the region.
Objects stored in a Region never leave the Region unless you explicitly transfer them to another Region.
https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html
As long as you aren't using a NAT Gateway, or doing something similarly sub-optimal, like accessing S3 by transiting an EC2 NAT Instance or forward proxy (e.g. Squid) in another region (which would result in cross-region traffic charges between your client instance and the NAT Instance or proxy billed by VPC or EC2 -- not S3) then you should not expect to pay for data transfer related to S3 within a region.

Getting AWS Data Transfer charges to regions outside my servers region

My ec2 instance is getting charged for data transfer from almost every available AWS region (Tokyo, Seoul, Singapore, Paris, London, Germany, Ireland, Ohio, Oregon, Sydney, Canada Central, Sao Paulo, Cloud Front, INCLUDING AWS GovCloud (US)). our 99.99% users are from India. As per recommendations of AWS representative have checked no other script are running on our instance and have changed rules for security group inbound rule having only SSH connection on port 22 to static IP. But still, there is data transfer of almost 600GB+. And the documentation for security group doesn't help much is there any other way to stop this data transfer?
Please note that EC2 instance runs the php code and java api tomcat7 service & RDS is on other instance.
First, your question looks like you mention data transfer to other EC2 instances in another region. Perhaps you meant traffic to internet users in other regions?
Second, according to pricing you'll be billed for Data Transfer OUT From Amazon EC2 To Internet whichever region you are and regardless whether the endpoint is in internet or AWS region. So, even if you have users in Mumbai you'll be billed for outbound traffic anyway.
Third, if you want to block transfer on country basis use CDN with proper capability, e.g. CloudFlare.
Please elaborate your question if you meant something else.

bandwith charge between ec2 and RDS

I'm using aws to run php app and it works good.
But I have a question: Does Any one knows if accessing to RDS from ec2 in the same region can trigger bandwith charge ?
Thanks.
If both the RDS and EC2 servers are in the same availability zone then there is no data transfer charge. If they are in different availability zones then there is the standard data transfer charge on the EC2 instance, but no transfer charge on the RDS instance. In addition, there is no charge for RDS data replication between availability zones.
This information used to be on this page, but now I can't find it. You can see some of this information in the RDS FAQ page. There is also a discussion thread on the official RDS forum here.