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 <[email protected]>
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
}