阅读689 返回首页    go 阿里云 go 技术社区[云栖]


使用 AWS 的 GO SDK 获取区域与终端节点信息

解析终端节点

设置 SDK 的默认配置时, SDK 会自动地使用 endpoints.DefaultResolver 函数。你也可以自己调用包中的EndpointFor 方法来解析终端节点。


  1. // 解析在us-west-2区域的S3服务的终端节点
  2. resolver := endpoints.DefaultResolver()
  3. endpoint, err := resolver.EndpointFor(endpoints.S3ServiceID, endpoints.UsWest2RegionID)
  4. if err != nil {
  5. fmt.Println("failed to resolve endpoint", err)
  6. return
  7. }
  8. fmt.Println("Resolved URL:", endpoint.URL)

如果你需要自定义终端节点的解析逻辑,你可以实现 endpoints.Resolver 接口,并传值给aws.Config.EndpointResolver。当你打算编写自定义的终端节点逻辑,让 SDK 可以用来解析服务的终端节点时候,这个功能就会很有用。

以下示例,创建了一个配置好的 Session,然后 Amazon S3 服务的客户端就可以使用这个自定义的终端节点。


  1. s3CustResolverFn := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
  2. if service == "s3" {
  3. return endpoints.ResolvedEndpoint{
  4. URL: "s3.custom.endpoint.com",
  5. SigningRegion: "custom-signing-region",
  6. }, nil
  7. }
  8. return defaultResolver.EndpointFor(service, region, optFns...)
  9. }
  10. sess := session.Must(session.NewSessionWithOptions(session.Options{
  11. Config: aws.Config{
  12. Region: aws.String("us-west-2"),
  13. EndpointResolver: endpoints.ResolverFunc(s3CustResolverFn),
  14. },
  15. }))

分区

endpoints.DefaultResolver 函数的返回值可以被 endpoints.EnumPartitions接口使用。这样就可以获取 SDK 使用的分区片段,也可以列出每个分区的分区信息。


  1. // 迭代所有分区表打印每个分区的ID
  2. resolver := endpoints.DefaultResolver()
  3. partitions := resolver.(endpoints.EnumPartitions).Partitions()
  4. for _, p := range partitions {
  5. fmt.Println("Partition:", p.ID())
  6. }

除了分区表之外,endpoints 包也提供了每个分区组的 getter 函数。这些工具函数可以方便列出指定分区,而不用执行默认解析器列出所有的分区。


  1. partition := endpoints.AwsPartition()
  2. region := partition.Regions()[endpoints.UsWest2RegionID]
  3. fmt.Println("Services in region:", region.ID())
  4. for id, _ := range region.Services() {
  5. fmt.Println(id)
  6. }

当你获取区域和服务值后,可以调用 ResolveEndpoint。这样解析端点时,就可以提供分区的过滤视图。

原文发布时间为:2017-04-15

本文来自云栖社区合作伙伴“Linux中国”

最后更新:2017-05-22 14:34:05

  上一篇:go  冶铁技术与古巴比伦的灭亡:科技进展可能对人类文明产生多大影响
  下一篇:go  Java Date Time 教程-java.util.Date