Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r/aws_s3_bucket: Migrate to AWS SDK for Go v2 #35035

Merged
merged 58 commits into from
Dec 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
3f8ceb9
s3: Use AWS SDK for Go v2 exclusively.
ewbankkit Dec 18, 2023
b61de30
s3: Generate only AWS SDK for Go v2 tagging code.
ewbankkit Dec 18, 2023
fc7fd43
s3: Tweak AWS SDK for Go v2 tagging code.
ewbankkit Dec 18, 2023
e67a0ff
r/aws_s3_bucket: Migrate acceptance tests to AWS SDK for Go v2.
ewbankkit Dec 19, 2023
b53ca5c
Merge branch 'main' into td-aws_s3_bucket-aws-sdk-go-v2
ewbankkit Dec 19, 2023
536be43
Additional AWS Regions in 'names.go'.
ewbankkit Dec 19, 2023
d67bbae
r/aws_s3_bucket: Use Region names from 'names.go' in acceptance tests.
ewbankkit Dec 19, 2023
955ef7a
s3: Remove vestiges of AWS SDK for Go v1.
ewbankkit Dec 19, 2023
cd1f39e
Use Region names from 'names.go' for S3 website hosted zone ID.
ewbankkit Dec 19, 2023
7e83463
'HostedZoneIDForRegion' -> 'hostedZoneIDForRegion'.
ewbankkit Dec 19, 2023
6624327
Add 'names.DNSSuffixForPartition'.
ewbankkit Dec 19, 2023
3317c34
Add 'names.PartitionForRegion'.
ewbankkit Dec 19, 2023
79dcd6f
'conns.ReverseDNS' -> 'names.ReverseDNS'.
ewbankkit Dec 19, 2023
5a726a1
r/aws_s3_bucket: Tidy up domain name functions.
ewbankkit Dec 19, 2023
efc50f6
r/aws_s3_bucket: Tidy up Read.
ewbankkit Dec 19, 2023
da57f9b
r/aws_s3_bucket: Tidy up Delete.
ewbankkit Dec 19, 2023
854f61b
r/aws_s3_bucket: Start to tidy up Update.
ewbankkit Dec 19, 2023
36a81cb
Merge branch 'main' into td-aws_s3_bucket-aws-sdk-go-v2
ewbankkit Dec 21, 2023
d062454
Add 'names.CAWest1RegionID'.
ewbankkit Dec 21, 2023
15fc073
r/aws_s3_bucket: Tidy up Update.
ewbankkit Dec 21, 2023
acbd7a0
r/aws_s3_bucket: Tidy up Create further.
ewbankkit Dec 21, 2023
f5e9768
Add 'tfslices.Of'.
ewbankkit Dec 21, 2023
6fd7f2b
enum: Use 'tfslices'.
ewbankkit Dec 21, 2023
7a90725
r/aws_s3_bucket: Tidy up flex.
ewbankkit Dec 21, 2023
ad5d9f1
Merge branch 'main' into td-aws_s3_bucket-aws-sdk-go-v2
ewbankkit Dec 21, 2023
9ff7704
Add 'names.TestPartitionForRegion'.
ewbankkit Dec 21, 2023
6e03e67
Add 'names.TestDNSSuffixForPartition'.
ewbankkit Dec 21, 2023
9739eba
s3: Use AWS SDK for Go v1.
ewbankkit Dec 21, 2023
3d911ee
Remove use of AWS SDK for Go v1 'endpoints.S3UsEast1RegionalEndpoint'…
ewbankkit Dec 21, 2023
a419ba9
Fix tfproviderlint 'AWSAT003'.
ewbankkit Dec 21, 2023
f10a484
s3: Cosmetics.
ewbankkit Dec 21, 2023
696a7c6
Add CHANGELOG entry.
ewbankkit Dec 21, 2023
4e7e6ff
r/aws_s3_bucket: Check for 'errCodeMethodNotAllowed' on all sub-resou…
ewbankkit Dec 21, 2023
486d9f1
Fix golangci-lint 'unused'.
ewbankkit Dec 21, 2023
59afeae
Fix semgrep 'ci.s3-in-func-name'.
ewbankkit Dec 21, 2023
a747649
r/aws_s3_bucket: Fix 'panic: interface conversion: interface {} is ty…
ewbankkit Dec 21, 2023
1b703bf
r/aws_s3_bucket: Check for 'tfresource.NotFound()' on all sub-resourc…
ewbankkit Dec 22, 2023
81dd075
Fix providerlint 'AWSR001'.
ewbankkit Dec 22, 2023
1e5f355
More test checks in 'TestAccS3Bucket_Basic_basic'.
ewbankkit Dec 22, 2023
1cb592b
r/aws_s3_bucket: Extra eventual consistency retries during CheckDestroy.
ewbankkit Dec 22, 2023
11b230b
Acceptance test output:
ewbankkit Dec 22, 2023
e52c4ee
Merge commit '11b230b434dbed137d9b388dc4dd584911cf0a7e' into td-aws_s…
ewbankkit Dec 22, 2023
3321c57
r/aws_s3_bucket: Backwards compatibility for setting 'website_domain'…
ewbankkit Dec 22, 2023
ffd78e5
testAccCheckBucketAddObjectsWithLegalHold: Fix 'Content-MD5 OR x-amz-…
ewbankkit Dec 22, 2023
700d080
Fix typo.
ewbankkit Dec 22, 2023
5315df7
Fix 'expandBucketServerSideEncryptionRules'.
ewbankkit Dec 22, 2023
6363b24
Acceptance test output:
ewbankkit Dec 22, 2023
92bdc00
Remove 'lintignore:AWSR001'.
ewbankkit Dec 22, 2023
3e7ef84
r/aws_s3_bucket: Fix typos.
ewbankkit Dec 22, 2023
5e6fe74
's3BucketPropagationTimeout' -> 'bucketPropagationTimeout'.
ewbankkit Dec 22, 2023
a25bed1
r/aws_s3_bucket: Fix 'panic: interface conversion: interface {} is ty…
ewbankkit Dec 22, 2023
875dd10
Add 'flex.ExpandString(y)ValueListEmpty'.
ewbankkit Dec 22, 2023
8e1fb9f
Use 'flex.ExpandStringValueListEmpty' for S3 Bucket cors_rule.
ewbankkit Dec 22, 2023
560a707
Fix 'TestAccS3Bucket_Replication_expectVersioningValidationError'.
ewbankkit Dec 22, 2023
13ed607
Fix 'flattenBucketDestination'.
ewbankkit Dec 22, 2023
5408f8f
Fix 'expandBucketVersioningConfigurationCreate'.
ewbankkit Dec 22, 2023
8183adf
Fix 'missing required field, PutBucketVersioningInput.VersioningConfi…
ewbankkit Dec 22, 2023
47242cf
Use 'aws-sdk-go-base/v2/tfawserr', not 'aws-sdk-go-base/v2/awsv1shim/…
ewbankkit Dec 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/35035.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/aws_s3_bucket: Modify resource Read to support third-party S3 API implementations. Because we cannot easily test this functionality, it is best effort and we ask for community help in testing
```
3 changes: 2 additions & 1 deletion internal/acctest/acctest.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import (
tforganizations "github.com/hashicorp/terraform-provider-aws/internal/service/organizations"
tfsts "github.com/hashicorp/terraform-provider-aws/internal/service/sts"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
"github.com/hashicorp/terraform-provider-aws/names"
"github.com/jmespath/go-jmespath"
"github.com/mitchellh/mapstructure"
)
Expand Down Expand Up @@ -824,7 +825,7 @@ func PartitionDNSSuffix() string {

func PartitionReverseDNSPrefix() string {
if partition, ok := endpoints.PartitionForRegion(endpoints.DefaultPartitions(), Region()); ok {
return conns.ReverseDNS(partition.DNSSuffix())
return names.ReverseDNS(partition.DNSSuffix())
}

return "com.amazonaws"
Expand Down
16 changes: 7 additions & 9 deletions internal/conns/awsclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ type AWSClient struct {
lock sync.Mutex
logger baselogging.Logger
s3ExpressClient *s3_sdkv2.Client
s3UsePathStyle bool // From provider configuration.
s3UsEast1RegionalEndpoint endpoints_sdkv1.S3UsEast1RegionalEndpoint // From provider configuration.
stsRegion string // From provider configuration.
s3UsePathStyle bool // From provider configuration.
s3USEast1RegionalEndpoint string // From provider configuration.
stsRegion string // From provider configuration.
}

// CredentialsProvider returns the AWS SDK for Go v2 credentials provider.
Expand Down Expand Up @@ -87,7 +87,7 @@ func (c *AWSClient) S3ExpressClient(ctx context.Context) *s3_sdkv2.Client {
if c.s3ExpressClient == nil {
if s3Client.Options().Region == names.GlobalRegionID {
c.s3ExpressClient = errs.Must(client[*s3_sdkv2.Client](ctx, c, names.S3, map[string]any{
"s3_us_east_1_regional_endpoint": endpoints_sdkv1.RegionalS3UsEast1Endpoint,
"s3_us_east_1_regional_endpoint": "regional",
}))
} else {
c.s3ExpressClient = s3Client
Expand Down Expand Up @@ -190,12 +190,10 @@ func (c *AWSClient) apiClientConfig(servicePackageName string) map[string]any {
m["s3_use_path_style"] = c.s3UsePathStyle
// AWS SDK for Go v2 does not use the AWS_S3_US_EAST_1_REGIONAL_ENDPOINT environment variable during configuration.
// For compatibility, read it now.
if c.s3UsEast1RegionalEndpoint == endpoints_sdkv1.UnsetS3UsEast1Endpoint {
if v, err := endpoints_sdkv1.GetS3UsEast1RegionalEndpoint(os.Getenv("AWS_S3_US_EAST_1_REGIONAL_ENDPOINT")); err == nil {
c.s3UsEast1RegionalEndpoint = v
}
if c.s3USEast1RegionalEndpoint == "" {
c.s3USEast1RegionalEndpoint = NormalizeS3USEast1RegionalEndpoint(os.Getenv("AWS_S3_US_EAST_1_REGIONAL_ENDPOINT"))
}
m["s3_us_east_1_regional_endpoint"] = c.s3UsEast1RegionalEndpoint
m["s3_us_east_1_regional_endpoint"] = c.s3USEast1RegionalEndpoint
case names.STS:
m["sts_region"] = c.stsRegion
}
Expand Down
5 changes: 0 additions & 5 deletions internal/conns/awsclient_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 13 additions & 3 deletions internal/conns/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package conns
import (
"context"
"fmt"
"strings"

aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws"
imds_sdkv2 "github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
Expand Down Expand Up @@ -45,7 +46,7 @@ type Config struct {
Region string
RetryMode aws_sdkv2.RetryMode
S3UsePathStyle bool
S3UsEast1RegionalEndpoint endpoints_sdkv1.S3UsEast1RegionalEndpoint
S3USEast1RegionalEndpoint string
SecretKey string
SharedConfigFiles []string
SharedCredentialsFiles []string
Expand Down Expand Up @@ -199,7 +200,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS
client.IgnoreTagsConfig = c.IgnoreTagsConfig
client.Partition = partition
client.Region = c.Region
client.ReverseDNSPrefix = ReverseDNS(DNSSuffix)
client.ReverseDNSPrefix = names.ReverseDNS(DNSSuffix)
client.SetHTTPClient(sess.Config.HTTPClient) // Must be called while client.Session is nil.
client.Session = sess
client.TerraformVersion = c.TerraformVersion
Expand All @@ -211,7 +212,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS
client.endpoints = c.Endpoints
client.logger = logger
client.s3UsePathStyle = c.S3UsePathStyle
client.s3UsEast1RegionalEndpoint = c.S3UsEast1RegionalEndpoint
client.s3USEast1RegionalEndpoint = c.S3USEast1RegionalEndpoint
client.stsRegion = c.STSRegion

return client, diags
Expand All @@ -227,3 +228,12 @@ func baseSeverityToSdkSeverity(s basediag.Severity) diag.Severity {
return -1
}
}

func NormalizeS3USEast1RegionalEndpoint(v string) string {
switch v := strings.ToLower(v); v {
case "legacy", "regional":
return v
default:
return ""
}
}
55 changes: 0 additions & 55 deletions internal/conns/conns_test.go

This file was deleted.

13 changes: 7 additions & 6 deletions internal/enum/values.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@

package enum

import (
tfslices "github.com/hashicorp/terraform-provider-aws/internal/slices"
)

type Valueser[T ~string] interface {
~string
Values() []T
Expand All @@ -17,10 +21,7 @@ func Values[T Valueser[T]]() []string {
}

func Slice[T Valueser[T]](l ...T) []string {
result := make([]string, len(l))
for i, v := range l {
result[i] = string(v)
}

return result
return tfslices.ApplyToAll(l, func(v T) string {
return string(v)
})
}
18 changes: 18 additions & 0 deletions internal/flex/flex.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,24 @@ func ExpandStringyValueList[E ~string](configured []any) []E {
return vs
}

// ExpandStringValueList takes the result of flatmap.Expand for an array of strings
// and returns a []string
func ExpandStringValueListEmpty(configured []interface{}) []string {
return ExpandStringyValueListEmpty[string](configured)
}

func ExpandStringyValueListEmpty[E ~string](configured []any) []E {
vs := make([]E, 0, len(configured))
for _, v := range configured {
if val, ok := v.(string); ok { // empty string in config turns into nil in []interface{} so !ok
vs = append(vs, E(val))
} else {
vs = append(vs, E(""))
}
}
return vs
}

// Takes list of pointers to strings. Expand to an array
// of raw strings and returns a []interface{}
// to keep compatibility w/ schema.NewSetschema.NewSet
Expand Down
7 changes: 1 addition & 6 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/YakDriver/regexache"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
"github.com/aws/aws-sdk-go/aws/endpoints"
awsbase "github.com/hashicorp/aws-sdk-go-base/v2"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand Down Expand Up @@ -500,11 +499,7 @@ func configure(ctx context.Context, provider *schema.Provider, d *schema.Resourc
}

if v, ok := d.Get("s3_us_east_1_regional_endpoint").(string); ok && v != "" {
endpoint, err := endpoints.GetS3UsEast1RegionalEndpoint(v)
if err != nil {
return nil, sdkdiag.AppendFromErr(diags, err)
}
config.S3UsEast1RegionalEndpoint = endpoint
config.S3USEast1RegionalEndpoint = conns.NormalizeS3USEast1RegionalEndpoint(v)
}

if v, ok := d.GetOk("allowed_account_ids"); ok && v.(*schema.Set).Len() > 0 {
Expand Down
Loading
Loading