閱讀689 返回首頁    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