As you have seen, there are many different cost structures associated with S3.
One way you can look at it, is that AWS breaks out the cost structures into various categories, such as:
- Storage pricing
- Request pricing
- S3 Storage Management pricing
- Data transfer pricing
- S3 transfer acceleration pricing
- Cross-region replication pricing
- AWS Gov Cloud Region
To determine your costs when using S3, you will need to look at how you are using S3 and which categories may be applicable.
For the S3 put Object request action, you will need to look at both the Request pricing and the Data transfer in pricing (both apply to the same action, and they could have made you pay extra money based on the size of the object that needs to be transferred in over the network - for example, the could have charged an additional $0.002 per GB during the upload (object put) process. But instead, the actual data in transfer in is free. ). Let me know if that helps.
Note: The definitions of each of the categories along with their costs can be found in the following document
So , PUT is a part of s3 hidden server request through API/SDK calls.
Where , Data transfer in , is more of AWS network utilization related.
When I pay for a virtual storage space like "DropBox", I usually think of monthly/yearly payment to the storage space , but not in terms of number of requests I made to the dropbox server.
Now I realized in AWS architechture, I pay for AWSInternalNetworkUsage_storageManagement_APIrequests , but since data transfer in(AWSInternalNetworkUsage when I do the upload) is not charged, I only pay storageManagement+APIrequests.
I hope I understood it correctly now.
I have a follow up question:
Why does AWS charge for API requests? Does it use AWSInternalNetwork such as DirectConnect or some other mechanism to process the PUT or any other API request?
Yep, sounds like you've got it :-)
As for your follow up question - Why does AWS charge for "requests"?
If no one is making a request to data, the network, CPU, and storage devices are basically sitting there doing nothing.. just taking up storage space. However, once a request is made to storage, disk IOPS, network, and CPU processing is occurring to process that data. These resources, although plentiful in the AWS ecosystem, are "shared" hardware resources. Let's say 2 different customers are storing 1 TB of data. Customer "A" that makes 200,000 data requests over a months time, and customer "B" makes 500 data requests over a months time. Customer "A" is using up way more resources than customer "B". Another analogy is renting a car for 1 day. Standard daily rental is $19.95 per day. However, if you drive more than 20 miles the rental company will add an additional $0.20 per mile to the daily rental price.
Cloudfront PUT request pricingAccepted Answerasked 4 months ago
Kinesis data stream - data transfer charges for on-premises consumer/producerAccepted Answerasked 4 years ago
Clarifying MSK data transfer pricing within region or AZAccepted Answerasked 3 years ago
EFS data transferAccepted Answerasked 4 months ago
Confused between put request pricing and data transfer in pricingasked 3 years ago
S3 Multipart upload request chargesasked 6 months ago
Are we billed a put-request for each part with s3 multipart upload or only once for the final merged file?Accepted Answerasked 3 months ago
How can i upload 50 MB file to s3 from edge device in multiple of 1 MB chunked size?asked 6 months ago
How does data transfer pricing work between lambda function urls and cloudfront?asked 5 months ago
data transfer cost between two AZs in the same VPC same accountAccepted Answerasked 2 years ago