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  }