github.com/grafana/pyroscope@v1.18.0/pkg/objstore/providers/s3/bucket_client.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 // Provenance-includes-location: https://github.com/cortexproject/cortex/blob/master/pkg/storage/bucket/s3/bucket_client.go 3 // Provenance-includes-license: Apache-2.0 4 // Provenance-includes-copyright: The Cortex Authors. 5 6 package s3 7 8 import ( 9 "github.com/go-kit/log" 10 "github.com/go-kit/log/level" 11 "github.com/prometheus/common/model" 12 "github.com/thanos-io/objstore" 13 "github.com/thanos-io/objstore/providers/s3" 14 ) 15 16 // NewBucketClient creates a new S3 bucket client 17 func NewBucketClient(cfg Config, name string, logger log.Logger) (objstore.Bucket, error) { 18 s3Cfg, err := newS3Config(cfg) 19 if err != nil { 20 return nil, err 21 } 22 23 warnForDeprecatedConfigFields(cfg, logger) 24 25 return s3.NewBucketWithConfig(logger, s3Cfg, name, nil) 26 } 27 28 // NewBucketReaderClient creates a new S3 bucket client 29 func NewBucketReaderClient(cfg Config, name string, logger log.Logger) (objstore.BucketReader, error) { 30 s3Cfg, err := newS3Config(cfg) 31 if err != nil { 32 return nil, err 33 } 34 35 warnForDeprecatedConfigFields(cfg, logger) 36 37 return s3.NewBucketWithConfig(logger, s3Cfg, name, nil) 38 } 39 40 func newS3Config(cfg Config) (s3.Config, error) { 41 sseCfg, err := cfg.SSE.BuildThanosConfig() 42 if err != nil { 43 return s3.Config{}, err 44 } 45 46 bucketLookupType := s3.AutoLookup 47 if cfg.ForcePathStyle || cfg.BucketLookupType == PathStyleLookup { 48 bucketLookupType = s3.PathLookup 49 } else if cfg.BucketLookupType == VirtualHostedStyleLookup { 50 bucketLookupType = s3.VirtualHostLookup 51 } 52 53 return s3.Config{ 54 Bucket: cfg.BucketName, 55 Endpoint: cfg.Endpoint, 56 Region: cfg.Region, 57 AccessKey: cfg.AccessKeyID, 58 SecretKey: cfg.SecretAccessKey.String(), 59 Insecure: cfg.Insecure, 60 SSEConfig: sseCfg, 61 BucketLookupType: bucketLookupType, 62 HTTPConfig: s3.HTTPConfig{ 63 IdleConnTimeout: model.Duration(cfg.HTTP.IdleConnTimeout), 64 ResponseHeaderTimeout: model.Duration(cfg.HTTP.ResponseHeaderTimeout), 65 InsecureSkipVerify: cfg.HTTP.InsecureSkipVerify, 66 TLSHandshakeTimeout: model.Duration(cfg.HTTP.TLSHandshakeTimeout), 67 ExpectContinueTimeout: model.Duration(cfg.HTTP.ExpectContinueTimeout), 68 MaxIdleConns: cfg.HTTP.MaxIdleConns, 69 MaxIdleConnsPerHost: cfg.HTTP.MaxIdleConnsPerHost, 70 MaxConnsPerHost: cfg.HTTP.MaxConnsPerHost, 71 Transport: cfg.HTTP.Transport, 72 }, 73 // Enforce signature version 2 if CLI flag is set 74 SignatureV2: cfg.SignatureVersion == SignatureVersionV2, 75 }, nil 76 } 77 78 func warnForDeprecatedConfigFields(cfg Config, logger log.Logger) { 79 if cfg.ForcePathStyle { 80 level.Warn(logger).Log("msg", "S3 bucket client config has a deprecated s3.force-path-style flag set. Please, use s3.bucket-lookup-type instead.") 81 } 82 }