chrislu
2 years ago
3 changed files with 129 additions and 3 deletions
-
12go.mod
-
6go.sum
-
114test/s3/s3client/s3client.go
@ -0,0 +1,114 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"context" |
|||
"github.com/aws/aws-sdk-go-v2/aws" |
|||
"github.com/aws/aws-sdk-go-v2/aws/retry" |
|||
"github.com/aws/aws-sdk-go-v2/config" |
|||
"github.com/aws/aws-sdk-go-v2/credentials" |
|||
"github.com/aws/aws-sdk-go-v2/service/s3" |
|||
"time" |
|||
) |
|||
|
|||
func main() { |
|||
cfg := MyConfig{ |
|||
Key: "any", |
|||
Secret: "any", |
|||
Region: "US", |
|||
Endpoint: MyEndpoint{ |
|||
URL: "http://localhost:8333", |
|||
}, |
|||
Bucket: MyBucketConfig{ |
|||
Name: "newbucket", |
|||
Versioning: false, |
|||
}, |
|||
MaxBackoffDelay: aws.Int(int(time.Second * 5)), |
|||
MaxRetryAttempts: aws.Int(1), |
|||
} |
|||
|
|||
awsCfg, err := MyAwsConfig(cfg) |
|||
if err != nil { |
|||
panic(err) |
|||
} |
|||
svc := s3.NewFromConfig(*awsCfg, func(o *s3.Options) { |
|||
o.UsePathStyle = true |
|||
}) |
|||
|
|||
// Use the S3 client to interact with SeaweedFS
|
|||
// ...
|
|||
// Example: List all buckets
|
|||
result, err := svc.ListBuckets(context.Background(), &s3.ListBucketsInput{}) |
|||
// no errors - got list of buckets
|
|||
if err != nil { |
|||
panic(err) |
|||
} |
|||
|
|||
// Print the list of buckets
|
|||
for _, bucket := range result.Buckets { |
|||
println(*bucket.Name) |
|||
} |
|||
|
|||
bucket := "bucket1" |
|||
_, err = svc.HeadBucket(context.Background(), &s3.HeadBucketInput{Bucket: &bucket}) |
|||
// ERROR HERE
|
|||
if err != nil { |
|||
println(err) |
|||
} |
|||
|
|||
} |
|||
|
|||
// === helpers
|
|||
|
|||
func MyAwsConfig(cfg MyConfig) (*aws.Config, error) { |
|||
|
|||
cred := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(cfg.Key, cfg.Secret, "")) |
|||
customResolver := aws.EndpointResolverWithOptionsFunc( |
|||
func(service, region string, options ...interface{}) (aws.Endpoint, error) { |
|||
return aws.Endpoint{ |
|||
URL: cfg.Endpoint.URL, |
|||
SigningRegion: cfg.Region, |
|||
}, nil |
|||
}) |
|||
|
|||
awsCfg, err := config.LoadDefaultConfig(context.TODO(), |
|||
config.WithRegion(cfg.Region), |
|||
config.WithCredentialsProvider(cred), |
|||
config.WithEndpointResolverWithOptions(customResolver), |
|||
config.WithRetryer(func() aws.Retryer { |
|||
r := retry.AddWithMaxAttempts(retry.NewStandard(), *cfg.MaxRetryAttempts) |
|||
return retry.AddWithMaxBackoffDelay(r, time.Duration(*cfg.MaxBackoffDelay*1000*1000)) |
|||
})) |
|||
return &awsCfg, err |
|||
} |
|||
|
|||
type MyConfig struct { |
|||
// Access key of S3 AWS.
|
|||
Key string |
|||
// Access secret of S3 AWS.
|
|||
Secret string |
|||
// Region.
|
|||
Region string |
|||
// AWS endpoint.
|
|||
Endpoint MyEndpoint |
|||
// Bucket configuration.
|
|||
Bucket MyBucketConfig |
|||
// File access.
|
|||
FileAccess MyFileAccessType |
|||
// Maximum backoff delay (ms, default: 20 sec).
|
|||
MaxBackoffDelay *int |
|||
// Maximum attempts to retry operation on error (default: 5).
|
|||
MaxRetryAttempts *int |
|||
} |
|||
|
|||
type MyBucketConfig struct { |
|||
// Name of bucket
|
|||
Name string |
|||
// Enable or not versioning
|
|||
Versioning bool |
|||
} |
|||
|
|||
type MyEndpoint struct { |
|||
URL string |
|||
} |
|||
|
|||
type MyFileAccessType byte |
Write
Preview
Loading…
Cancel
Save
Reference in new issue