123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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
|