Go以AWS提供的SDK aws-sdk-go-v2
來取得AWS服務的產品價格資訊。
事前要求
參考「AWS 建立IAM管理使用者及credentials」設定供應用程式存取AWS需要的credentials。
參考「Golang 取得AWS Pricing ServiceCode」取得要查詢產品的服務代碼(ServiceCode)。
取得產品資訊
呼叫pricing.Client.GetProducts
傳入參數pricing.GetProductsInput
取得服務的產品列表。
在pricing.GetProductsInput
參數欄位,
ServiceCode
- 輸入查詢產品的服務代碼。例如EC2的服務代碼為AmazonEC2
MaxResults
- 最大輸出結果筆數。Filters
- 輸入types.Filter
陣列,用來篩選符合條件的結果。Field
為要篩選的欄位名稱;Value
為刪選欄位的值。例如範例只篩選輸出結果中欄位sku
值為7UV2VKCDN6WVVP54
的結果。
main.go
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/pricing"
"github.com/aws/aws-sdk-go-v2/service/pricing/types"
)
func main() {
ctx := context.TODO()
client := NewPricingClient(ctx)
serviceCode := "AmazonEC2"
out, err := client.GetProducts(ctx, &pricing.GetProductsInput{
ServiceCode: &serviceCode,
MaxResults: aws.Int32(2),
Filters: []types.Filter{
{
Field: aws.String("sku"),
Type: "TERM_MATCH",
Value: aws.String("7UV2VKCDN6WVVP54"),
},
},
})
if err != nil {
panic(err)
}
for _, price := range out.PriceList {
fmt.Println(price)
}
}
func NewPricingClient(ctx context.Context) *pricing.Client {
cfg, err := config.LoadDefaultConfig(
ctx,
config.WithRegion("ap-south-1"),
)
if err != nil {
panic(err)
}
return pricing.NewFromConfig(cfg) // Create an Pricing service client
}
測試
執行Go應用程式輸出以下結果,為JSON字串表示的產品資訊(因為使用欄位sku
篩選,所以只會有一筆)。
{"product":{"productFamily":"Compute Instance","attributes":{"enhancedNetworkingSupported":"No","intelTurboAvailable":"Yes","memory":"0.5 GiB","vcpu":"1","classicnetworkingsupport":"false","capacitystatus":"AllocatedCapacityReservation","locationType":"AWS Region","storage":"EBS only","instanceFamily":"General purpose","operatingSystem":"Linux","intelAvx2Available":"No","regionCode":"ap-northeast-1","physicalProcessor":"Intel Xeon Family","clockSpeed":"Up to 3.3 GHz","ecu":"Variable","networkPerformance":"Low","servicename":"Amazon Elastic Compute Cloud","instancesku":"F7XCNBBYFKX42QF3","gpuMemory":"NA","vpcnetworkingsupport":"true","instanceType":"t2.nano","tenancy":"Shared","usagetype":"APN1-Reservation:t2.nano","normalizationSizeFactor":"0.25","intelAvxAvailable":"Yes","processorFeatures":"Intel AVX; Intel Turbo","servicecode":"AmazonEC2","licenseModel":"No License required","currentGeneration":"Yes","preInstalledSw":"NA","location":"Asia Pacific (Tokyo)","processorArchitecture":"32-bit or 64-bit","marketoption":"OnDemand","operation":"RunInstances","availabilityzone":"NA"},"sku":"7UV2VKCDN6WVVP54"},"serviceCode":"AmazonEC2","terms":{"OnDemand":{"7UV2VKCDN6WVVP54.JRTCKXETXF":{"priceDimensions":{"7UV2VKCDN6WVVP54.JRTCKXETXF.6YS6EN2CT7":{"unit":"Hrs","endRange":"Inf","description":"$0.00 per Reservation Linux t2.nano Instance Hour","appliesTo":[],"rateCode":"7UV2VKCDN6WVVP54.JRTCKXETXF.6YS6EN2CT7","beginRange":"0","pricePerUnit":{"USD":"0.0000000000"}}},"sku":"7UV2VKCDN6WVVP54","effectiveDate":"2023-08-01T00:00:00Z","offerTermCode":"JRTCKXETXF","termAttributes":{}}}},"version":"20230901144327","publicationDate":"2023-09-01T14:43:27Z"}
將輸出的JSON排版如下:
{
"product": {
"productFamily": "Compute Instance",
"attributes": {
"enhancedNetworkingSupported": "No",
"intelTurboAvailable": "Yes",
"memory": "0.5 GiB",
"vcpu": "1",
"classicnetworkingsupport": "false",
"capacitystatus": "AllocatedCapacityReservation",
"locationType": "AWS Region",
"storage": "EBS only",
"instanceFamily": "General purpose",
"operatingSystem": "Linux",
"intelAvx2Available": "No",
"regionCode": "ap-northeast-1",
"physicalProcessor": "Intel Xeon Family",
"clockSpeed": "Up to 3.3 GHz",
"ecu": "Variable",
"networkPerformance": "Low",
"servicename": "Amazon Elastic Compute Cloud",
"instancesku": "F7XCNBBYFKX42QF3",
"gpuMemory": "NA",
"vpcnetworkingsupport": "true",
"instanceType": "t2.nano",
"tenancy": "Shared",
"usagetype": "APN1-Reservation:t2.nano",
"normalizationSizeFactor": "0.25",
"intelAvxAvailable": "Yes",
"processorFeatures": "Intel AVX; Intel Turbo",
"servicecode": "AmazonEC2",
"licenseModel": "No License required",
"currentGeneration": "Yes",
"preInstalledSw": "NA",
"location": "Asia Pacific (Tokyo)",
"processorArchitecture": "32-bit or 64-bit",
"marketoption": "OnDemand",
"operation": "RunInstances",
"availabilityzone": "NA"
},
"sku": "7UV2VKCDN6WVVP54"
},
"serviceCode": "AmazonEC2",
"terms": {
"OnDemand": {
"7UV2VKCDN6WVVP54.JRTCKXETXF": {
"priceDimensions": {
"7UV2VKCDN6WVVP54.JRTCKXETXF.6YS6EN2CT7": {
"unit": "Hrs",
"endRange": "Inf",
"description": "$0.00 per Reservation Linux t2.nano Instance Hour",
"appliesTo": [],
"rateCode": "7UV2VKCDN6WVVP54.JRTCKXETXF.6YS6EN2CT7",
"beginRange": "0",
"pricePerUnit": {
"USD": "0.0000000000"
}
}
},
"sku": "7UV2VKCDN6WVVP54",
"effectiveDate": "2023-08-01T00:00:00Z",
"offerTermCode": "JRTCKXETXF",
"termAttributes": {}
}
}
},
"version": "20230901144327",
"publicationDate": "2023-09-01T14:43:27Z"
}
沒有留言:
張貼留言