diff --git a/extension/sigv4authextension/signingroundtripper.go b/extension/sigv4authextension/signingroundtripper.go index 564a6a6b96164..c155284446f4f 100644 --- a/extension/sigv4authextension/signingroundtripper.go +++ b/extension/sigv4authextension/signingroundtripper.go @@ -114,28 +114,33 @@ func (si *signingRoundTripper) inferServiceAndRegion(r *http.Request) (service s service = si.service region = si.region - h := r.Host - if strings.HasPrefix(h, "aps-workspaces") { - if service == "" { - service = "aps" - } - rest := h[strings.Index(h, ".")+1:] - if region == "" { - region = rest[0:strings.Index(rest, ".")] - } - } else if strings.HasPrefix(h, "search-") { - if service == "" { - service = "es" - } - rest := h[strings.Index(h, ".")+1:] - if region == "" { - region = rest[0:strings.Index(rest, ".")] - } + host := r.Host + switch { + case strings.HasPrefix(host, "aps-workspaces"): + service, region = extractServiceAndRegion(service, region, host, "aps") + case strings.HasPrefix(host, "search-"): + service, region = extractServiceAndRegion(service, region, host, "es") + case strings.HasPrefix(host, "logs"): + service, region = extractServiceAndRegion(service, region, host, "logs") + case strings.HasPrefix(host, "xray"): + service, region = extractServiceAndRegion(service, region, host, "xray") } if service == "" || region == "" { si.logger.Warn("Unable to infer region and/or service from the URL. Please provide values for region and/or service in the collector configuration.") } + + return service, region +} + +func extractServiceAndRegion(service, region, host, defaultService string) (string, string) { + if service == "" { + service = defaultService + } + rest := host[strings.Index(host, ".")+1:] + if region == "" { + region = rest[0:strings.Index(rest, ".")] + } return service, region }