You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by et...@apache.org on 2024/08/18 10:22:20 UTC
(iceberg-go) branch main updated: chore(s3): update to remove deprecated s3 sdk (#122)
This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-go.git
The following commit(s) were added to refs/heads/main by this push:
new a11721c chore(s3): update to remove deprecated s3 sdk (#122)
a11721c is described below
commit a11721ce82ccaa3c8bbbe0957654deb363fce1c3
Author: Matt Topol <zo...@gmail.com>
AuthorDate: Sun Aug 18 06:22:16 2024 -0400
chore(s3): update to remove deprecated s3 sdk (#122)
---
io/s3.go | 46 ++++++++++++++++++++--------------------------
1 file changed, 20 insertions(+), 26 deletions(-)
diff --git a/io/s3.go b/io/s3.go
index a2bab6c..6702080 100644
--- a/io/s3.go
+++ b/io/s3.go
@@ -25,7 +25,6 @@ import (
"os"
"strings"
- "github.com/aws/aws-sdk-go-v2/aws"
awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
@@ -45,43 +44,38 @@ const (
)
func createS3FileIO(parsed *url.URL, props map[string]string) (IO, error) {
- opts := []func(*config.LoadOptions) error{}
+ cfgOpts := []func(*config.LoadOptions) error{}
+ opts := []func(*s3.Options){}
+
endpoint, ok := props[S3EndpointURL]
if !ok {
endpoint = os.Getenv("AWS_S3_ENDPOINT")
}
if endpoint != "" {
- opts = append(opts, config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
- if service != s3.ServiceID {
- // fallback to default resolution for the service
- return aws.Endpoint{}, &aws.EndpointNotFoundError{}
- }
-
- return aws.Endpoint{
- URL: endpoint,
- SigningRegion: region,
- HostnameImmutable: true,
- }, nil
- })))
+ opts = append(opts, func(o *s3.Options) {
+ o.BaseEndpoint = &endpoint
+ })
}
if tok, ok := props["token"]; ok {
- opts = append(opts, config.WithBearerAuthTokenProvider(
+ cfgOpts = append(cfgOpts, config.WithBearerAuthTokenProvider(
&bearer.StaticTokenProvider{Token: bearer.Token{Value: tok}}))
}
if region, ok := props[S3Region]; ok {
- opts = append(opts, config.WithRegion(region))
+ opts = append(opts, func(o *s3.Options) { o.Region = region })
} else if region, ok := props["client.region"]; ok {
- opts = append(opts, config.WithRegion(region))
+ opts = append(opts, func(o *s3.Options) { o.Region = region })
}
accessKey, secretAccessKey := props[S3AccessKeyID], props[S3SecretAccessKey]
token := props[S3SessionToken]
if accessKey != "" || secretAccessKey != "" || token != "" {
- opts = append(opts, config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
- props[S3AccessKeyID], props[S3SecretAccessKey], props[S3SessionToken])))
+ opts = append(opts, func(o *s3.Options) {
+ o.Credentials = credentials.NewStaticCredentialsProvider(
+ props[S3AccessKeyID], props[S3SecretAccessKey], props[S3SessionToken])
+ })
}
if proxy, ok := props[S3ProxyURI]; ok {
@@ -90,18 +84,18 @@ func createS3FileIO(parsed *url.URL, props map[string]string) (IO, error) {
return nil, fmt.Errorf("invalid s3 proxy url '%s'", proxy)
}
- opts = append(opts, config.WithHTTPClient(awshttp.NewBuildableClient().WithTransportOptions(
- func(t *http.Transport) {
- t.Proxy = http.ProxyURL(proxyURL)
- },
- )))
+ opts = append(opts, func(o *s3.Options) {
+ o.HTTPClient = awshttp.NewBuildableClient().WithTransportOptions(
+ func(t *http.Transport) { t.Proxy = http.ProxyURL(proxyURL) })
+ })
}
- awscfg, err := config.LoadDefaultConfig(context.Background(), opts...)
+ awscfg, err := config.LoadDefaultConfig(context.Background(), cfgOpts...)
if err != nil {
return nil, err
}
+ s3Client := s3.NewFromConfig(awscfg, opts...)
preprocess := func(n string) string {
_, after, found := strings.Cut(n, "://")
if found {
@@ -111,6 +105,6 @@ func createS3FileIO(parsed *url.URL, props map[string]string) (IO, error) {
return strings.TrimPrefix(n, parsed.Host)
}
- s3fs := s3iofs.New(parsed.Host, awscfg)
+ s3fs := s3iofs.NewWithClient(parsed.Host, s3Client)
return FSPreProcName(s3fs, preprocess), nil
}