如何在 Go SDK V2 中以编程方式获取 AWS 区域列表

gyr*_*yre 5 amazon-web-services aws-sdk aws-sdk-go

AWS从Go SDK V2endpoints中删除了软件包。有没有办法使用 Go SDK V2 获取 AWS 区域列表?

在 V1 中你可以这样写:

    import "github.com/aws/aws-sdk-go/aws/endpoints"
    ...
    ...
    
        partitions := endpoints.DefaultPartitions()
        for _, p := range partitions {
            for region := range p.Regions() {
                validRegions[region] = struct{}{}
            }
        }
    
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不再可能了。我确实注意到一个自动生成的json似乎包含所有分区,但是我似乎无法弄清楚如何获取代码中的可用区域列表。

Go SDK V2 有办法做到这一点吗?

小智 0

一种选择是获取您提到的 JSON,例如:

// endpoints holds the aws generated endpoints.json
type endpoints struct {
    Partitions []Partition `json:"partitions"`
}

type Partition struct {
    PartitionName string                 `json:"partitionName"`
    Regions       map[string]interface{} `json:"regions"`
    Services      map[string]Service     `json:"services"`
}

type Service struct {
    Endpoints map[string]interface{} `json:"endpoints"`
}

func main() {

    fmt.Println("Generating AWS regions")

    resp, err := http.Get("https://raw.githubusercontent.com/aws/aws-sdk-go-v2/master/codegen/smithy-aws-go-codegen/src/main/resources/software/amazon/smithy/aws/go/codegen/endpoints.json")
    if err != nil {
        fmt.Fprintln(os.Stderr, err.Error())
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Fprintln(os.Stderr, err.Error())
    }

    e := endpoints{}
    err = json.Unmarshal(body, &e)
    if err != nil {
        fmt.Fprintln(os.Stderr, err.Error())
    }

    // do something with e
}
Run Code Online (Sandbox Code Playgroud)