如何将本地minIO存储连接到aws-sdk-go-v2?我可以在以前版本的go SDK中找到关于如何做到这一点的清晰文档,但在V2中没有。我通读了版本2的源代码,似乎aws-sdk-go-v2删除了禁用SSL和指定本地S3端点的选项(服务URL必须是amazon风格的)。
aws-sdk-go-v2
hxzsmxv21#
你可以很容易地做到这一点:
const defaultRegion = "us-east-1" staticResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) { return aws.Endpoint{ PartitionID: "aws", URL: "http://localhost:9123", // or where ever you ran minio SigningRegion: defaultRegion, HostnameImmutable: true, }, nil }) cfg = aws.Config{ Region: defaultRegion, Credentials: credentials.NewStaticCredentialsProvider("minioadmin", "minioadmin", ""), EndpointResolver: staticResolver, } s3Client := s3.NewFromConfig(cfg)
ykejflvf2#
截至今天aws.EndpointResolverFunc已弃用,这是我的工作:
const defaultRegion = "us-east-1" hostAddress := "http://localhost:9000" resolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...any) (aws.Endpoint, error) { return aws.Endpoint{ PartitionID: "aws", URL: hostAddress, SigningRegion: defaultRegion, HostnameImmutable: true, }, nil }) cfg, err = config.LoadDefaultConfig(context.Background(), config.WithRegion(defaultRegion), config.WithEndpointResolverWithOptions(resolver), config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("minioadmin", "minioadmin", "")), ) s3Client := s3.NewFromConfig(cfg)
shyt4zoc3#
aws-sdk-go-v2的派生版本
const defaultRegion = "us-east-1" hostAddress := "http://localhost:9000" resolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...any) (aws.Endpoint, error) { return aws.Endpoint{ PartitionID: "aws", SigningRegion: defaultRegion, URL: hostAddress, HostnameImmutable: true, }, nil }) cfg := aws.Config{ Region: defaultRegion, EndpointResolverWithOptions: resolver Credentials: credentials.NewStaticCredentialsProvider("minioadmin", "minioadmin", ""), } return s3.NewFromConfig(cfg)
drnojrws4#
对于带有EndpointResolverV2的aws-sdk-go-v2
EndpointResolverV2
package main import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/smithy-go/endpoints" "io" "net/url" ) type Resolver struct { URL *url.URL } func (r *Resolver) ResolveEndpoint(_ context.Context, params s3.EndpointParameters) (transport.Endpoint, error) { u := *r.URL u.Path += "/" + *params.Bucket return transport.Endpoint{URI: u}, nil } func main() { endpointURL, _ := url.Parse("http://localhost:9000") // or where ever you ran minio client := s3.New(s3.Options{ EndpointResolverV2: &Resolver{URL: endpointURL}, Credentials: aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) { return aws.Credentials{ AccessKeyID: "minioadmin", SecretAccessKey: "minioadmin", }, nil }), }) ... }
4条答案
按热度按时间hxzsmxv21#
你可以很容易地做到这一点:
ykejflvf2#
截至今天aws.EndpointResolverFunc已弃用,这是我的工作:
shyt4zoc3#
aws-sdk-go-v2的派生版本
drnojrws4#
对于带有
EndpointResolverV2
的aws-sdk-go-v2