Skip to content

Commit b7400fd

Browse files
committed
load s3 config from env if not specified
1 parent 3eb65e5 commit b7400fd

File tree

4 files changed

+67
-31
lines changed

4 files changed

+67
-31
lines changed

cmd/s3-uploader/main.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,18 @@ func main() {
4040
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: args.LogLevel}))
4141
slog.SetDefault(logger)
4242

43-
u := uploader.NewS3Uploader(args.S3Region, args.S3Bucket, uploader.S3Options{
43+
u, err := uploader.NewS3Uploader(args.S3Region, args.S3Bucket, uploader.S3Options{
4444
BaseEndpoint: args.S3Endpoint,
4545
AccessKeyID: args.S3AccessKeyId,
4646
SecretAccessKey: args.S3SecretAccessKey,
4747
SessionToken: args.S3SessionToken,
4848
})
4949

50+
if err != nil {
51+
slog.Error("failed to create S3 uploader", "err", err)
52+
os.Exit(1)
53+
}
54+
5055
w := watcher.NewPollingWatcher(os.DirFS(args.Directory), time.Duration(args.IntervalSeconds)*time.Second, args.UploadQueueSize)
5156

5257
slog.Info("start watching ...", "path", args.Directory, "interval-seconds", args.IntervalSeconds)

go.mod

+11-5
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@ go 1.24.0
44

55
require (
66
github.com/alexflint/go-arg v1.5.1
7+
github.com/aws/aws-sdk-go-v2/config v1.29.9
78
github.com/aws/aws-sdk-go-v2/service/s3 v1.77.1
89
github.com/gammazero/workerpool v1.1.3
910
github.com/stretchr/testify v1.7.0
1011
)
1112

1213
require (
14+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
15+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
16+
github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 // indirect
17+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 // indirect
18+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect
1319
github.com/davecgh/go-spew v1.1.1 // indirect
1420
github.com/gammazero/deque v0.2.0 // indirect
1521
github.com/pmezard/go-difflib v1.0.0 // indirect
@@ -22,15 +28,15 @@ require (
2228
)
2329

2430
require (
25-
github.com/aws/aws-sdk-go-v2 v1.36.2
31+
github.com/aws/aws-sdk-go-v2 v1.36.3
2632
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect
27-
github.com/aws/aws-sdk-go-v2/credentials v1.17.60
28-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.33 // indirect
29-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.33 // indirect
33+
github.com/aws/aws-sdk-go-v2/credentials v1.17.62
34+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
35+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
3036
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33 // indirect
3137
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
3238
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.1 // indirect
33-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.14 // indirect
39+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
3440
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.14 // indirect
3541
github.com/aws/smithy-go v1.22.2 // indirect
3642
)

go.sum

+22-10
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,40 @@ github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8
22
github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8=
33
github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw=
44
github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
5-
github.com/aws/aws-sdk-go-v2 v1.36.2 h1:Ub6I4lq/71+tPb/atswvToaLGVMxKZvjYDVOWEExOcU=
6-
github.com/aws/aws-sdk-go-v2 v1.36.2/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
5+
github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
6+
github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
77
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs=
88
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14=
9-
github.com/aws/aws-sdk-go-v2/credentials v1.17.60 h1:1dq+ELaT5ogfmqtV1eocq8SpOK1NRsuUfmhQtD/XAh4=
10-
github.com/aws/aws-sdk-go-v2/credentials v1.17.60/go.mod h1:HDes+fn/xo9VeszXqjBVkxOo/aUy8Mc6QqKvZk32GlE=
11-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.33 h1:knLyPMw3r3JsU8MFHWctE4/e2qWbPaxDYLlohPvnY8c=
12-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.33/go.mod h1:EBp2HQ3f+XCB+5J+IoEbGhoV7CpJbnrsd4asNXmTL0A=
13-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.33 h1:K0+Ne08zqti8J9jwENxZ5NoUyBnaFDTu3apwQJWrwwA=
14-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.33/go.mod h1:K97stwwzaWzmqxO8yLGHhClbVW1tC6VT1pDLk1pGrq4=
9+
github.com/aws/aws-sdk-go-v2/config v1.29.9 h1:Kg+fAYNaJeGXp1vmjtidss8O2uXIsXwaRqsQJKXVr+0=
10+
github.com/aws/aws-sdk-go-v2/config v1.29.9/go.mod h1:oU3jj2O53kgOU4TXq/yipt6ryiooYjlkqqVaZk7gY/U=
11+
github.com/aws/aws-sdk-go-v2/credentials v1.17.62 h1:fvtQY3zFzYJ9CfixuAQ96IxDrBajbBWGqjNTCa79ocU=
12+
github.com/aws/aws-sdk-go-v2/credentials v1.17.62/go.mod h1:ElETBxIQqcxej++Cs8GyPBbgMys5DgQPTwo7cUPDKt8=
13+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
14+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M=
15+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
16+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY=
17+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0=
18+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q=
19+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
20+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
1521
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33 h1:/frG8aV09yhCVSOEC2pzktflJJO48NwY3xntHBwxHiA=
1622
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33/go.mod h1:8vwASlAcV366M+qxZnjNzCjeastk1Rt1bpSRaGZanGU=
1723
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
1824
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
1925
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.1 h1:7SuukGpyIgF5EiAbf1dZRxP+xSnY1WjiHBjL08fjJeE=
2026
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.1/go.mod h1:k+Vce/8R28tSozjdWphkrNhK8zLmdS9RgiDNZl6p8Rw=
21-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.14 h1:2scbY6//jy/s8+5vGrk7l1+UtHl0h9A4MjOO2k/TM2E=
22-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.14/go.mod h1:bRpZPHZpSe5YRHmPfK3h1M7UBFCn2szHzyx0rw04zro=
27+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
28+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
2329
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.14 h1:fgdkfsxTehqPcIQa24G/Omwv9RocTq2UcONNX/OnrZI=
2430
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.14/go.mod h1:wMxQ3OE8fiM8z2YRAeb2J8DLTTWMvRyYYuQOs26AbTQ=
2531
github.com/aws/aws-sdk-go-v2/service/s3 v1.77.1 h1:5bI9tJL2Z0FGFtp/LPDv0eyliFBHCn7LAhqpQuL+7kk=
2632
github.com/aws/aws-sdk-go-v2/service/s3 v1.77.1/go.mod h1:njj3tSJONkfdLt4y6X8pyqeM6sJLNZxmzctKKV+n1GM=
33+
github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 h1:8JdC7Gr9NROg1Rusk25IcZeTO59zLxsKgE0gkh5O6h0=
34+
github.com/aws/aws-sdk-go-v2/service/sso v1.25.1/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
35+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 h1:KwuLovgQPcdjNMfFt9OhUd9a2OwcOKhxfvF4glTzLuA=
36+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
37+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc=
38+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
2739
github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ=
2840
github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
2941
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

pkg/uploader/s3.go

+28-15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"sync"
88

99
"github.com/aws/aws-sdk-go-v2/aws"
10+
awsconfig "github.com/aws/aws-sdk-go-v2/config"
1011
"github.com/aws/aws-sdk-go-v2/credentials"
1112
"github.com/aws/aws-sdk-go-v2/service/s3"
1213
)
@@ -24,28 +25,40 @@ type S3Options struct {
2425
SessionToken string
2526
}
2627

27-
func NewS3Uploader(region string, bucket string, options S3Options) *S3Uploader {
28-
opts := s3.Options{
29-
AppID: "s3-uploader/0.1.0",
30-
Region: region,
31-
BaseEndpoint: options.BaseEndpoint,
32-
}
28+
func NewS3Uploader(region string, bucket string, options S3Options) (*S3Uploader, error) {
29+
var client *s3.Client
3330

34-
if options.AccessKeyID != nil && options.SecretAccessKey != nil {
35-
opts.Credentials = credentials.StaticCredentialsProvider{Value: aws.Credentials{
36-
AccessKeyID: *options.AccessKeyID,
37-
SecretAccessKey: *options.SecretAccessKey,
38-
SessionToken: options.SessionToken,
39-
}}
40-
}
31+
if options.BaseEndpoint != nil || options.AccessKeyID != nil || options.SecretAccessKey != nil {
32+
opts := s3.Options{
33+
AppID: "s3-uploader/0.1.0",
34+
Region: region,
35+
BaseEndpoint: options.BaseEndpoint,
36+
}
37+
38+
if options.AccessKeyID != nil && options.SecretAccessKey != nil {
39+
opts.Credentials = credentials.StaticCredentialsProvider{Value: aws.Credentials{
40+
AccessKeyID: *options.AccessKeyID,
41+
SecretAccessKey: *options.SecretAccessKey,
42+
SessionToken: options.SessionToken,
43+
}}
44+
}
4145

42-
client := s3.New(opts)
46+
client = s3.New(opts)
47+
} else {
48+
cfg, err := awsconfig.LoadDefaultConfig(context.TODO(), awsconfig.WithRegion(region))
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
client = s3.NewFromConfig(cfg)
54+
}
4355

44-
return &S3Uploader{
56+
t := &S3Uploader{
4557
client: client,
4658
bucket: bucket,
4759
runningUploads: &sync.Map{},
4860
}
61+
return t, nil
4962
}
5063

5164
func (t *S3Uploader) UploadFile(filePath string, key string) error {

0 commit comments

Comments
 (0)