可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there a way to get AWS pricing programmatically (cost per hour of each instance type, cost per GB/month of storage on S3, and etc)?
Also, are there cost monitoring tools? For example, is there a tool that can report your EC2 instance usage on an hourly basis (versus a monthly basis, which is what Amazon does)?
Thanks in advance.
回答1:
UPDATE:
There is now AWS pricing API:
https://aws.amazon.com/blogs/aws/new-aws-price-list-api/
Orginal answer:
The price lists are available in form of JSONP files (you need to strip off function call) which are used by the AWS pricing pages. Each table (and each tab for table) has separate JSON file. It is not an API maybe, but definitely computer digestible. Here is a list that supports EC2 pricing page (as of 17 December 2014):
- On-demand Linux: http://a0.awsstatic.com/pricing/1/ec2/linux-od.min.js
- On-demand RedHat: http://a0.awsstatic.com/pricing/1/ec2/rhel-od.min.js
- On-demand SUSE: http://a0.awsstatic.com/pricing/1/ec2/sles-od.min.js
- On-demand Windows: http://a0.awsstatic.com/pricing/1/ec2/mswin-od.min.js
- On-demand SQL Standard: http://a0.awsstatic.com/pricing/1/ec2/mswinSQL-od.min.js
- On-demand SQL Web: http://a0.awsstatic.com/pricing/1/ec2/mswinSQLWeb-od.min.js
- Reserved Linux: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/linux-unix-shared.min.js
- Reserved RedHat: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/red-hat-enterprise-linux-shared.min.js
- Reserved SUSE: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/suse-linux-shared.min.js
- Reserved Windows: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/windows-shared.min.js
- Reserved SQL Standard: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/windows-with-sql-server-standard-shared.min.js
- Reserved SQL Web: http://a0.awsstatic.com/pricing/1/ec2/ri-v2/windows-with-sql-server-web-shared.min.js
- Reserved Spot instances: http://spot-price.s3.amazonaws.com/spot.js
- Data transfer: http://a0.awsstatic.com/pricing/1/ec2/pricing-data-transfer-with-regions.min.js
- EBS optimized: http://a0.awsstatic.com/pricing/1/ec2/pricing-ebs-optimized-instances.min.js
- EBS: http://a0.awsstatic.com/pricing/1/ebs/pricing-ebs.min.js
- Elastic IP: http://a0.awsstatic.com/pricing/1/ec2/pricing-elastic-ips.min.js
- CloudWatch: http://a0.awsstatic.com/pricing/1/cloudwatch/pricing-cloudwatch.min.js
- ELB: http://a0.awsstatic.com/pricing/1/ec2/pricing-elb.min.js
- EMR: https://a0.awsstatic.com/pricing/1/emr/pricing-emr.min.js
WARNING: The endpoints change from time to time and often old URL is still there with old values. It is best to check what is the current status rather than relying on links provided in this thread.
So, here is a short command to get current set or URLs from any AWS pricing page. Example based on EC2. Run it on Linux or Cygwin. Actually this command was used to create the list above.
curl http://aws.amazon.com/ec2/pricing/ 2>/dev/null | grep 'model:' | sed -e "s/.*'\(.*\)'.*/http:\\1/"
For those who don't like command line, you can also check in a web browser network console (you get there with F12), filter with JS objects:
回答2:
Just to let you know that they seem to have changed the JSON addresses. It includes the new C3 instance types
Update 01/21/2014: addresses changed again. Please note that these are JS files with a callback function that should be removed so that it becomes a parsable JSON.
Update 09/21/2014: addresses changed once again and include the new T2 instace types. To be treated as JSON files, the initial comments and the callback function should be removed and the keys should be wrapped in double quotes.
On Demand
- Linux: http://a0.awsstatic.com/pricing/1/ec2/linux-od.min.js
- Windows: http://a0.awsstatic.com/pricing/1/ec2/mswin-od.min.js
- RHEL: http://a0.awsstatic.com/pricing/1/ec2/rhel-od.min.js
- SLES: http://a0.awsstatic.com/pricing/1/ec2/sles-od.min.js
- Windows w/ SQL Std: http://a0.awsstatic.com/pricing/1/ec2/mswinSQL-od.min.js
- Windows w/ SQL Web: http://a0.awsstatic.com/pricing/1/ec2/mswinSQLWeb-od.min.js
Reserved Light
- Linux: http://a0.awsstatic.com/pricing/1/ec2/linux-ri-light.min.js
- Windows: http://a0.awsstatic.com/pricing/1/ec2/mswin-ri-light.min.js
- RHEL: http://a0.awsstatic.com/pricing/1/ec2/rhel-ri-light.min.js
- SLES: http://a0.awsstatic.com/pricing/1/ec2/sles-ri-light.min.js
- Windows w/ SQL Std: http://a0.awsstatic.com/pricing/1/ec2/mswinSQL-ri-light.min.js
- Windows w/ SQL Web: http://a0.awsstatic.com/pricing/1/ec2/mswinSQLWeb-ri-light.min.js
Reserved Medium
- Linux: http://a0.awsstatic.com/pricing/1/ec2/linux-ri-medium.min.js
- Windows: http://a0.awsstatic.com/pricing/1/ec2/mswin-ri-medium.min.js
- RHEL: http://a0.awsstatic.com/pricing/1/ec2/rhel-ri-medium.min.js
- SLES: http://a0.awsstatic.com/pricing/1/ec2/sles-ri-medium.min.js
- Windows w/ SQL Std: http://a0.awsstatic.com/pricing/1/ec2/mswinSQL-ri-medium.min.js
- Windows w/ SQL Web: http://a0.awsstatic.com/pricing/1/ec2/mswinSQLWeb-ri-medium.min.js
Reserved Heavy
- Linux: http://a0.awsstatic.com/pricing/1/ec2/linux-ri-heavy.min.js
- Windows: http://a0.awsstatic.com/pricing/1/ec2/mswin-ri-heavy.min.js
- RHEL: http://a0.awsstatic.com/pricing/1/ec2/rhel-ri-heavy.min.js
- SLES: http://a0.awsstatic.com/pricing/1/ec2/sles-ri-heavy.min.js
- Windows w/ SQL Std: http://a0.awsstatic.com/pricing/1/ec2/mswinSQL-ri-heavy.min.js
- Windows w/ SQL Web: http://a0.awsstatic.com/pricing/1/ec2/mswinSQLWeb-ri-heavy.min.js
Other
- Spot Instances: http://spot-price.s3.amazonaws.com/spot.js
- Data Transfer: http://a0.awsstatic.com/pricing/1/ec2/pricing-data-transfer-with-regions.min.js
- EBS-Optimized Instances Surcharge: http://a0.awsstatic.com/pricing/1/ec2/pricing-ebs-optimized-instances.min.js
- EBS: http://a0.awsstatic.com/pricing/1/ec2/pricing-ebs.min.js
- Elastic IP: http://a0.awsstatic.com/pricing/1/ec2/pricing-elastic-ips.min.js
- CloudWatch: http://a0.awsstatic.com/pricing/1/ec2/pricing-cloudwatch.min.js
- ELB: http://a0.awsstatic.com/pricing/1/ec2/pricing-elb.min.js
Previous endpoint: http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js
回答3:
This ruby gem wraps the JSON pricing data provided by Amazon and provides a simple interface, which takes care of mapping the region and instance type names to the ones used in the EC2 API.
https://github.com/sonian/amazon-pricing
回答4:
In addition to @arturhoo's answer which provides the EC2 spots
You can obtain the historic prices with the CLI tool
aws ec2 describe-spot-price-history \
--instance-types m1.xlarge \
--product-description "Linux/UNIX (Amazon VPC)" \
--start-time 2016-10-31T03:00:00 \
--end-time 2016-10-31T03:16:00 \
--query 'SpotPriceHistory[*].[Timestamp,SpotPrice]'
which takes the spot price between 3:00am
and 3:16am
Monday 31st October 2016 (UTC)
[
[
"2016-10-31T03:06:12.000Z",
"0.041500"
],
[
"2016-10-31T03:00:26.000Z",
"0.041600"
],
[
"2016-10-31T02:59:14.000Z",
"0.041500"
],
[
"2016-10-31T02:00:18.000Z",
"0.040600"
],
[
"2016-10-30T23:55:06.000Z",
"0.043200"
]
]
回答5:
AWS has launched the new price list API for programming integration.
URL Syntax:
https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/{offer_code}/current/index.{format}
To get list of supporting services:
https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/index.json
AWS blog Referance: https://aws.amazon.com/blogs/aws/new-aws-price-list-api/
回答6:
If you are using golang, I wrote a library that can query the data using the
"https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/{offer_code}/current/index.{format}"
format.
https://github.com/Chronojam/aws-pricing-api
import (
"github.com/chronojam/aws-pricing-api/types/schema"
)
func main() {
ec2 := &schema.AmazonEC2{}
// Populate this object with new pricing data
err := ec2.Refresh()
if err != nil {
panic(err)
}
// Get the price of all c4.Large instances,
// running linux, on shared tenancy
c4Large := []*schema.AmazonEC2_Product{}
for _, p := range ec2.Products {
if p.Attributes.InstanceType == "c4.large" &&
p.Attributes.OperatingSystem == "Linux" &&
p.Attributes.Tenancy == "Shared" {
c4Large = append(c4Large, p)
}
}
}
回答7:
I am the author of an open-source tool called ec2-cost-calculate that will "report your EC2 instance usage on an hourly basis" - the tool is available at awsmissingtools.com. Output can be hourly, daily, monthly. Two versions of the tool exist, one written in Ruby and another written in bash.
回答8:
As Amazon has recently changed the pricing scheme for EC2 instances (no more Medium or Light, only Heavy which has multiple payment options - allUpfront, partialUpfront, noUpfront) and also some time ago separated the old generation instances from the current ones, the list of undocumented pricing API links has changed as well the structure of JSON provisioned by these links.
The full list if links of EC2 pricing undocumented API with descriptions, as well as the Python module for convenient access and structured output of pricing in JSON, CSV or Table formats can be found in the following repository:
https://github.com/ilia-semenov/awspricingfull
回答9:
If you're using Go, I wrote a package to decode the data into a struct, based on the files linked to in @okrasz's answer
https://github.com/recursionpharma/ec2prices
Feel free to contribute with more pricing data.