Golang中的AWS价目表API

bkhjykvo  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(82)

我尝试使用aws price list API通过getProducts获取特定示例的价格,但即使从getProductsOutput给出的“响应”中获取价格也非常令人沮丧。一切都是awsJSONValue,当我试图索引到awsJSONValue时,我得到了一堆“map[] interface {}”问题,我必须不断地转换,它最终看起来非常长和丑陋(命令),而且绝对不可复制。在网上,由于AWS JsonValue中返回的“map[] interface{}”问题,似乎没有办法从这个输出中获取价格,我甚至无法索引到特定的值。
有没有人成功地使用Golang从AWS价格列表中的getProducts API调用中获取“价格”?如果是的话,有没有人可以告诉我,因为我一直在玩,我觉得它不应该这么复杂。有没有什么方法可以解析aws.JSONValue,通过一个编组函数或某种方式?简单地说,我想要这样的东西(但在Golang中,而不是Python中):Use boto3 to get current price for given EC2 instance type
谢谢你,谢谢

dnph8jn4

dnph8jn41#

我能够通过创建具有我感兴趣的字段的模型来实现它

func CollectInstanceCost(region string, instanceType string) {
    var pricingData aws_model.PricingDataInstance
    sess, err := awsutil.GetAwsSession()
    pricingClient := pricing.New(sess)
    // Retrieve the pricing information for the specified instance type
    pricingInput := &pricing.GetProductsInput{
        ServiceCode: aws.String("AmazonEC2"),
        Filters: []*pricing.Filter{
            {
                Field: aws.String("instanceType"),
                Type:  aws.String("TERM_MATCH"),
                Value: aws.String(instanceType),
            },
            {
                Field: aws.String("operatingSystem"),
                Type:  aws.String("TERM_MATCH"),
                Value: aws.String("Linux"),
            },
            {
                Field: aws.String("regionCode"),
                Type:  aws.String("TERM_MATCH"),
                Value: aws.String(region),
            },
        },
    }

    pricingResult, err := pricingClient.GetProducts(pricingInput)
    if err != nil {
        panic(err)
    }

    pricingJSON, err := json.Marshal(pricingResult)
    if err != nil {
        panic(err)
    }

    err = json.Unmarshal(pricingJSON, &pricingData)
    if err != nil {
        panic(err)
    }

现在您可以使用pricingData访问属性/值。

type PricingDataInstance struct {
    FormatVersion string              `json:"FormatVersion"`
    NextToken     string              `json:"NextToken"`
    PriceList     []PriceItemInstance `json:"PriceList"`
}

type PriceItemInstance struct {
    Product         ProductInfoInstance `json:"product"`
    PublicationDate string              `json:"publicationDate"`
    ServiceCode     string              `json:"serviceCode"`
    Terms           TermsInstance       `json:"terms"`
}

type ProductInfoInstance struct {
    Attributes    ProductAttributesInstance `json:"attributes"`
    ProductFamily string                    `json:"productFamily"`
}

type ProductAttributesInstance struct {
    InstanceFamily  string `json:"instanceFamily"`
    InstanceType    string `json:"instanceType"`
    Memory          string `json:"memory"`
    RegionCode      string `json:"regionCode"`
    ServiceCode     string `json:"servicecode"`
    ServiceName     string `json:"servicename"`
    Tenancy         string `json:"tenancy"`
    UsageType       string `json:"usagetype"`
    VCPU            string `json:"vcpu"`
    OperatingSystem string `json:"operatingSystem"`
    ClockSpeed      string `json:"clockSpeed"`
}

type TermsInstance struct {
    OnDemand map[string]OnDemandTermInstance `json:"OnDemand"`
}

type OnDemandTermInstance struct {
    EffectiveDate   string                            `json:"effectiveDate"`
    PriceDimensions map[string]PriceDimensionInstance `json:"priceDimensions"`
}

type PriceDimensionInstance struct {
    PricePerUnit PricePerUnitInstance `json:"pricePerUnit"`
    Unit         string               `json:"unit"`
    Description  string               `json:"description"`
}

type PricePerUnitInstance struct {
    USD string `json:"USD"`
}

相关问题