github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/bucket/s3/bucket_client.go (about) 1 package s3 2 3 import ( 4 "github.com/go-kit/log" 5 "github.com/prometheus/common/model" 6 "github.com/thanos-io/thanos/pkg/objstore" 7 "github.com/thanos-io/thanos/pkg/objstore/s3" 8 ) 9 10 // NewBucketClient creates a new S3 bucket client 11 func NewBucketClient(cfg Config, name string, logger log.Logger) (objstore.Bucket, error) { 12 s3Cfg, err := newS3Config(cfg) 13 if err != nil { 14 return nil, err 15 } 16 17 return s3.NewBucketWithConfig(logger, s3Cfg, name) 18 } 19 20 // NewBucketReaderClient creates a new S3 bucket client 21 func NewBucketReaderClient(cfg Config, name string, logger log.Logger) (objstore.BucketReader, error) { 22 s3Cfg, err := newS3Config(cfg) 23 if err != nil { 24 return nil, err 25 } 26 27 return s3.NewBucketWithConfig(logger, s3Cfg, name) 28 } 29 30 func newS3Config(cfg Config) (s3.Config, error) { 31 sseCfg, err := cfg.SSE.BuildThanosConfig() 32 if err != nil { 33 return s3.Config{}, err 34 } 35 36 return s3.Config{ 37 Bucket: cfg.BucketName, 38 Endpoint: cfg.Endpoint, 39 Region: cfg.Region, 40 AccessKey: cfg.AccessKeyID, 41 SecretKey: cfg.SecretAccessKey.String(), 42 Insecure: cfg.Insecure, 43 SSEConfig: sseCfg, 44 HTTPConfig: s3.HTTPConfig{ 45 IdleConnTimeout: model.Duration(cfg.HTTP.IdleConnTimeout), 46 ResponseHeaderTimeout: model.Duration(cfg.HTTP.ResponseHeaderTimeout), 47 InsecureSkipVerify: cfg.HTTP.InsecureSkipVerify, 48 TLSHandshakeTimeout: model.Duration(cfg.HTTP.TLSHandshakeTimeout), 49 ExpectContinueTimeout: model.Duration(cfg.HTTP.ExpectContinueTimeout), 50 MaxIdleConns: cfg.HTTP.MaxIdleConns, 51 MaxIdleConnsPerHost: cfg.HTTP.MaxIdleConnsPerHost, 52 MaxConnsPerHost: cfg.HTTP.MaxConnsPerHost, 53 Transport: cfg.HTTP.Transport, 54 }, 55 // Enforce signature version 2 if CLI flag is set 56 SignatureV2: cfg.SignatureVersion == SignatureVersionV2, 57 }, nil 58 }