From 190e942d5fb985fcb8e72af495a2767188fa6b40 Mon Sep 17 00:00:00 2001 From: James Kwon <96548424+hongil0316@users.noreply.github.com> Date: Thu, 7 Nov 2024 19:32:30 -0500 Subject: [PATCH 1/2] Migrate/s3 --- aws/resources/s3.go | 209 +++++++++--------- aws/resources/s3_access_point.go | 29 ++- aws/resources/s3_access_point_test.go | 21 +- aws/resources/s3_access_point_types.go | 22 +- aws/resources/s3_multi_region_access_point.go | 50 +++-- .../s3_multi_region_access_point_test.go | 21 +- .../s3_multi_region_access_point_types.go | 22 +- .../s3_object_lambda_access_point.go | 43 ++-- .../s3_object_lambda_access_point_test.go | 21 +- .../s3_object_lambda_access_point_types.go | 22 +- aws/resources/s3_test.go | 78 ++++--- aws/resources/s3_types.go | 33 ++- go.mod | 74 ++++--- go.sum | 153 +++++++------ util/tag.go | 13 +- v2_migration_report/output.md | 8 +- 16 files changed, 444 insertions(+), 375 deletions(-) diff --git a/aws/resources/s3.go b/aws/resources/s3.go index 30c2c028..dc1902d1 100644 --- a/aws/resources/s3.go +++ b/aws/resources/s3.go @@ -2,14 +2,18 @@ package resources import ( "context" + goerr "errors" "fmt" "math" + "strings" "sync" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/aws/aws-sdk-go-v2/service/s3/types" + "github.com/aws/smithy-go" + "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/logging" "github.com/gruntwork-io/cloud-nuke/report" @@ -26,17 +30,17 @@ func (sb S3Buckets) getS3BucketRegion(bucketName string) (string, error) { Bucket: aws.String(bucketName), } - result, err := sb.Client.GetBucketLocationWithContext(sb.Context, input) + result, err := sb.Client.GetBucketLocation(sb.Context, input) if err != nil { return "", err } - if result.LocationConstraint == nil { + if result.LocationConstraint == "" { // GetBucketLocation returns nil for us-east-1 // https://github.com/aws/aws-sdk-go/issues/1687 return "us-east-1", nil } - return *result.LocationConstraint, nil + return string(result.LocationConstraint), nil } // getS3BucketTags returns S3 Bucket tags. @@ -47,18 +51,17 @@ func (bucket *S3Buckets) getS3BucketTags(bucketName string) (map[string]string, // Please note that svc argument should be created from a session object which is // in the same region as the bucket or GetBucketTagging will fail. - result, err := bucket.Client.GetBucketTaggingWithContext(bucket.Context, input) - if err != nil { - if aerr, ok := err.(awserr.Error); ok { - switch aerr.Code() { - case "NoSuchTagSet": - return nil, nil - } + result, err := bucket.Client.GetBucketTagging(bucket.Context, input) + + var apiErr *smithy.OperationError + if goerr.As(err, &apiErr) { + if strings.Contains(apiErr.Error(), "NoSuchTagSet: The TagSet does not exist") { + return nil, nil } return nil, err } - return util.ConvertS3TagsToMap(result.TagSet), nil + return util.ConvertS3TypesTagsToMap(result.TagSet), nil } // S3Bucket - represents S3 bucket @@ -73,7 +76,7 @@ type S3Bucket struct { // getAllS3Buckets returns a map of per region AWS S3 buckets which were created before excludeAfter func (sb S3Buckets) getAll(c context.Context, configObj config.Config) ([]*string, error) { - output, err := sb.Client.ListBucketsWithContext(sb.Context, &s3.ListBucketsInput{}) + output, err := sb.Client.ListBuckets(sb.Context, &s3.ListBucketsInput{}) if err != nil { return nil, errors.WithStackTrace(err) } @@ -106,14 +109,14 @@ func (sb S3Buckets) getAll(c context.Context, configObj config.Config) ([]*strin } // getBucketNamesPerRegions gets valid bucket names concurrently from list of target buckets -func (sb S3Buckets) getBucketNames(targetBuckets []*s3.Bucket, configObj config.Config) ([]*string, error) { +func (sb S3Buckets) getBucketNames(targetBuckets []types.Bucket, configObj config.Config) ([]*string, error) { var bucketNames []*string bucketCh := make(chan *S3Bucket, len(targetBuckets)) var wg sync.WaitGroup for _, bucket := range targetBuckets { wg.Add(1) - go func(bucket *s3.Bucket) { + go func(bucket types.Bucket) { defer wg.Done() sb.getBucketInfo(bucket, bucketCh, configObj) }(bucket) @@ -143,10 +146,10 @@ func (sb S3Buckets) getBucketNames(targetBuckets []*s3.Bucket, configObj config. } // getBucketInfo populates the local S3Bucket struct for the passed AWS bucket -func (sb S3Buckets) getBucketInfo(bucket *s3.Bucket, bucketCh chan<- *S3Bucket, configObj config.Config) { +func (sb S3Buckets) getBucketInfo(bucket types.Bucket, bucketCh chan<- *S3Bucket, configObj config.Config) { var bucketData S3Bucket - bucketData.Name = aws.StringValue(bucket.Name) - bucketData.CreationDate = aws.TimeValue(bucket.CreationDate) + bucketData.Name = aws.ToString(bucket.Name) + bucketData.CreationDate = aws.ToTime(bucket.CreationDate) bucketRegion, err := sb.getS3BucketRegion(bucketData.Name) if err != nil { @@ -194,93 +197,73 @@ func (sb S3Buckets) getBucketInfo(bucket *s3.Bucket, bucketCh chan<- *S3Bucket, func (sb S3Buckets) emptyBucket(bucketName *string) error { // Since the error may happen in the inner function handler for the pager, we need a function scoped variable that // the inner function can set when there is an error. - var errOut error pageId := 1 // As bucket versioning is managed separately and you can turn off versioning after the bucket is created, // we need to check if there are any versions in the bucket regardless of the versioning status. - err := sb.Client.ListObjectVersionsPagesWithContext( - sb.Context, - &s3.ListObjectVersionsInput{ - Bucket: bucketName, - MaxKeys: aws.Int64(int64(sb.MaxBatchSize())), - }, - func(page *s3.ListObjectVersionsOutput, lastPage bool) (shouldContinue bool) { - logging.Debugf("Deleting page %d of object versions (%d objects) from bucket %s", pageId, len(page.Versions), aws.StringValue(bucketName)) - if err := sb.deleteObjectVersions(bucketName, page.Versions); err != nil { - logging.Errorf("Error deleting objects versions for page %d from bucket %s: %s", pageId, aws.StringValue(bucketName), err) - errOut = err - return false - } - logging.Debugf("[OK] - deleted page %d of object versions (%d objects) from bucket %s", pageId, len(page.Versions), aws.StringValue(bucketName)) - - logging.Debugf("Deleting page %d of deletion markers (%d deletion markers) from bucket %s", pageId, len(page.DeleteMarkers), aws.StringValue(bucketName)) - if err := sb.deleteDeletionMarkers(bucketName, page.DeleteMarkers); err != nil { - logging.Debugf("Error deleting deletion markers for page %d from bucket %s: %s", pageId, aws.StringValue(bucketName), err) - errOut = err - return false - } - logging.Debugf("[OK] - deleted page %d of deletion markers (%d deletion markers) from bucket %s", pageId, len(page.DeleteMarkers), aws.StringValue(bucketName)) - - pageId++ - return true - }, - ) + + outputs, err := sb.Client.ListObjectVersions(sb.Context, &s3.ListObjectVersionsInput{ + Bucket: bucketName, + MaxKeys: aws.Int32(int32(sb.MaxBatchSize())), + }) if err != nil { - return err + return errors.WithStackTrace(err) } - if errOut != nil { - return errOut + + logging.Debugf("Deleting page %d of object versions (%d objects) from bucket %s", pageId, len(outputs.Versions), aws.ToString(bucketName)) + if err := sb.deleteObjectVersions(bucketName, outputs.Versions); err != nil { + logging.Errorf("Error deleting objects versions for page %d from bucket %s: %s", pageId, aws.ToString(bucketName), err) + return errors.WithStackTrace(err) } - return nil + logging.Debugf("[OK] - deleted page %d of object versions (%d objects) from bucket %s", pageId, len(outputs.Versions), aws.ToString(bucketName)) - // Handle non versioned buckets. - err = sb.Client.ListObjectsV2PagesWithContext( - sb.Context, - &s3.ListObjectsV2Input{ - Bucket: bucketName, - MaxKeys: aws.Int64(int64(sb.MaxBatchSize())), - }, - func(page *s3.ListObjectsV2Output, lastPage bool) (shouldContinue bool) { - logging.Debugf("Deleting object page %d (%d objects) from bucket %s", pageId, len(page.Contents), aws.StringValue(bucketName)) - if err := sb.deleteObjects(bucketName, page.Contents); err != nil { - logging.Errorf("Error deleting objects for page %d from bucket %s: %s", pageId, aws.StringValue(bucketName), err) - errOut = err - return false - } - logging.Debugf("[OK] - deleted object page %d (%d objects) from bucket %s", pageId, len(page.Contents), aws.StringValue(bucketName)) - - pageId++ - return true - }, - ) - if err != nil { - return err + logging.Debugf("Deleting page %d of object delete markers (%d objects) from bucket %s", pageId, len(outputs.Versions), aws.ToString(bucketName)) + if err := sb.deleteDeletionMarkers(bucketName, outputs.DeleteMarkers); err != nil { + logging.Errorf("Error deleting deletion markers for page %d from bucket %s: %s", pageId, aws.ToString(bucketName), err) + return errors.WithStackTrace(err) } - if errOut != nil { - return errOut + logging.Debugf("[OK] - deleted page %d of deletion markers (%d deletion markers) from bucket %s", pageId, len(outputs.DeleteMarkers), aws.ToString(bucketName)) + + paginator := s3.NewListObjectsV2Paginator(sb.Client, &s3.ListObjectsV2Input{ + Bucket: bucketName, + MaxKeys: aws.Int32(int32(sb.MaxBatchSize())), + }) + + for paginator.HasMorePages() { + + page, err := paginator.NextPage(sb.Context) + if err != nil { + return errors.WithStackTrace(err) + } + + logging.Debugf("Deleting object page %d (%d objects) from bucket %s", pageId, len(page.Contents), aws.ToString(bucketName)) + if err := sb.deleteObjects(bucketName, page.Contents); err != nil { + logging.Errorf("Error deleting objects for page %d from bucket %s: %s", pageId, aws.ToString(bucketName), err) + return err + } + pageId++ } return nil } // deleteObjects will delete the provided objects (unversioned) from the specified bucket. -func (sb S3Buckets) deleteObjects(bucketName *string, objects []*s3.Object) error { +func (sb S3Buckets) deleteObjects(bucketName *string, objects []types.Object) error { if len(objects) == 0 { logging.Debugf("No objects returned in page") return nil } - objectIdentifiers := []*s3.ObjectIdentifier{} + objectIdentifiers := []types.ObjectIdentifier{} for _, obj := range objects { - objectIdentifiers = append(objectIdentifiers, &s3.ObjectIdentifier{ + objectIdentifiers = append(objectIdentifiers, types.ObjectIdentifier{ Key: obj.Key, }) } - _, err := sb.Client.DeleteObjectsWithContext( + _, err := sb.Client.DeleteObjects( sb.Context, &s3.DeleteObjectsInput{ Bucket: bucketName, - Delete: &s3.Delete{ + Delete: &types.Delete{ Objects: objectIdentifiers, Quiet: aws.Bool(false), }, @@ -290,24 +273,24 @@ func (sb S3Buckets) deleteObjects(bucketName *string, objects []*s3.Object) erro } // deleteObjectVersions will delete the provided object versions from the specified bucket. -func (sb S3Buckets) deleteObjectVersions(bucketName *string, objectVersions []*s3.ObjectVersion) error { +func (sb S3Buckets) deleteObjectVersions(bucketName *string, objectVersions []types.ObjectVersion) error { if len(objectVersions) == 0 { logging.Debugf("No object versions returned in page") return nil } - objectIdentifiers := []*s3.ObjectIdentifier{} + objectIdentifiers := []types.ObjectIdentifier{} for _, obj := range objectVersions { - objectIdentifiers = append(objectIdentifiers, &s3.ObjectIdentifier{ + objectIdentifiers = append(objectIdentifiers, types.ObjectIdentifier{ Key: obj.Key, VersionId: obj.VersionId, }) } - _, err := sb.Client.DeleteObjectsWithContext( + _, err := sb.Client.DeleteObjects( sb.Context, &s3.DeleteObjectsInput{ Bucket: bucketName, - Delete: &s3.Delete{ + Delete: &types.Delete{ Objects: objectIdentifiers, Quiet: aws.Bool(false), }, @@ -317,24 +300,24 @@ func (sb S3Buckets) deleteObjectVersions(bucketName *string, objectVersions []*s } // deleteDeletionMarkers will delete the provided deletion markers from the specified bucket. -func (sb S3Buckets) deleteDeletionMarkers(bucketName *string, objectDelMarkers []*s3.DeleteMarkerEntry) error { +func (sb S3Buckets) deleteDeletionMarkers(bucketName *string, objectDelMarkers []types.DeleteMarkerEntry) error { if len(objectDelMarkers) == 0 { logging.Debugf("No deletion markers returned in page") return nil } - objectIdentifiers := []*s3.ObjectIdentifier{} + objectIdentifiers := []types.ObjectIdentifier{} for _, obj := range objectDelMarkers { - objectIdentifiers = append(objectIdentifiers, &s3.ObjectIdentifier{ + objectIdentifiers = append(objectIdentifiers, types.ObjectIdentifier{ Key: obj.Key, VersionId: obj.VersionId, }) } - _, err := sb.Client.DeleteObjectsWithContext( + _, err := sb.Client.DeleteObjects( sb.Context, &s3.DeleteObjectsInput{ Bucket: bucketName, - Delete: &s3.Delete{ + Delete: &types.Delete{ Objects: objectIdentifiers, Quiet: aws.Bool(false), }, @@ -349,18 +332,18 @@ func (sb S3Buckets) nukeAllS3BucketObjects(bucketName *string) error { return fmt.Errorf("Invalid batchsize - %d - should be between %d and %d", sb.MaxBatchSize(), 1, 1000) } - logging.Debugf("Emptying bucket %s", aws.StringValue(bucketName)) + logging.Debugf("Emptying bucket %s", aws.ToString(bucketName)) if err := sb.emptyBucket(bucketName); err != nil { return err } - logging.Debugf("[OK] - successfully emptied bucket %s", aws.StringValue(bucketName)) + logging.Debugf("[OK] - successfully emptied bucket %s", aws.ToString(bucketName)) return nil } // nukeEmptyS3Bucket deletes an empty S3 bucket func (sb S3Buckets) nukeEmptyS3Bucket(bucketName *string, verifyBucketDeletion bool) error { - _, err := sb.Client.DeleteBucketWithContext(sb.Context, &s3.DeleteBucketInput{ + _, err := sb.Client.DeleteBucket(sb.Context, &s3.DeleteBucketInput{ Bucket: bucketName, }) if err != nil { @@ -375,23 +358,47 @@ func (sb S3Buckets) nukeEmptyS3Bucket(bucketName *string, verifyBucketDeletion b // such, we retry this routine up to 3 times for a total of 300 seconds. const maxRetries = 3 for i := 0; i < maxRetries; i++ { - logging.Debugf("Waiting until bucket (%s) deletion is propagated (attempt %d / %d)", aws.StringValue(bucketName), i+1, maxRetries) - err = sb.Client.WaitUntilBucketNotExistsWithContext(sb.Context, &s3.HeadBucketInput{ - Bucket: bucketName, - }) + logging.Debugf("Waiting until bucket (%s) deletion is propagated (attempt %d / %d)", aws.ToString(bucketName), i+1, maxRetries) + err = waitForBucketDeletion(sb.Context, sb.Client, aws.ToString(bucketName)) // Exit early if no error if err == nil { logging.Debug("Successfully detected bucket deletion.") return nil } - logging.Debugf("Error waiting for bucket (%s) deletion propagation (attempt %d / %d)", aws.StringValue(bucketName), i+1, maxRetries) + logging.Debugf("Error waiting for bucket (%s) deletion propagation (attempt %d / %d)", aws.ToString(bucketName), i+1, maxRetries) logging.Debugf("Underlying error was: %s", err) } return err } +func waitForBucketDeletion(ctx context.Context, client S3API, bucketName string) error { + waiter := s3.NewBucketNotExistsWaiter(client) + + for i := 0; i < maxRetries; i++ { + logging.Debugf("Waiting until bucket (%s) deletion is propagated (attempt %d / %d)", bucketName, i+1, maxRetries) + + err := waiter.Wait(ctx, &s3.HeadBucketInput{ + Bucket: aws.String(bucketName), + }, waitDuration) + if err == nil { + logging.Debugf("Successfully detected bucket deletion.") + return nil + } + logging.Debugf("Waiting until bucket erorr (%v)", err) + + if i == maxRetries-1 { + return fmt.Errorf("failed to confirm bucket deletion after %d attempts: %w", maxRetries, err) + } + + logging.Debugf("Error waiting for bucket (%s) deletion propagation (attempt %d / %d)", bucketName, i+1, maxRetries) + logging.Debugf("Underlying error was: %s", err) + } + + return fmt.Errorf("unexpected error: reached end of retry loop") +} + func (sb S3Buckets) nukeS3BucketPolicy(bucketName *string) error { - _, err := sb.Client.DeleteBucketPolicyWithContext( + _, err := sb.Client.DeleteBucketPolicy( sb.Context, &s3.DeleteBucketPolicyInput{ Bucket: aws.String(*bucketName), @@ -443,7 +450,7 @@ func (sb S3Buckets) nukeAll(bucketNames []*string) (delCount int, err error) { // Record status of this resource e := report.Entry{ - Identifier: aws.StringValue(bucketName), + Identifier: aws.ToString(bucketName), ResourceType: "S3 Bucket", Error: err, } diff --git a/aws/resources/s3_access_point.go b/aws/resources/s3_access_point.go index 7538a6b9..4d6ca1f5 100644 --- a/aws/resources/s3_access_point.go +++ b/aws/resources/s3_access_point.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/s3control" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/logging" "github.com/gruntwork-io/cloud-nuke/report" @@ -24,19 +24,26 @@ func (ap *S3AccessPoint) getAll(c context.Context, configObj config.Config) ([]* ap.AccountID = aws.String(accountID) var accessPoints []*string - err := ap.Client.ListAccessPointsPagesWithContext(ap.Context, &s3control.ListAccessPointsInput{ + paginator := s3control.NewListAccessPointsPaginator(ap.Client, &s3control.ListAccessPointsInput{ AccountId: ap.AccountID, - }, func(lapo *s3control.ListAccessPointsOutput, lastPage bool) bool { - for _, accessPoint := range lapo.AccessPointList { + }) + + for paginator.HasMorePages() { + page, err := paginator.NextPage(ap.Context) + if err != nil { + return nil, errors.WithStackTrace(err) + } + + for _, accessPoint := range page.AccessPointList { if configObj.S3AccessPoint.ShouldInclude(config.ResourceValue{ Name: accessPoint.Name, }) { accessPoints = append(accessPoints, accessPoint.Name) } } - return !lastPage - }) - return accessPoints, errors.WithStackTrace(err) + } + + return accessPoints, nil } func (ap *S3AccessPoint) nukeAll(identifiers []*string) error { @@ -50,14 +57,14 @@ func (ap *S3AccessPoint) nukeAll(identifiers []*string) error { for _, id := range identifiers { - _, err := ap.Client.DeleteAccessPointWithContext(ap.Context, &s3control.DeleteAccessPointInput{ + _, err := ap.Client.DeleteAccessPoint(ap.Context, &s3control.DeleteAccessPointInput{ AccountId: ap.AccountID, Name: id, }) // Record status of this resource e := report.Entry{ - Identifier: aws.StringValue(id), + Identifier: aws.ToString(id), ResourceType: "S3 Access point", Error: err, } @@ -67,7 +74,7 @@ func (ap *S3AccessPoint) nukeAll(identifiers []*string) error { logging.Debugf("[Failed] %s", err) } else { deleted = append(deleted, id) - logging.Debugf("Deleted S3 access point: %s", aws.StringValue(id)) + logging.Debugf("Deleted S3 access point: %s", aws.ToString(id)) } } diff --git a/aws/resources/s3_access_point_test.go b/aws/resources/s3_access_point_test.go index 5146dc61..a366a03a 100644 --- a/aws/resources/s3_access_point_test.go +++ b/aws/resources/s3_access_point_test.go @@ -5,27 +5,24 @@ import ( "regexp" "testing" - "github.com/aws/aws-sdk-go/aws" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" + "github.com/aws/aws-sdk-go-v2/service/s3control/types" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/util" "github.com/stretchr/testify/require" ) type mocks3AccessPoint struct { - s3controliface.S3ControlAPI + S3ControlAccessPointAPI ListAccessPointsOutput s3control.ListAccessPointsOutput DeleteAccessPointOutput s3control.DeleteAccessPointOutput } -func (m mocks3AccessPoint) ListAccessPointsPagesWithContext(_ awsgo.Context, _ *s3control.ListAccessPointsInput, fn func(*s3control.ListAccessPointsOutput, bool) bool, _ ...request.Option) error { - fn(&m.ListAccessPointsOutput, true) - return nil +func (m mocks3AccessPoint) ListAccessPoints(ctx context.Context, params *s3control.ListAccessPointsInput, optFns ...func(*s3control.Options)) (*s3control.ListAccessPointsOutput, error) { + return &m.ListAccessPointsOutput, nil } -func (m mocks3AccessPoint) DeleteAccessPointWithContext(_ awsgo.Context, _ *s3control.DeleteAccessPointInput, _ ...request.Option) (*s3control.DeleteAccessPointOutput, error) { +func (m mocks3AccessPoint) DeleteAccessPoint(ctx context.Context, params *s3control.DeleteAccessPointInput, optFns ...func(*s3control.Options)) (*s3control.DeleteAccessPointOutput, error) { return &m.DeleteAccessPointOutput, nil } @@ -42,7 +39,7 @@ func TestS3AccessPoint_GetAll(t *testing.T) { ap := S3AccessPoint{ Client: mocks3AccessPoint{ ListAccessPointsOutput: s3control.ListAccessPointsOutput{ - AccessPointList: []*s3control.AccessPoint{ + AccessPointList: []types.AccessPoint{ { Name: aws.String(testName01), }, @@ -80,7 +77,7 @@ func TestS3AccessPoint_GetAll(t *testing.T) { S3AccessPoint: tc.configObj, }) require.NoError(t, err) - require.Equal(t, tc.expected, aws.StringValueSlice(names)) + require.Equal(t, tc.expected, aws.ToStringSlice(names)) }) } } diff --git a/aws/resources/s3_access_point_types.go b/aws/resources/s3_access_point_types.go index cbc45d43..ff8c0907 100644 --- a/aws/resources/s3_access_point_types.go +++ b/aws/resources/s3_access_point_types.go @@ -3,26 +3,30 @@ package resources import ( "context" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/go-commons/errors" ) +type S3ControlAccessPointAPI interface { + ListAccessPoints(ctx context.Context, params *s3control.ListAccessPointsInput, optFns ...func(*s3control.Options)) (*s3control.ListAccessPointsOutput, error) + DeleteAccessPoint(ctx context.Context, params *s3control.DeleteAccessPointInput, optFns ...func(*s3control.Options)) (*s3control.DeleteAccessPointOutput, error) +} type S3AccessPoint struct { BaseAwsResource - Client s3controliface.S3ControlAPI + Client S3ControlAccessPointAPI Region string AccessPoints []string AccountID *string } -func (ap *S3AccessPoint) Init(session *session.Session) { - ap.Client = s3control.New(session) +func (ap *S3AccessPoint) InitV2(cfg aws.Config) { + ap.Client = s3control.NewFromConfig(cfg) } +func (ap *S3AccessPoint) IsUsingV2() bool { return true } + func (ap *S3AccessPoint) ResourceName() string { return "s3-ap" } @@ -45,12 +49,12 @@ func (ap *S3AccessPoint) GetAndSetIdentifiers(c context.Context, configObj confi return nil, err } - ap.AccessPoints = awsgo.StringValueSlice(identifiers) + ap.AccessPoints = aws.ToStringSlice(identifiers) return ap.AccessPoints, nil } func (ap *S3AccessPoint) Nuke(identifiers []string) error { - if err := ap.nukeAll(awsgo.StringSlice(identifiers)); err != nil { + if err := ap.nukeAll(aws.StringSlice(identifiers)); err != nil { return errors.WithStackTrace(err) } diff --git a/aws/resources/s3_multi_region_access_point.go b/aws/resources/s3_multi_region_access_point.go index 60a50270..1ccbeac9 100644 --- a/aws/resources/s3_multi_region_access_point.go +++ b/aws/resources/s3_multi_region_access_point.go @@ -4,8 +4,9 @@ import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/s3control" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" + "github.com/aws/aws-sdk-go-v2/service/s3control/types" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/logging" "github.com/gruntwork-io/cloud-nuke/report" @@ -34,26 +35,27 @@ func (ap *S3MultiRegionAccessPoint) getAll(c context.Context, configObj config.C ap.AccountID = aws.String(accountID) var accessPoints []*string - err := ap.Client.ListMultiRegionAccessPointsPagesWithContext( - ap.Context, - &s3control.ListMultiRegionAccessPointsInput{ - AccountId: ap.AccountID, - }, func(lapo *s3control.ListMultiRegionAccessPointsOutput, lastPage bool) bool { - for _, accessPoint := range lapo.AccessPoints { - if configObj.S3MultiRegionAccessPoint.ShouldInclude(config.ResourceValue{ - Name: accessPoint.Name, - Time: accessPoint.CreatedAt, - }) { - accessPoints = append(accessPoints, accessPoint.Name) - } - } - return !lastPage - }) + paginator := s3control.NewListMultiRegionAccessPointsPaginator(ap.Client, &s3control.ListMultiRegionAccessPointsInput{ + AccountId: ap.AccountID, + }) + + for paginator.HasMorePages() { + page, err := paginator.NextPage(ap.Context) + if err != nil { + return nil, errors.WithStackTrace(err) + } - if err != nil { - logging.Errorf("[FAILED] Multi region access point listing - %v", err) + for _, accessPoint := range page.AccessPoints { + if configObj.S3MultiRegionAccessPoint.ShouldInclude(config.ResourceValue{ + Name: accessPoint.Name, + Time: accessPoint.CreatedAt, + }) { + accessPoints = append(accessPoints, accessPoint.Name) + } + } } - return accessPoints, errors.WithStackTrace(err) + + return accessPoints, nil } func (ap *S3MultiRegionAccessPoint) nukeAll(identifiers []*string) error { @@ -67,18 +69,18 @@ func (ap *S3MultiRegionAccessPoint) nukeAll(identifiers []*string) error { for _, id := range identifiers { - _, err := ap.Client.DeleteMultiRegionAccessPointWithContext( + _, err := ap.Client.DeleteMultiRegionAccessPoint( ap.Context, &s3control.DeleteMultiRegionAccessPointInput{ AccountId: ap.AccountID, - Details: &s3control.DeleteMultiRegionAccessPointInput_{ + Details: &types.DeleteMultiRegionAccessPointInput{ Name: id, }, }) // Record status of this resource e := report.Entry{ - Identifier: aws.StringValue(id), + Identifier: aws.ToString(id), ResourceType: "S3 Multi Region Access point", Error: err, } @@ -88,7 +90,7 @@ func (ap *S3MultiRegionAccessPoint) nukeAll(identifiers []*string) error { logging.Debugf("[Failed] %s", err) } else { deleted = append(deleted, id) - logging.Debugf("Deleted S3 Multi region access point: %s", aws.StringValue(id)) + logging.Debugf("Deleted S3 Multi region access point: %s", aws.ToString(id)) } } diff --git a/aws/resources/s3_multi_region_access_point_test.go b/aws/resources/s3_multi_region_access_point_test.go index fac3bc90..62b6f409 100644 --- a/aws/resources/s3_multi_region_access_point_test.go +++ b/aws/resources/s3_multi_region_access_point_test.go @@ -6,27 +6,24 @@ import ( "testing" "time" - "github.com/aws/aws-sdk-go/aws" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" + "github.com/aws/aws-sdk-go-v2/service/s3control/types" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/util" "github.com/stretchr/testify/require" ) type mockS3MultiRegionAccessPoint struct { - s3controliface.S3ControlAPI + S3ControlMultiRegionAPI ListMultiRegionAccessPointsOutput s3control.ListMultiRegionAccessPointsOutput DeleteMultiRegionAccessPointOutput s3control.DeleteMultiRegionAccessPointOutput } -func (m mockS3MultiRegionAccessPoint) ListMultiRegionAccessPointsPagesWithContext(_ awsgo.Context, _ *s3control.ListMultiRegionAccessPointsInput, fn func(*s3control.ListMultiRegionAccessPointsOutput, bool) bool, _ ...request.Option) error { - fn(&m.ListMultiRegionAccessPointsOutput, true) - return nil +func (m mockS3MultiRegionAccessPoint) ListMultiRegionAccessPoints(ctx context.Context, params *s3control.ListMultiRegionAccessPointsInput, optFns ...func(*s3control.Options)) (*s3control.ListMultiRegionAccessPointsOutput, error) { + return &m.ListMultiRegionAccessPointsOutput, nil } -func (m mockS3MultiRegionAccessPoint) DeleteMultiRegionAccessPointWithContext(_ awsgo.Context, _ *s3control.DeleteMultiRegionAccessPointInput, _ ...request.Option) (*s3control.DeleteMultiRegionAccessPointOutput, error) { +func (m mockS3MultiRegionAccessPoint) DeleteMultiRegionAccessPoint(ctx context.Context, params *s3control.DeleteMultiRegionAccessPointInput, optFns ...func(*s3control.Options)) (*s3control.DeleteMultiRegionAccessPointOutput, error) { return &m.DeleteMultiRegionAccessPointOutput, nil } @@ -46,7 +43,7 @@ func TestS3MultiRegionAccessPoint_GetAll(t *testing.T) { Region: "us-west-2", Client: mockS3MultiRegionAccessPoint{ ListMultiRegionAccessPointsOutput: s3control.ListMultiRegionAccessPointsOutput{ - AccessPoints: []*s3control.MultiRegionAccessPointReport{ + AccessPoints: []types.MultiRegionAccessPointReport{ { Name: aws.String(testName01), CreatedAt: aws.Time(now), @@ -93,7 +90,7 @@ func TestS3MultiRegionAccessPoint_GetAll(t *testing.T) { S3MultiRegionAccessPoint: tc.configObj, }) require.NoError(t, err) - require.Equal(t, tc.expected, aws.StringValueSlice(names)) + require.Equal(t, tc.expected, aws.ToStringSlice(names)) }) } } diff --git a/aws/resources/s3_multi_region_access_point_types.go b/aws/resources/s3_multi_region_access_point_types.go index 8dae7700..e5256ea8 100644 --- a/aws/resources/s3_multi_region_access_point_types.go +++ b/aws/resources/s3_multi_region_access_point_types.go @@ -3,26 +3,30 @@ package resources import ( "context" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/go-commons/errors" ) +type S3ControlMultiRegionAPI interface { + ListMultiRegionAccessPoints(ctx context.Context, params *s3control.ListMultiRegionAccessPointsInput, optFns ...func(*s3control.Options)) (*s3control.ListMultiRegionAccessPointsOutput, error) + DeleteMultiRegionAccessPoint(ctx context.Context, params *s3control.DeleteMultiRegionAccessPointInput, optFns ...func(*s3control.Options)) (*s3control.DeleteMultiRegionAccessPointOutput, error) +} type S3MultiRegionAccessPoint struct { BaseAwsResource - Client s3controliface.S3ControlAPI + Client S3ControlMultiRegionAPI Region string AccessPoints []string AccountID *string } -func (ap *S3MultiRegionAccessPoint) Init(session *session.Session) { - ap.Client = s3control.New(session) +func (ap *S3MultiRegionAccessPoint) InitV2(cfg aws.Config) { + ap.Client = s3control.NewFromConfig(cfg) } +func (ap *S3MultiRegionAccessPoint) IsUsingV2() bool { return true } + func (ap *S3MultiRegionAccessPoint) ResourceName() string { return "s3-mrap" } @@ -45,12 +49,12 @@ func (ap *S3MultiRegionAccessPoint) GetAndSetIdentifiers(c context.Context, conf return nil, err } - ap.AccessPoints = awsgo.StringValueSlice(identifiers) + ap.AccessPoints = aws.ToStringSlice(identifiers) return ap.AccessPoints, nil } func (ap *S3MultiRegionAccessPoint) Nuke(identifiers []string) error { - if err := ap.nukeAll(awsgo.StringSlice(identifiers)); err != nil { + if err := ap.nukeAll(aws.StringSlice(identifiers)); err != nil { return errors.WithStackTrace(err) } diff --git a/aws/resources/s3_object_lambda_access_point.go b/aws/resources/s3_object_lambda_access_point.go index 8762038e..7a77aae2 100644 --- a/aws/resources/s3_object_lambda_access_point.go +++ b/aws/resources/s3_object_lambda_access_point.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/s3control" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/logging" "github.com/gruntwork-io/cloud-nuke/report" @@ -24,21 +24,26 @@ func (ap *S3ObjectLambdaAccessPoint) getAll(c context.Context, configObj config. ap.AccountID = aws.String(accountID) var accessPoints []*string - err := ap.Client.ListAccessPointsForObjectLambdaPagesWithContext( - ap.Context, - &s3control.ListAccessPointsForObjectLambdaInput{ - AccountId: ap.AccountID, - }, func(lapo *s3control.ListAccessPointsForObjectLambdaOutput, lastPage bool) bool { - for _, accessPoint := range lapo.ObjectLambdaAccessPointList { - if configObj.S3ObjectLambdaAccessPoint.ShouldInclude(config.ResourceValue{ - Name: accessPoint.Name, - }) { - accessPoints = append(accessPoints, accessPoint.Name) - } + paginator := s3control.NewListAccessPointsForObjectLambdaPaginator(ap.Client, &s3control.ListAccessPointsForObjectLambdaInput{ + AccountId: ap.AccountID, + }) + + for paginator.HasMorePages() { + page, err := paginator.NextPage(ap.Context) + if err != nil { + return nil, errors.WithStackTrace(err) + } + + for _, accessPoint := range page.ObjectLambdaAccessPointList { + if configObj.S3ObjectLambdaAccessPoint.ShouldInclude(config.ResourceValue{ + Name: accessPoint.Name, + }) { + accessPoints = append(accessPoints, accessPoint.Name) } - return !lastPage - }) - return accessPoints, errors.WithStackTrace(err) + } + } + + return accessPoints, nil } func (ap *S3ObjectLambdaAccessPoint) nukeAll(identifiers []*string) error { @@ -52,7 +57,7 @@ func (ap *S3ObjectLambdaAccessPoint) nukeAll(identifiers []*string) error { for _, id := range identifiers { - _, err := ap.Client.DeleteAccessPointForObjectLambdaWithContext( + _, err := ap.Client.DeleteAccessPointForObjectLambda( ap.Context, &s3control.DeleteAccessPointForObjectLambdaInput{ AccountId: ap.AccountID, @@ -61,7 +66,7 @@ func (ap *S3ObjectLambdaAccessPoint) nukeAll(identifiers []*string) error { // Record status of this resource e := report.Entry{ - Identifier: aws.StringValue(id), + Identifier: aws.ToString(id), ResourceType: "S3 Object Lambda Access point", Error: err, } @@ -71,7 +76,7 @@ func (ap *S3ObjectLambdaAccessPoint) nukeAll(identifiers []*string) error { logging.Debugf("[Failed] %s", err) } else { deleted = append(deleted, id) - logging.Debugf("Deleted S3 object lambda access point: %s", aws.StringValue(id)) + logging.Debugf("Deleted S3 object lambda access point: %s", aws.ToString(id)) } } diff --git a/aws/resources/s3_object_lambda_access_point_test.go b/aws/resources/s3_object_lambda_access_point_test.go index fcb9bb6b..a87ef7a5 100644 --- a/aws/resources/s3_object_lambda_access_point_test.go +++ b/aws/resources/s3_object_lambda_access_point_test.go @@ -5,27 +5,24 @@ import ( "regexp" "testing" - "github.com/aws/aws-sdk-go/aws" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" + "github.com/aws/aws-sdk-go-v2/service/s3control/types" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/util" "github.com/stretchr/testify/require" ) type mocks3ObjectLambdaAccessPoint struct { - s3controliface.S3ControlAPI + S3ControlAPI ListAccessPointsForObjectLambdaOutput s3control.ListAccessPointsForObjectLambdaOutput DeleteAccessPointForObjectLambdaOutput s3control.DeleteAccessPointForObjectLambdaOutput } -func (m mocks3ObjectLambdaAccessPoint) ListAccessPointsForObjectLambdaPagesWithContext(_ awsgo.Context, _ *s3control.ListAccessPointsForObjectLambdaInput, fn func(*s3control.ListAccessPointsForObjectLambdaOutput, bool) bool, _ ...request.Option) error { - fn(&m.ListAccessPointsForObjectLambdaOutput, true) - return nil +func (m mocks3ObjectLambdaAccessPoint) ListAccessPointsForObjectLambda(context.Context, *s3control.ListAccessPointsForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.ListAccessPointsForObjectLambdaOutput, error) { + return &m.ListAccessPointsForObjectLambdaOutput, nil } -func (m mocks3ObjectLambdaAccessPoint) DeleteAccessPointForObjectLambdaWithContext(_ awsgo.Context, _ *s3control.DeleteAccessPointForObjectLambdaInput, _ ...request.Option) (*s3control.DeleteAccessPointForObjectLambdaOutput, error) { +func (m mocks3ObjectLambdaAccessPoint) DeleteAccessPointForObjectLambda(context.Context, *s3control.DeleteAccessPointForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.DeleteAccessPointForObjectLambdaOutput, error) { return &m.DeleteAccessPointForObjectLambdaOutput, nil } @@ -42,7 +39,7 @@ func TestS3ObjectLambdaAccessPoint_GetAll(t *testing.T) { ap := S3ObjectLambdaAccessPoint{ Client: mocks3ObjectLambdaAccessPoint{ ListAccessPointsForObjectLambdaOutput: s3control.ListAccessPointsForObjectLambdaOutput{ - ObjectLambdaAccessPointList: []*s3control.ObjectLambdaAccessPoint{ + ObjectLambdaAccessPointList: []types.ObjectLambdaAccessPoint{ { Name: aws.String(testName01), }, @@ -80,7 +77,7 @@ func TestS3ObjectLambdaAccessPoint_GetAll(t *testing.T) { S3ObjectLambdaAccessPoint: tc.configObj, }) require.NoError(t, err) - require.Equal(t, tc.expected, aws.StringValueSlice(names)) + require.Equal(t, tc.expected, aws.ToStringSlice(names)) }) } } diff --git a/aws/resources/s3_object_lambda_access_point_types.go b/aws/resources/s3_object_lambda_access_point_types.go index cdba2743..4a15aa01 100644 --- a/aws/resources/s3_object_lambda_access_point_types.go +++ b/aws/resources/s3_object_lambda_access_point_types.go @@ -3,26 +3,30 @@ package resources import ( "context" - awsgo "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3control" - "github.com/aws/aws-sdk-go/service/s3control/s3controliface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/go-commons/errors" ) +type S3ControlAPI interface { + ListAccessPointsForObjectLambda(context.Context, *s3control.ListAccessPointsForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.ListAccessPointsForObjectLambdaOutput, error) + DeleteAccessPointForObjectLambda(context.Context, *s3control.DeleteAccessPointForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.DeleteAccessPointForObjectLambdaOutput, error) +} type S3ObjectLambdaAccessPoint struct { BaseAwsResource - Client s3controliface.S3ControlAPI + Client S3ControlAPI Region string AccessPoints []string AccountID *string } -func (ap *S3ObjectLambdaAccessPoint) Init(session *session.Session) { - ap.Client = s3control.New(session) +func (ap *S3ObjectLambdaAccessPoint) InitV2(cfg aws.Config) { + ap.Client = s3control.NewFromConfig(cfg) } +func (ap *S3ObjectLambdaAccessPoint) IsUsingV2() bool { return true } + func (ap *S3ObjectLambdaAccessPoint) ResourceName() string { return "s3-olap" } @@ -45,12 +49,12 @@ func (ap *S3ObjectLambdaAccessPoint) GetAndSetIdentifiers(c context.Context, con return nil, err } - ap.AccessPoints = awsgo.StringValueSlice(identifiers) + ap.AccessPoints = aws.ToStringSlice(identifiers) return ap.AccessPoints, nil } func (ap *S3ObjectLambdaAccessPoint) Nuke(identifiers []string) error { - if err := ap.nukeAll(awsgo.StringSlice(identifiers)); err != nil { + if err := ap.nukeAll(aws.StringSlice(identifiers)); err != nil { return errors.WithStackTrace(err) } diff --git a/aws/resources/s3_test.go b/aws/resources/s3_test.go index 67704beb..b7b56850 100644 --- a/aws/resources/s3_test.go +++ b/aws/resources/s3_test.go @@ -6,62 +6,66 @@ import ( "testing" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-sdk-go/service/s3/s3iface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/gruntwork-io/cloud-nuke/config" "github.com/stretchr/testify/require" ) type mockedS3Buckets struct { - s3iface.S3API - ListBucketsOutput s3.ListBucketsOutput - GetBucketLocationOutput s3.GetBucketLocationOutput - GetBucketTaggingOutput s3.GetBucketTaggingOutput - GetBucketVersioningOutput s3.GetBucketVersioningOutput - ListObjectVersionsPagesOutput s3.ListObjectVersionsOutput - DeleteObjectsOutput s3.DeleteObjectsOutput - DeleteBucketPolicyOutput s3.DeleteBucketPolicyOutput - DeleteBucketOutput s3.DeleteBucketOutput + S3API + ListBucketsOutput s3.ListBucketsOutput + GetBucketLocationOutput s3.GetBucketLocationOutput + GetBucketTaggingOutput s3.GetBucketTaggingOutput + GetBucketVersioningOutput s3.GetBucketVersioningOutput + ListObjectVersionsOutput s3.ListObjectVersionsOutput + DeleteObjectsOutput s3.DeleteObjectsOutput + DeleteBucketPolicyOutput s3.DeleteBucketPolicyOutput + DeleteBucketOutput s3.DeleteBucketOutput + ListObjectsV2Output s3.ListObjectsV2Output + HeadBucketOutput s3.HeadBucketOutput } -func (m mockedS3Buckets) ListBucketsWithContext(aws.Context, *s3.ListBucketsInput, ...request.Option) (*s3.ListBucketsOutput, error) { +func (m mockedS3Buckets) ListBuckets(context.Context, *s3.ListBucketsInput, ...func(*s3.Options)) (*s3.ListBucketsOutput, error) { return &m.ListBucketsOutput, nil } -func (m mockedS3Buckets) GetBucketLocationWithContext(aws.Context, *s3.GetBucketLocationInput, ...request.Option) (*s3.GetBucketLocationOutput, error) { +func (m mockedS3Buckets) GetBucketLocation(context.Context, *s3.GetBucketLocationInput, ...func(*s3.Options)) (*s3.GetBucketLocationOutput, error) { return &m.GetBucketLocationOutput, nil } -func (m mockedS3Buckets) GetBucketTaggingWithContext(aws.Context, *s3.GetBucketTaggingInput, ...request.Option) (*s3.GetBucketTaggingOutput, error) { +func (m mockedS3Buckets) GetBucketTagging(context.Context, *s3.GetBucketTaggingInput, ...func(*s3.Options)) (*s3.GetBucketTaggingOutput, error) { return &m.GetBucketTaggingOutput, nil } -func (m mockedS3Buckets) WaitUntilBucketNotExistsWithContext(aws.Context, *s3.HeadBucketInput, ...request.WaiterOption) error { - return nil -} - -func (m mockedS3Buckets) GetBucketVersioningWithContext(aws.Context, *s3.GetBucketVersioningInput, ...request.Option) (*s3.GetBucketVersioningOutput, error) { +func (m mockedS3Buckets) GetBucketVersioning(context.Context, *s3.GetBucketVersioningInput, ...func(*s3.Options)) (*s3.GetBucketVersioningOutput, error) { return &m.GetBucketVersioningOutput, nil } -func (m mockedS3Buckets) ListObjectVersionsPagesWithContext(_ aws.Context, _ *s3.ListObjectVersionsInput, fn func(*s3.ListObjectVersionsOutput, bool) bool, _ ...request.Option) error { - fn(&m.ListObjectVersionsPagesOutput, true) - return nil -} - -func (m mockedS3Buckets) DeleteObjectsWithContext(aws.Context, *s3.DeleteObjectsInput, ...request.Option) (*s3.DeleteObjectsOutput, error) { +func (m mockedS3Buckets) DeleteObjects(context.Context, *s3.DeleteObjectsInput, ...func(*s3.Options)) (*s3.DeleteObjectsOutput, error) { return &m.DeleteObjectsOutput, nil } -func (m mockedS3Buckets) DeleteBucketPolicyWithContext(aws.Context, *s3.DeleteBucketPolicyInput, ...request.Option) (*s3.DeleteBucketPolicyOutput, error) { +func (m mockedS3Buckets) DeleteBucketPolicy(context.Context, *s3.DeleteBucketPolicyInput, ...func(*s3.Options)) (*s3.DeleteBucketPolicyOutput, error) { return &m.DeleteBucketPolicyOutput, nil } -func (m mockedS3Buckets) DeleteBucketWithContext(aws.Context, *s3.DeleteBucketInput, ...request.Option) (*s3.DeleteBucketOutput, error) { +func (m mockedS3Buckets) DeleteBucket(ctx context.Context, params *s3.DeleteBucketInput, optFns ...func(*s3.Options)) (*s3.DeleteBucketOutput, error) { return &m.DeleteBucketOutput, nil } +func (m mockedS3Buckets) ListObjectVersions(ctx context.Context, params *s3.ListObjectVersionsInput, optFns ...func(*s3.Options)) (*s3.ListObjectVersionsOutput, error) { + return &m.ListObjectVersionsOutput, nil +} +func (m mockedS3Buckets) ListObjectsV2(ctx context.Context, params *s3.ListObjectsV2Input, optFns ...func(*s3.Options)) (*s3.ListObjectsV2Output, error) { + return &m.ListObjectsV2Output, nil +} +func (m mockedS3Buckets) HeadBucket(ctx context.Context, params *s3.HeadBucketInput, optFns ...func(*s3.Options)) (*s3.HeadBucketOutput, error) { + return &m.HeadBucketOutput, &types.NotFound{} +} +func (m mockedS3Buckets) WaitForOutput(ctx context.Context, params *s3.HeadBucketInput, maxWaitDur time.Duration, optFns ...func(*s3.BucketNotExistsWaiterOptions)) (*s3.HeadBucketOutput, error) { + return nil, nil +} func TestS3Bucket_GetAll(t *testing.T) { @@ -73,7 +77,7 @@ func TestS3Bucket_GetAll(t *testing.T) { sb := S3Buckets{ Client: mockedS3Buckets{ ListBucketsOutput: s3.ListBucketsOutput{ - Buckets: []*s3.Bucket{ + Buckets: []types.Bucket{ { Name: aws.String(testName1), CreationDate: aws.Time(now), @@ -85,10 +89,10 @@ func TestS3Bucket_GetAll(t *testing.T) { }, }, GetBucketLocationOutput: s3.GetBucketLocationOutput{ - LocationConstraint: aws.String("us-east-1"), + LocationConstraint: "us-east-1", }, GetBucketTaggingOutput: s3.GetBucketTaggingOutput{ - TagSet: []*s3.Tag{}, + TagSet: []types.Tag{}, }, }, Region: "us-east-1", @@ -141,16 +145,16 @@ func TestS3Bucket_NukeAll(t *testing.T) { sb := S3Buckets{ Client: mockedS3Buckets{ GetBucketVersioningOutput: s3.GetBucketVersioningOutput{ - Status: aws.String("Enabled"), + Status: ("Enabled"), }, - ListObjectVersionsPagesOutput: s3.ListObjectVersionsOutput{ - Versions: []*s3.ObjectVersion{ + ListObjectVersionsOutput: s3.ListObjectVersionsOutput{ + Versions: []types.ObjectVersion{ { Key: aws.String("test-key"), VersionId: aws.String("test-version-id"), }, }, - DeleteMarkers: []*s3.DeleteMarkerEntry{ + DeleteMarkers: []types.DeleteMarkerEntry{ { Key: aws.String("test-key"), VersionId: aws.String("test-version-id"), @@ -160,8 +164,10 @@ func TestS3Bucket_NukeAll(t *testing.T) { DeleteObjectsOutput: s3.DeleteObjectsOutput{}, DeleteBucketPolicyOutput: s3.DeleteBucketPolicyOutput{}, DeleteBucketOutput: s3.DeleteBucketOutput{}, + HeadBucketOutput: s3.HeadBucketOutput{}, }, } + sb.Context = context.Background() count, err := sb.nukeAll([]*string{aws.String("test-bucket")}) require.NoError(t, err) diff --git a/aws/resources/s3_types.go b/aws/resources/s3_types.go index 2734302a..749ec711 100644 --- a/aws/resources/s3_types.go +++ b/aws/resources/s3_types.go @@ -2,28 +2,45 @@ package resources import ( "context" + "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-sdk-go/service/s3/s3iface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/gruntwork-io/cloud-nuke/config" "github.com/gruntwork-io/cloud-nuke/logging" "github.com/gruntwork-io/go-commons/errors" ) +const maxRetries = 3 +const waitDuration = 5 * time.Second + +type S3API interface { + GetBucketLocation(ctx context.Context, params *s3.GetBucketLocationInput, optFns ...func(*s3.Options)) (*s3.GetBucketLocationOutput, error) + GetBucketTagging(ctx context.Context, params *s3.GetBucketTaggingInput, optFns ...func(*s3.Options)) (*s3.GetBucketTaggingOutput, error) + ListBuckets(ctx context.Context, params *s3.ListBucketsInput, optFns ...func(*s3.Options)) (*s3.ListBucketsOutput, error) + ListObjectVersions(ctx context.Context, params *s3.ListObjectVersionsInput, optFns ...func(*s3.Options)) (*s3.ListObjectVersionsOutput, error) + DeleteObjects(ctx context.Context, params *s3.DeleteObjectsInput, optFns ...func(*s3.Options)) (*s3.DeleteObjectsOutput, error) + DeleteBucket(ctx context.Context, params *s3.DeleteBucketInput, optFns ...func(*s3.Options)) (*s3.DeleteBucketOutput, error) + DeleteBucketPolicy(ctx context.Context, params *s3.DeleteBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.DeleteBucketPolicyOutput, error) + + ListObjectsV2(ctx context.Context, params *s3.ListObjectsV2Input, optFns ...func(*s3.Options)) (*s3.ListObjectsV2Output, error) + HeadBucket(ctx context.Context, params *s3.HeadBucketInput, optFns ...func(*s3.Options)) (*s3.HeadBucketOutput, error) +} + // S3Buckets - represents all S3 Buckets type S3Buckets struct { BaseAwsResource - Client s3iface.S3API + Client S3API Region string Names []string } -func (bucket *S3Buckets) Init(session *session.Session) { - bucket.Client = s3.New(session) +func (bucket *S3Buckets) InitV2(cfg aws.Config) { + bucket.Client = s3.NewFromConfig(cfg) } +func (bucket *S3Buckets) IsUsingV2() bool { return true } + // ResourceName - the simple name of the aws resource func (bucket *S3Buckets) ResourceName() string { return "s3" @@ -63,7 +80,7 @@ func (bucket *S3Buckets) GetAndSetIdentifiers(c context.Context, configObj confi return nil, err } - bucket.Names = aws.StringValueSlice(identifiers) + bucket.Names = aws.ToStringSlice(identifiers) return bucket.Names, nil } diff --git a/go.mod b/go.mod index 9dafc1aa..a5c8fe9e 100644 --- a/go.mod +++ b/go.mod @@ -5,49 +5,49 @@ go 1.21 require ( github.com/aws/aws-sdk-go v1.49.13 github.com/aws/aws-sdk-go-v2 v1.32.4 - github.com/aws/aws-sdk-go-v2/config v1.28.4 - github.com/aws/aws-sdk-go-v2/credentials v1.17.45 - github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.0 - github.com/aws/aws-sdk-go-v2/service/acm v1.30.5 - github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.6 - github.com/aws/aws-sdk-go-v2/service/amp v1.30.2 - github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.5 - github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.5 - github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.5 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.48.0 - github.com/aws/aws-sdk-go-v2/service/backup v1.39.6 - github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.45.0 - github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.0 - github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.43.2 - github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.5 - github.com/aws/aws-sdk-go-v2/service/configservice v1.50.5 - github.com/aws/aws-sdk-go-v2/service/datasync v1.43.3 - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.0 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.189.0 + github.com/aws/aws-sdk-go-v2/config v1.27.24 + github.com/aws/aws-sdk-go-v2/credentials v1.17.24 + github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2 + github.com/aws/aws-sdk-go-v2/service/acm v1.30.2 + github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3 + github.com/aws/aws-sdk-go-v2/service/amp v1.27.1 + github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2 + github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2 + github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16 + github.com/aws/aws-sdk-go-v2/service/backup v1.39.3 + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2 + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2 + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0 + github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2 + github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2 + github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0 github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5 github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2 github.com/aws/aws-sdk-go-v2/service/efs v1.33.5 - github.com/aws/aws-sdk-go-v2/service/eks v1.52.0 + github.com/aws/aws-sdk-go-v2/service/eks v1.51.3 github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2 github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.4 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1 - github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.5 + github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7 github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0 - github.com/aws/aws-sdk-go-v2/service/grafana v1.26.5 github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1 - github.com/aws/aws-sdk-go-v2/service/iam v1.38.0 + github.com/aws/aws-sdk-go-v2/service/iam v1.37.4 github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5 github.com/aws/aws-sdk-go-v2/service/kms v1.37.5 github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0 github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5 - github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.0 - github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.5 + github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 + github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0 + github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7 github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6 github.com/aws/aws-sdk-go-v2/service/ses v1.28.4 - github.com/aws/aws-sdk-go-v2/service/sns v1.33.4 - github.com/aws/aws-sdk-go-v2/service/sqs v1.37.0 - github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.6 + github.com/aws/aws-sdk-go-v2/service/sns v1.32.3 + github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3 + github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5 github.com/aws/smithy-go v1.22.0 github.com/charmbracelet/lipgloss v0.6.0 github.com/go-errors/errors v1.4.2 @@ -65,17 +65,19 @@ require ( atomicgo.dev/cursor v0.1.1 // indirect atomicgo.dev/keyboard v0.2.8 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 3d4da690..49145dd6 100644 --- a/go.sum +++ b/go.sum @@ -15,66 +15,69 @@ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYew github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= github.com/aws/aws-sdk-go v1.49.13 h1:f4mGztsgnx2dR9r8FQYa9YW/RsKb+N7bgef4UGrOW1Y= github.com/aws/aws-sdk-go v1.49.13/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.16.16/go.mod h1:SwiyXi/1zTUZ6KIAmLK5V5ll8SiURNUYOqTerZPaF9k= github.com/aws/aws-sdk-go-v2 v1.32.4 h1:S13INUiTxgrPueTmrm5DZ+MiAo99zYzHEFh1UNkOxNE= github.com/aws/aws-sdk-go-v2 v1.32.4/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA= -github.com/aws/aws-sdk-go-v2/config v1.28.4 h1:qgD0MKmkIzZR2DrAjWJcI9UkndjR+8f6sjUQvXh0mb0= -github.com/aws/aws-sdk-go-v2/config v1.28.4/go.mod h1:LgnWnNzHZw4MLplSyEGia0WgJ/kCGD86zGCjvNpehJs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.45 h1:DUgm5lFso57E7150RBgu1JpVQoF8fAPretiDStIuVjg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.45/go.mod h1:dnBpENcPC1ekZrGpSWspX+ZRGzhkvqngT2Qp5xBR1dY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 h1:woXadbf0c7enQ2UGCi8gW/WuKmE0xIzxBF/eD94jMKQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19/go.mod h1:zminj5ucw7w0r65bP6nhyOd3xL6veAUMc3ElGMoLVb4= +github.com/aws/aws-sdk-go-v2/config v1.27.24 h1:NM9XicZ5o1CBU/MZaHwFtimRpWx9ohAUAqkG6AqSqPo= +github.com/aws/aws-sdk-go-v2/config v1.27.24/go.mod h1:aXzi6QJTuQRVVusAO8/NxpdTeTyr/wRcybdDtfUwJSs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.24 h1:YclAsrnb1/GTQNt2nzv+756Iw4mF8AOzcDfweWwwm/M= +github.com/aws/aws-sdk-go-v2/credentials v1.17.24/go.mod h1:Hld7tmnAkoBQdTMNYZGzztzKRdA4fCdn9L83LOoigac= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 h1:Aznqksmd6Rfv2HQN9cpqIV/lQRMaIpJkLLaJ1ZI76no= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9/go.mod h1:WQr3MY7AxGNxaqAtsDWn+fBxmd4XvLkzeqQ8P1VM0/w= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23/go.mod h1:2DFxAQ9pfIRy0imBCJv+vZ2X6RKxves6fbnEuSry6b4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 h1:A2w6m6Tmr+BNXjDsr7M90zkWjsu4JXHwrzPg235STs4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23/go.mod h1:35EVp9wyeANdujZruvHiQUAo9E3vbhnIO1mTCAxMlY0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17/go.mod h1:pRwaTYCJemADaqCbUAxltMoHKata7hmB5PjEXeu0kfg= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 h1:pgYW9FCabt2M25MoHYCfMrVY2ghiiBKYWUVXfwZs+sU= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23/go.mod h1:c48kLgzO19wAu3CPkDWC28JbaJ+hfQlsdl7I2+oqIbk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 h1:1SZBDiRzzs3sNhOMVApyWPduWYGAX0imGy06XiBnCAM= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23/go.mod h1:i9TkxgbZmHVh2S0La6CAXtnyFhlCX/pJ0JsOvBAS6Mk= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.0 h1:PLvB94nEvc52eRL0LH4MxU5wS811StcTcwuf77WcRgU= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.0/go.mod h1:7Om7kPFVbASCKvJaFkNN8htYhewIN6Xg2jLFvCv0FrI= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.5 h1:xT0pAxIVWjR9bFw2xrGpL1lt6eXmXaJ4nxXCYBegs00= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.5/go.mod h1:Fo90MZbAao/owZjAKO1dhazUlf2EFovI7bxOmoUFqoY= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.6 h1:vdQnPPcXUlVn+RK3USF42E1d0DNWksALKYClSSZ1dZs= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.6/go.mod h1:IzKiMKtWkmw5v2YT1/Z9X+R1yJB2qQpkDYYk6oyRCBs= -github.com/aws/aws-sdk-go-v2/service/amp v1.30.2 h1:LaxpHhkyOipkHAVXqDuYeZKmkRWRPFEHvJc5Eyrx3do= -github.com/aws/aws-sdk-go-v2/service/amp v1.30.2/go.mod h1:otnmAIHxbeGx6suqsEixCTh8WGYAZZJH8eLaRgdC9P4= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.5 h1:k2OEUneF50AlKWKXS+1QCpyv9RSf16+pFseg62mmF4Y= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.5/go.mod h1:A9Kc9UFVbe9r6mjVaKZ8Lf4SoY6hj8oZWH9hED+ld6Y= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.5 h1:OF0RdzoygZgFZlYayS575Ynu0H/kJ/cZ1fOwnFrPq4g= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.5/go.mod h1:emC2s+EMBM7GmydOC9dlgoJhqxdAicKJwSFhVggoc7k= -github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.5 h1:vPv+oYLZf/nTynSL0o03lvroPik0xHTJIzmTxw5KC+4= -github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.5/go.mod h1:IVcgd5pTOh3T2B7iTrWBk2pfYWXL8+I2tgHoziDEtoA= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.48.0 h1:jqGxMEnsD0NHc2Id2H5TB0Fl0hBPJKofhtO6ZSuv18U= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.48.0/go.mod h1:DkO2AXbNiahaTv8J/LAwx3ddx/I1Dzxx+YpVB9ONUEU= -github.com/aws/aws-sdk-go-v2/service/backup v1.39.6 h1:9pJEHqk5XAm+H+mAfj0pld1Xn0Fx2N5ql6hlz+GoEyQ= -github.com/aws/aws-sdk-go-v2/service/backup v1.39.6/go.mod h1:ojOfXYWv9GyPbT9Q4AA/UzSG0b7DhqDi+vvLARlE5oE= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.45.0 h1:QuOJQueXZjk+R89u9+uJiCK5c/v3x3RuI7Nx3oo6Y4Y= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.45.0/go.mod h1:dMy3o3W5gG5aOON5Y5EMMWeQDby9nFOeU7egskS4rrk= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.0 h1:r1sp92LSk4Gx8l0gScEjzSN+4iiImDvNayY9JYPNtNI= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.0/go.mod h1:fkETEwhdw2tOqu5m0Xa3wimV3PLDaiGqNrVZ3MJ7zOc= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.43.2 h1:QaFEWSbTr3n31uaRyMPX2wCuzUGIS+VYM1xv5+I2FRo= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.43.2/go.mod h1:dLKWdVHc4B1v+N6SLYkCUQjE4urPT4abG98sHbR5jnw= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.5 h1:o047pZS9LNdXDPA2Kzw44l7Zk5sn/cghuoIYRhIGFCc= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.5/go.mod h1:BcnpinS3IUvN6GuAU65hSne1d4ZD333EC95KRqdDHhU= -github.com/aws/aws-sdk-go-v2/service/configservice v1.50.5 h1:u7UiUqnCDH7qSLKBf4UYqa6yZwo1EZtDJRvgOquQHVY= -github.com/aws/aws-sdk-go-v2/service/configservice v1.50.5/go.mod h1:BaHMRvvaiB0zR500n0jvC2Die+bfaXRLUWR7mo5f6vQ= -github.com/aws/aws-sdk-go-v2/service/datasync v1.43.3 h1:z2UnsYWCgTxZCZ2NvokLKfJcNST3xAQ8bmIO+usueTA= -github.com/aws/aws-sdk-go-v2/service/datasync v1.43.3/go.mod h1:qdRLt3qUPw7lbIyF9YwNotDqkK18LYE1ANDXdsZ2gwk= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.0 h1:qgDx1ChCsz5tSxok9hxWES30bt4koYM1Xub4ONuNYDU= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.0/go.mod h1:P+1rrWglInpWvnBpN0pH8jIIhkLkBaolkRVG4X9Kous= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.189.0 h1:eBriSsQa4r7aiKF2wv1EGYbK3X1VnjAYvdOlepBUi8s= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.189.0/go.mod h1:0A17IIeys01WfjDKehspGP+Cyo/YH/eNADIbEbRS9yM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 h1:yV+hCAHZZYJQcwAaszoBNwLbPItHvApxT0kVIw6jRgs= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22/go.mod h1:kbR1TL8llqB1eGnVbybcA4/wgScxdylOdyAd51yxPdw= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2 h1:QliYfQlWPSjTZpLjj8dXpV6jRuxMs9DFJ8W1Q+ZHMy8= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2/go.mod h1:9bHRHmhoqatAujuRir347sJaGEg6xoV0T3On4DNiJ10= +github.com/aws/aws-sdk-go-v2/service/acm v1.30.2 h1:LNCRNr5Ha6OUcnV4licXm/V9/fUyto85nQdQSscC09g= +github.com/aws/aws-sdk-go-v2/service/acm v1.30.2/go.mod h1:wRBzxEW2vsJMJAuV7yWEHGzo/KycX3t02mUVm6P8qHY= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3 h1:1jmLDJJ3StvfOopWDb/HY9mDSN2e7ZmReww4FTFvNnU= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3/go.mod h1:vWSvubH4BhEG1Vl6lLUVHZzRo7lgIM7/oJpBv6hN5i4= +github.com/aws/aws-sdk-go-v2/service/amp v1.27.1 h1:va9j7MGA8jBlQs9KujMlkSdnC26TuEJXv7ywnFjmTZ8= +github.com/aws/aws-sdk-go-v2/service/amp v1.27.1/go.mod h1:QhmX7qjomjuHJjCJbW+QRdaCBM42v1eAbWvBVFrT1Vw= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2 h1:XMdSPyg1ZJsoPIhmOiiSSA4qsk/G2ZGgDNYp3JQOwzk= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2/go.mod h1:dxPkh3eysV7j4JJqodTQijVKlIH0A3MhGJcQpJO1XL4= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2 h1:dLg685y7wusZZjJcZ+c0PhV8+wjTn1xzidvUkondtJM= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2/go.mod h1:wwTm1f7PQvrhoXmvPiqalPJ3tUfA5p4TaBs4pu3yOYs= +github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2 h1:468DHZ8HOxmnyc+FPHrA12mIiBLm/TAKrn2AQDLeiTw= +github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2/go.mod h1:MFQKKPZwSPqOvqDnf9dqobSKODpgqnnbhYYzE3QAgDM= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16 h1:cp30gVVAbZfeDod6UJGppMH2+p+/cRCG2AZ1TbT+LqA= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16/go.mod h1:hHTMeJt6CQwFdmS19RK1LsDscus8c25Ve8KiYRhsISg= +github.com/aws/aws-sdk-go-v2/service/backup v1.39.3 h1:mjYDN7CPl0CHrTBe36EKqAAGGXAKy8MXuNF+2qHkVdM= +github.com/aws/aws-sdk-go-v2/service/backup v1.39.3/go.mod h1:dc18UjjmJLlpcPGF6kluQcEpcddqlkdRTF8h5XKWSbc= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2 h1:0RsL6IlPHeAgl6RF0gGIlB4OKIw3rjfNrueOMj8qELg= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2/go.mod h1:0tPpvgvHOBqIh+j0s5GL+WzrAevuxVJOEQC2GF2CJvo= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2 h1:eMh+iBTF1CbpHMfiRvIaVm+rzrH1DOzuSFaR55O+bBo= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2/go.mod h1:/A4zNqF1+RS5RV+NNLKIzUX1KtK5SoWgf/OpiqrwmBo= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0 h1:LM/Ij1aUUeqRTEJPm5kLLcougWLKDSvZE3P4OGB5P8c= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0/go.mod h1:+/4cU1i0DF9gaA6GAZRIHVJWLZB7SSqJTCvkOMilNQE= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2 h1:sVFvCVQ5E3b2Wqh2gBnUfIinw7NdJ7h9d1kdGBV6LYE= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2/go.mod h1:Y2cnvaNeBNgLOvDSBi2zGy8ft9eR7qBKbxCLgR4O5yI= +github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2 h1:snWKvHjE6VO/YpqkcEgogVCrcyczOJx/hyyn2g05n1I= +github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2/go.mod h1:+J+fFPZtXSJoSYFKI0LSjNPZ4bN1kPErZOldY/Z7QHM= +github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2 h1:mNOyYZFjd3CakcvYIVCmqXFZ0pZJSGobtDx5UciBLOc= +github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2/go.mod h1:qWAvIKfkNqX/IN0sXwOiq73zzSCW/Ar96mHbfY/5D9c= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2 h1:kJqyYcGqhWFmXqjRrtFFD4Oc9FXiskhsll2xnlpe8Do= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2/go.mod h1:+t2Zc5VNOzhaWzpGE+cEYZADsgAAQT5v55AO+fhU+2s= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0 h1:SZnuDlml1uFv5ojh+QTxS+Yru89Hr3QYIUwWoY71frI= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0/go.mod h1:kYXaB4FzyhEJjvrJ84oPnMElLiEAjGxxUunVW2tBSng= github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5 h1:FMF/uaTcIdhvOwZXJfzpwanx2m4Dd6IcN4vDnAn7NAA= github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5/go.mod h1:xhf509Ba+rG5whtO7w46O0raVzu1Og3Aba80LSvHbbQ= github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2 h1:LpxJEwzfI5pen6CbNem8mwPAYBwjoQ/hLHVAqhAEFDo= github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2/go.mod h1:zL7o3zbIpWdzjbIZQbir4aGew5QmhiYVkvx6avQnLDc= github.com/aws/aws-sdk-go-v2/service/efs v1.33.5 h1:IfaLNIIT1m3q0M2HbP+MqKU/kWt9Cej2VLRFcuk0XGA= github.com/aws/aws-sdk-go-v2/service/efs v1.33.5/go.mod h1:yCeKfWPD0na87deTqOQ65g1CXytykczP7QZX4oNFhdo= -github.com/aws/aws-sdk-go-v2/service/eks v1.52.0 h1:zwtPtUh/eQ1poiEMV2KB7UxuL2dgH8wu7Zlr/kc7WQA= -github.com/aws/aws-sdk-go-v2/service/eks v1.52.0/go.mod h1:jF64KxW5772dIqCCBEDk+QSzhBiqI9xdpjoso3DpvwQ= +github.com/aws/aws-sdk-go-v2/service/eks v1.51.3 h1:tjBKHURgiMPJ3aqQjMoTIDin7GxX6B2c1dXLP99bpKY= +github.com/aws/aws-sdk-go-v2/service/eks v1.51.3/go.mod h1:jF64KxW5772dIqCCBEDk+QSzhBiqI9xdpjoso3DpvwQ= github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2 h1:PN61rmiIx5Kx2BTBVwNhQdIDUsGExelKNQb0OnB8X4Y= github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2/go.mod h1:GfBXRmZeda5Rt0KxjAtjxB6wVguM3K8tvGA/SEI51bc= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.4 h1:3/A2CI61lDLBRFdSf3/8utIbUB3EBRlgjfSJ6di+RfI= @@ -83,22 +86,24 @@ github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4 h1:Rdrd35iVHab github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4/go.mod h1:OBFqCwiJoYtdhDdH0S7bKMk7PbM6JYsD7psjAVZ+tVY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1 h1:EfkdYBfEgJJREyk0fm7C9OrcS+cq9KK7lYvabo4nEMM= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1/go.mod h1:ffdKles8aLKN0GJkZ2LdFKFD1wGs6ZFuu/+Hftv4Xu0= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.5 h1:O7UMjjX8eAM4eLs303VramU8DW4FzTUJz1EsQKkxqc0= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.5/go.mod h1:U1Wwh1TVfPHB8sbmBt3yqH2etdYERX1quammRvGWtXs= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7 h1:q+xiPu+Dk5MFC20ZjdGGhbihD39Xsih98epvVjnOjyE= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7/go.mod h1:iQCsmx9LyBMyMEkLCBVqnIAz+rfo6/ss3oLcYn26+no= github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0 h1:gMObW4IgUF4z8PxOb8efA/5P/chbjPc4XcTgDwZB/3g= github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0/go.mod h1:eC8yjekJg1MXGYwFDX0tYIFnBMMvJVmwuAnrQ6A88IE= -github.com/aws/aws-sdk-go-v2/service/grafana v1.26.5 h1:xgJiP0R7hXAO03rh9h8iupmMnb96rWM1dXG0ZKP8JCA= -github.com/aws/aws-sdk-go-v2/service/grafana v1.26.5/go.mod h1:QOCIdJ0zLzzcUDbBNtFT+IrzFFHD0909mxlPdXh53lg= github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1 h1:nAK988z7ZsAYHZtVD8IYV1HVI3ZcE2atQCoBEO5xEQE= github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1/go.mod h1:ISU8hcBgCVmpZTUmD2ONSQO+0dGpIjyCU1r+yIy7ha0= -github.com/aws/aws-sdk-go-v2/service/iam v1.38.0 h1:x2zxTpgLPylAKVZ1Lf7qiQkQHA7L5njP4eB01DrTlCw= -github.com/aws/aws-sdk-go-v2/service/iam v1.38.0/go.mod h1:WJARDpnEOhixhh41f+kTTr67y28OvjIUVht++rfcILY= +github.com/aws/aws-sdk-go-v2/service/iam v1.37.4 h1:MrH2MJRzxPGXtavvL1JtDLFJzXN+4ObO090jzauqcPk= +github.com/aws/aws-sdk-go-v2/service/iam v1.37.4/go.mod h1:WJARDpnEOhixhh41f+kTTr67y28OvjIUVht++rfcILY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.4 h1:rWKH6IiWDRIxmsTJUB/wEY+EIPp+P3C78Vidl+HXp6w= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.4/go.mod h1:MzOAfuiNZ6asjVrA+dNvXl5lI2nmzXakSpDFLOcOyJ4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 h1:tHxQi/XHPK0ctd/wdOw0t7Xrc2OxcRCnVzv8lwWPu0c= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4/go.mod h1:4GQbF1vJzG60poZqWatZlhP31y8PGCCVTvIGPdaaYJ0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 h1:kT6BcZsmMtNkP/iYMcRG+mIEA/IbeiUimXtGmqF39y0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3/go.mod h1:Z8uGua2k4PPaGOYn66pK02rhMrot3Xk3tpBuUFPomZU= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2 h1:1G7TTQNPNv5fhCyIQGYk8FOggLgkzKq6c4Y1nOGzAOE= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2/go.mod h1:+ybYGLXoF7bcD7wIcMcklxyABZQmuBf1cHUhvY6FGIo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 h1:qcxX0JYlgWH3hpPUnd6U0ikcl6LLA9sLkXE2w1fpMvY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3/go.mod h1:cLSNEmI45soc+Ef8K/L+8sEA3A3pYFEYf5B5UI+6bH4= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 h1:E5ZAVOmI2apR8ADb72Q63KqwwwdW1XcMeXIlrZ1Psjg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4/go.mod h1:wezzqVUOVVdk+2Z/JzQT4NxAU0NbhRe5W8pIE72jsWI= github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5 h1:qlSo29NECbPML9fKL3RZ28XMQB/zw8Fvwa+POkbA08Q= github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5/go.mod h1:2/lI9/4ZEq+wLGLUpbo2LLGYfFv+HGOex3Iu67k7lvU= github.com/aws/aws-sdk-go-v2/service/kms v1.37.5 h1:5dQJ6Q5QrQOqZxXjSbRXukBqU8Pgu6Ro6Qqtyd8yiz4= @@ -107,26 +112,29 @@ github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0 h1:jMqMB8t/xbJnDdr11kH5rKdAh github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0/go.mod h1:4L6vIpiChdahncljlDFzKWGiZsLgszGwDoYqMDhb6T4= github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5 h1:WJZG9ajCzS93t5qgG3NqVJqJqvpab9frc+2OhEszF/s= github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5/go.mod h1:uAeVP7yiKq1iECAGBsHgMzlUH77OIrmsA1CBmIIeCe4= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.0 h1:5U5Y6tWzqoP2Dr9APxkElg3tdMBsZd6PVWAq6NMYBbs= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.0/go.mod h1:JbyxgIAzR9wXnvVAqITjrpKRCcktIC+UWtPJ2meWZbg= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.5 h1:iitjgZ+/+ICxhA4EBvT5sqKchDcTiKBSOy+Ow0N8M+U= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.5/go.mod h1:xbnM3QuSlc52qQjTdDK3GptxYgDnGaonugLFdv5opq4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 h1:p9TNFL8bFUMd+38YIpTAXpoxyz0MxC7FlbFEH4P4E1U= +github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2/go.mod h1:fNjyo0Coen9QTwQLWeV6WO2Nytwiu+cCcWaTdKCAqqE= +github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0 h1:sCBj2KHGcbp9rZZ2HhwGSozndlZPnfZlidPKAdGySlo= +github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0/go.mod h1:5Jtme+EepIEeN+icvNwSG+4GN7WPF9Q3AiBT9sLquEY= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7 h1:EcPyKUUo3neD2tDFKnq3TR3B9s2uZe9eWgxVQgixdzc= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7/go.mod h1:MlNx35QVGG8TB2x1kOC0TKd9e93+RmFUE8HzYDLDLso= github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6 h1:EXJOAcfyr0atxiQdrHTnrVTCwO9udESAcQ96sWiJ8es= github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6/go.mod h1:6dnbiz9aq9VKUdRM2Sh9Fouoj7BOpIedm8xAYpVpGy8= github.com/aws/aws-sdk-go-v2/service/ses v1.28.4 h1:EDhsD67gk5WOUwKoh7ZgwU2OOp3Mm/IyMVVrf5EevOU= github.com/aws/aws-sdk-go-v2/service/ses v1.28.4/go.mod h1:J2mxEMBb09SgtslSlV9GUHjvth7nWb2hG1Np5iSIurE= -github.com/aws/aws-sdk-go-v2/service/sns v1.33.4 h1:Ff0cm9pmWXAZ3dK2hkqnwBGgHDRMDpWZCV8SCXaAvnw= -github.com/aws/aws-sdk-go-v2/service/sns v1.33.4/go.mod h1:RtivpQUW50BRHRjX66m+ReDisr36Nf9TgsPakzLrpwo= -github.com/aws/aws-sdk-go-v2/service/sqs v1.37.0 h1:4el/8jdTeg0Rx/ws3yIEPXR1LfSUiMKhdb/WuDwKzKI= -github.com/aws/aws-sdk-go-v2/service/sqs v1.37.0/go.mod h1:YXj6Y1BjZNj1PKi78CX2hBkVpCCuJ0TRtyd6wrKVQ64= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 h1:HJwZwRt2Z2Tdec+m+fPjvdmkq2s9Ra+VR0hjF7V2o40= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.5/go.mod h1:wrMCEwjFPms+V86TCQQeOxQF/If4vT44FGIOFiMC2ck= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 h1:zcx9LiGWZ6i6pjdcoE9oXAB6mUdeyC36Ia/QEiIvYdg= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4/go.mod h1:Tp/ly1cTjRLGBBmNccFumbZ8oqpZlpdhFf80SrRh4is= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.0 h1:s7LRgBqhwLaxcocnAniBJp7gaAB+4I4vHzqUqjH18yc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.0/go.mod h1:9XEUty5v5UAsMiFOBJrNibZgwCeOma73jgGwwhgffa8= -github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.6 h1:Cmi4vh1fCmcWxkHdswNgCmHRUrs/adOoerYcXJl2vtw= -github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.6/go.mod h1:t3Ljhmx5GEzD6OGd5ajMgs8L0Wza2Ppe5FE9uqFHLDo= +github.com/aws/aws-sdk-go-v2/service/sns v1.32.3 h1:LC5JBrEAdJ0SSRLfNcLzOLsfoc3xO/BAsHiUNcQfDI4= +github.com/aws/aws-sdk-go-v2/service/sns v1.32.3/go.mod h1:ZO606Jfatw51c8q29gHVVCnufg2dq3MnmkNLlTZFrkE= +github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3 h1:Lcs658WFW235QuUfpAdxd8RCy8Va2VUA7/U9iIrcjcY= +github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3/go.mod h1:WuGxWQhu2LXoPGA2HBIbotpwhM6T4hAz0Ip/HjdxfJg= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 h1:p1GahKIjyMDZtiKoIn0/jAj/TkMzfzndDv5+zi2Mhgc= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.1/go.mod h1:/vWdhoIoYA5hYoPZ6fm7Sv4d8701PiG5VKe8/pPJL60= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 h1:ORnrOK0C4WmYV/uYt3koHEWBLYsRDwk2Np+eEoyV4Z0= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2/go.mod h1:xyFHA4zGxgYkdD73VeezHt3vSKEG9EmFnGwoKlP00u4= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 h1:+woJ607dllHJQtsnJLi52ycuqHMwlW+Wqm2Ppsfp4nQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.1/go.mod h1:jiNR3JqT15Dm+QWq2SRgh0x0bCNSRP2L25+CqPNpJlQ= +github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5 h1:SR2VyTp+n8uHWJ5gI7aNtgkJc1JVKxv+Xrgu9A/KF0I= +github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5/go.mod h1:t3Ljhmx5GEzD6OGd5ajMgs8L0Wza2Ppe5FE9uqFHLDo= +github.com/aws/smithy-go v1.13.3/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= @@ -144,6 +152,7 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= diff --git a/util/tag.go b/util/tag.go index 6dc1d0f2..9648271b 100644 --- a/util/tag.go +++ b/util/tag.go @@ -2,8 +2,10 @@ package util import ( autoscaling "github.com/aws/aws-sdk-go-v2/service/autoscaling/types" - "github.com/aws/aws-sdk-go-v2/service/ec2/types" iam "github.com/aws/aws-sdk-go-v2/service/iam/types" + s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" + + "github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/networkfirewall" "github.com/aws/aws-sdk-go/service/rds" @@ -19,6 +21,15 @@ func ConvertS3TagsToMap(tags []*s3.Tag) map[string]string { return tagMap } +func ConvertS3TypesTagsToMap(tags []s3types.Tag) map[string]string { + tagMap := make(map[string]string) + for _, tag := range tags { + tagMap[*tag.Key] = *tag.Value + } + + return tagMap +} + func ConvertEC2TagsToMap(tags []*ec2.Tag) map[string]string { tagMap := make(map[string]string) for _, tag := range tags { diff --git a/v2_migration_report/output.md b/v2_migration_report/output.md index 30d65832..9f6a5203 100644 --- a/v2_migration_report/output.md +++ b/v2_migration_report/output.md @@ -98,10 +98,10 @@ run `go generate ./...` to refresh this report. | route53-cidr-collection | | | route53-hosted-zone | | | route53-traffic-policy | | -| s3 | | -| s3-ap | | -| s3-mrap | | -| s3-olap | | +| s3 | :white_check_mark: | +| s3-ap | :white_check_mark: | +| s3-mrap | :white_check_mark: | +| s3-olap | :white_check_mark: | | sagemaker-notebook-smni | | | secretsmanager | | | security-group | | From ef3ff562d357161fe399fe540a64622deef95ebd Mon Sep 17 00:00:00 2001 From: James Kwon <96548424+hongil0316@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:30:19 -0500 Subject: [PATCH 2/2] migrate: aws v2 s3 --- aws/resources/s3.go | 13 +-- go.mod | 120 +++++++++++----------- go.sum | 245 ++++++++++++++++++++++---------------------- 3 files changed, 190 insertions(+), 188 deletions(-) diff --git a/aws/resources/s3.go b/aws/resources/s3.go index dc1902d1..76b023c8 100644 --- a/aws/resources/s3.go +++ b/aws/resources/s3.go @@ -52,13 +52,14 @@ func (bucket *S3Buckets) getS3BucketTags(bucketName string) (map[string]string, // Please note that svc argument should be created from a session object which is // in the same region as the bucket or GetBucketTagging will fail. result, err := bucket.Client.GetBucketTagging(bucket.Context, input) - - var apiErr *smithy.OperationError - if goerr.As(err, &apiErr) { - if strings.Contains(apiErr.Error(), "NoSuchTagSet: The TagSet does not exist") { - return nil, nil + if err != nil { + var apiErr *smithy.OperationError + if goerr.As(err, &apiErr) { + if strings.Contains(apiErr.Error(), "NoSuchTagSet: The TagSet does not exist") { + return nil, nil + } + return nil, err } - return nil, err } return util.ConvertS3TypesTagsToMap(result.TagSet), nil diff --git a/go.mod b/go.mod index a5c8fe9e..a4346e65 100644 --- a/go.mod +++ b/go.mod @@ -4,51 +4,53 @@ go 1.21 require ( github.com/aws/aws-sdk-go v1.49.13 - github.com/aws/aws-sdk-go-v2 v1.32.4 - github.com/aws/aws-sdk-go-v2/config v1.27.24 - github.com/aws/aws-sdk-go-v2/credentials v1.17.24 - github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2 - github.com/aws/aws-sdk-go-v2/service/acm v1.30.2 - github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3 - github.com/aws/aws-sdk-go-v2/service/amp v1.27.1 - github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2 - github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2 - github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16 - github.com/aws/aws-sdk-go-v2/service/backup v1.39.3 - github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2 - github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2 - github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0 - github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2 - github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2 - github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2 - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0 - github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5 - github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2 - github.com/aws/aws-sdk-go-v2/service/efs v1.33.5 - github.com/aws/aws-sdk-go-v2/service/eks v1.51.3 - github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2 - github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.4 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1 - github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7 - github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0 - github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1 - github.com/aws/aws-sdk-go-v2/service/iam v1.37.4 - github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5 - github.com/aws/aws-sdk-go-v2/service/kms v1.37.5 - github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0 - github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5 - github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 - github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0 - github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7 - github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6 - github.com/aws/aws-sdk-go-v2/service/ses v1.28.4 - github.com/aws/aws-sdk-go-v2/service/sns v1.32.3 - github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3 - github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5 - github.com/aws/smithy-go v1.22.0 + github.com/aws/aws-sdk-go-v2 v1.32.5 + github.com/aws/aws-sdk-go-v2/config v1.28.5 + github.com/aws/aws-sdk-go-v2/credentials v1.17.46 + github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.1 + github.com/aws/aws-sdk-go-v2/service/acm v1.30.6 + github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.7 + github.com/aws/aws-sdk-go-v2/service/amp v1.30.3 + github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.0 + github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.6 + github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.6 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.50.0 + github.com/aws/aws-sdk-go-v2/service/backup v1.39.7 + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.46.0 + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.1 + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.44.0 + github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.6 + github.com/aws/aws-sdk-go-v2/service/configservice v1.50.6 + github.com/aws/aws-sdk-go-v2/service/datasync v1.43.4 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0 + github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6 + github.com/aws/aws-sdk-go-v2/service/ecs v1.52.0 + github.com/aws/aws-sdk-go-v2/service/efs v1.34.0 + github.com/aws/aws-sdk-go-v2/service/eks v1.52.1 + github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.0 + github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.5 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.5 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.42.1 + github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.6 + github.com/aws/aws-sdk-go-v2/service/firehose v1.35.1 + github.com/aws/aws-sdk-go-v2/service/grafana v1.26.6 + github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.2 + github.com/aws/aws-sdk-go-v2/service/iam v1.38.1 + github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.6 + github.com/aws/aws-sdk-go-v2/service/kms v1.37.6 + github.com/aws/aws-sdk-go-v2/service/lambda v1.68.0 + github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.6 + github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.1 + github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0 + github.com/aws/aws-sdk-go-v2/service/s3control v1.50.1 + github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.6 + github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.7 + github.com/aws/aws-sdk-go-v2/service/ses v1.28.5 + github.com/aws/aws-sdk-go-v2/service/sns v1.33.5 + github.com/aws/aws-sdk-go-v2/service/sqs v1.37.1 + github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.8 + github.com/aws/smithy-go v1.22.1 github.com/charmbracelet/lipgloss v0.6.0 github.com/go-errors/errors v1.4.2 github.com/gruntwork-io/go-commons v0.17.0 @@ -64,20 +66,20 @@ require ( require ( atomicgo.dev/cursor v0.1.1 // indirect atomicgo.dev/keyboard v0.2.8 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 49145dd6..28b5e0af 100644 --- a/go.sum +++ b/go.sum @@ -15,128 +15,128 @@ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYew github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= github.com/aws/aws-sdk-go v1.49.13 h1:f4mGztsgnx2dR9r8FQYa9YW/RsKb+N7bgef4UGrOW1Y= github.com/aws/aws-sdk-go v1.49.13/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2 v1.16.16/go.mod h1:SwiyXi/1zTUZ6KIAmLK5V5ll8SiURNUYOqTerZPaF9k= -github.com/aws/aws-sdk-go-v2 v1.32.4 h1:S13INUiTxgrPueTmrm5DZ+MiAo99zYzHEFh1UNkOxNE= -github.com/aws/aws-sdk-go-v2 v1.32.4/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA= -github.com/aws/aws-sdk-go-v2/config v1.27.24 h1:NM9XicZ5o1CBU/MZaHwFtimRpWx9ohAUAqkG6AqSqPo= -github.com/aws/aws-sdk-go-v2/config v1.27.24/go.mod h1:aXzi6QJTuQRVVusAO8/NxpdTeTyr/wRcybdDtfUwJSs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.24 h1:YclAsrnb1/GTQNt2nzv+756Iw4mF8AOzcDfweWwwm/M= -github.com/aws/aws-sdk-go-v2/credentials v1.17.24/go.mod h1:Hld7tmnAkoBQdTMNYZGzztzKRdA4fCdn9L83LOoigac= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 h1:Aznqksmd6Rfv2HQN9cpqIV/lQRMaIpJkLLaJ1ZI76no= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9/go.mod h1:WQr3MY7AxGNxaqAtsDWn+fBxmd4XvLkzeqQ8P1VM0/w= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23/go.mod h1:2DFxAQ9pfIRy0imBCJv+vZ2X6RKxves6fbnEuSry6b4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 h1:A2w6m6Tmr+BNXjDsr7M90zkWjsu4JXHwrzPg235STs4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23/go.mod h1:35EVp9wyeANdujZruvHiQUAo9E3vbhnIO1mTCAxMlY0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17/go.mod h1:pRwaTYCJemADaqCbUAxltMoHKata7hmB5PjEXeu0kfg= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 h1:pgYW9FCabt2M25MoHYCfMrVY2ghiiBKYWUVXfwZs+sU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23/go.mod h1:c48kLgzO19wAu3CPkDWC28JbaJ+hfQlsdl7I2+oqIbk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 h1:yV+hCAHZZYJQcwAaszoBNwLbPItHvApxT0kVIw6jRgs= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22/go.mod h1:kbR1TL8llqB1eGnVbybcA4/wgScxdylOdyAd51yxPdw= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2 h1:QliYfQlWPSjTZpLjj8dXpV6jRuxMs9DFJ8W1Q+ZHMy8= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.34.2/go.mod h1:9bHRHmhoqatAujuRir347sJaGEg6xoV0T3On4DNiJ10= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.2 h1:LNCRNr5Ha6OUcnV4licXm/V9/fUyto85nQdQSscC09g= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.2/go.mod h1:wRBzxEW2vsJMJAuV7yWEHGzo/KycX3t02mUVm6P8qHY= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3 h1:1jmLDJJ3StvfOopWDb/HY9mDSN2e7ZmReww4FTFvNnU= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.3/go.mod h1:vWSvubH4BhEG1Vl6lLUVHZzRo7lgIM7/oJpBv6hN5i4= -github.com/aws/aws-sdk-go-v2/service/amp v1.27.1 h1:va9j7MGA8jBlQs9KujMlkSdnC26TuEJXv7ywnFjmTZ8= -github.com/aws/aws-sdk-go-v2/service/amp v1.27.1/go.mod h1:QhmX7qjomjuHJjCJbW+QRdaCBM42v1eAbWvBVFrT1Vw= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2 h1:XMdSPyg1ZJsoPIhmOiiSSA4qsk/G2ZGgDNYp3JQOwzk= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.27.2/go.mod h1:dxPkh3eysV7j4JJqodTQijVKlIH0A3MhGJcQpJO1XL4= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2 h1:dLg685y7wusZZjJcZ+c0PhV8+wjTn1xzidvUkondtJM= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.2/go.mod h1:wwTm1f7PQvrhoXmvPiqalPJ3tUfA5p4TaBs4pu3yOYs= -github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2 h1:468DHZ8HOxmnyc+FPHrA12mIiBLm/TAKrn2AQDLeiTw= -github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.2/go.mod h1:MFQKKPZwSPqOvqDnf9dqobSKODpgqnnbhYYzE3QAgDM= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16 h1:cp30gVVAbZfeDod6UJGppMH2+p+/cRCG2AZ1TbT+LqA= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.23.16/go.mod h1:hHTMeJt6CQwFdmS19RK1LsDscus8c25Ve8KiYRhsISg= -github.com/aws/aws-sdk-go-v2/service/backup v1.39.3 h1:mjYDN7CPl0CHrTBe36EKqAAGGXAKy8MXuNF+2qHkVdM= -github.com/aws/aws-sdk-go-v2/service/backup v1.39.3/go.mod h1:dc18UjjmJLlpcPGF6kluQcEpcddqlkdRTF8h5XKWSbc= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2 h1:0RsL6IlPHeAgl6RF0gGIlB4OKIw3rjfNrueOMj8qELg= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.44.2/go.mod h1:0tPpvgvHOBqIh+j0s5GL+WzrAevuxVJOEQC2GF2CJvo= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2 h1:eMh+iBTF1CbpHMfiRvIaVm+rzrH1DOzuSFaR55O+bBo= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.42.2/go.mod h1:/A4zNqF1+RS5RV+NNLKIzUX1KtK5SoWgf/OpiqrwmBo= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0 h1:LM/Ij1aUUeqRTEJPm5kLLcougWLKDSvZE3P4OGB5P8c= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.42.0/go.mod h1:+/4cU1i0DF9gaA6GAZRIHVJWLZB7SSqJTCvkOMilNQE= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2 h1:sVFvCVQ5E3b2Wqh2gBnUfIinw7NdJ7h9d1kdGBV6LYE= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.2/go.mod h1:Y2cnvaNeBNgLOvDSBi2zGy8ft9eR7qBKbxCLgR4O5yI= -github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2 h1:snWKvHjE6VO/YpqkcEgogVCrcyczOJx/hyyn2g05n1I= -github.com/aws/aws-sdk-go-v2/service/configservice v1.50.2/go.mod h1:+J+fFPZtXSJoSYFKI0LSjNPZ4bN1kPErZOldY/Z7QHM= -github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2 h1:mNOyYZFjd3CakcvYIVCmqXFZ0pZJSGobtDx5UciBLOc= -github.com/aws/aws-sdk-go-v2/service/datasync v1.42.2/go.mod h1:qWAvIKfkNqX/IN0sXwOiq73zzSCW/Ar96mHbfY/5D9c= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2 h1:kJqyYcGqhWFmXqjRrtFFD4Oc9FXiskhsll2xnlpe8Do= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.2/go.mod h1:+t2Zc5VNOzhaWzpGE+cEYZADsgAAQT5v55AO+fhU+2s= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0 h1:SZnuDlml1uFv5ojh+QTxS+Yru89Hr3QYIUwWoY71frI= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.184.0/go.mod h1:kYXaB4FzyhEJjvrJ84oPnMElLiEAjGxxUunVW2tBSng= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5 h1:FMF/uaTcIdhvOwZXJfzpwanx2m4Dd6IcN4vDnAn7NAA= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.5/go.mod h1:xhf509Ba+rG5whtO7w46O0raVzu1Og3Aba80LSvHbbQ= -github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2 h1:LpxJEwzfI5pen6CbNem8mwPAYBwjoQ/hLHVAqhAEFDo= -github.com/aws/aws-sdk-go-v2/service/ecs v1.49.2/go.mod h1:zL7o3zbIpWdzjbIZQbir4aGew5QmhiYVkvx6avQnLDc= -github.com/aws/aws-sdk-go-v2/service/efs v1.33.5 h1:IfaLNIIT1m3q0M2HbP+MqKU/kWt9Cej2VLRFcuk0XGA= -github.com/aws/aws-sdk-go-v2/service/efs v1.33.5/go.mod h1:yCeKfWPD0na87deTqOQ65g1CXytykczP7QZX4oNFhdo= -github.com/aws/aws-sdk-go-v2/service/eks v1.51.3 h1:tjBKHURgiMPJ3aqQjMoTIDin7GxX6B2c1dXLP99bpKY= -github.com/aws/aws-sdk-go-v2/service/eks v1.51.3/go.mod h1:jF64KxW5772dIqCCBEDk+QSzhBiqI9xdpjoso3DpvwQ= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2 h1:PN61rmiIx5Kx2BTBVwNhQdIDUsGExelKNQb0OnB8X4Y= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.43.2/go.mod h1:GfBXRmZeda5Rt0KxjAtjxB6wVguM3K8tvGA/SEI51bc= -github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.4 h1:3/A2CI61lDLBRFdSf3/8utIbUB3EBRlgjfSJ6di+RfI= -github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.4/go.mod h1:QfbCIfdq0gazapvRqUu6jWrSH92+r+PfB4drqT7WaPs= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4 h1:Rdrd35iVHabYS45yIrm0NVYpq/hNhdAhB2FiXYCOZyw= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.4/go.mod h1:OBFqCwiJoYtdhDdH0S7bKMk7PbM6JYsD7psjAVZ+tVY= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1 h1:EfkdYBfEgJJREyk0fm7C9OrcS+cq9KK7lYvabo4nEMM= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.41.1/go.mod h1:ffdKles8aLKN0GJkZ2LdFKFD1wGs6ZFuu/+Hftv4Xu0= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7 h1:q+xiPu+Dk5MFC20ZjdGGhbihD39Xsih98epvVjnOjyE= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.7/go.mod h1:iQCsmx9LyBMyMEkLCBVqnIAz+rfo6/ss3oLcYn26+no= -github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0 h1:gMObW4IgUF4z8PxOb8efA/5P/chbjPc4XcTgDwZB/3g= -github.com/aws/aws-sdk-go-v2/service/firehose v1.35.0/go.mod h1:eC8yjekJg1MXGYwFDX0tYIFnBMMvJVmwuAnrQ6A88IE= -github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1 h1:nAK988z7ZsAYHZtVD8IYV1HVI3ZcE2atQCoBEO5xEQE= -github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.1/go.mod h1:ISU8hcBgCVmpZTUmD2ONSQO+0dGpIjyCU1r+yIy7ha0= -github.com/aws/aws-sdk-go-v2/service/iam v1.37.4 h1:MrH2MJRzxPGXtavvL1JtDLFJzXN+4ObO090jzauqcPk= -github.com/aws/aws-sdk-go-v2/service/iam v1.37.4/go.mod h1:WJARDpnEOhixhh41f+kTTr67y28OvjIUVht++rfcILY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 h1:kT6BcZsmMtNkP/iYMcRG+mIEA/IbeiUimXtGmqF39y0= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3/go.mod h1:Z8uGua2k4PPaGOYn66pK02rhMrot3Xk3tpBuUFPomZU= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2 h1:1G7TTQNPNv5fhCyIQGYk8FOggLgkzKq6c4Y1nOGzAOE= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.2/go.mod h1:+ybYGLXoF7bcD7wIcMcklxyABZQmuBf1cHUhvY6FGIo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 h1:qcxX0JYlgWH3hpPUnd6U0ikcl6LLA9sLkXE2w1fpMvY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3/go.mod h1:cLSNEmI45soc+Ef8K/L+8sEA3A3pYFEYf5B5UI+6bH4= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 h1:E5ZAVOmI2apR8ADb72Q63KqwwwdW1XcMeXIlrZ1Psjg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4/go.mod h1:wezzqVUOVVdk+2Z/JzQT4NxAU0NbhRe5W8pIE72jsWI= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5 h1:qlSo29NECbPML9fKL3RZ28XMQB/zw8Fvwa+POkbA08Q= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.5/go.mod h1:2/lI9/4ZEq+wLGLUpbo2LLGYfFv+HGOex3Iu67k7lvU= -github.com/aws/aws-sdk-go-v2/service/kms v1.37.5 h1:5dQJ6Q5QrQOqZxXjSbRXukBqU8Pgu6Ro6Qqtyd8yiz4= -github.com/aws/aws-sdk-go-v2/service/kms v1.37.5/go.mod h1:A9vfQcNHVBCE7ZZN6H+UUJpXtbH26Vv6L7Zhk5nIJAY= -github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0 h1:jMqMB8t/xbJnDdr11kH5rKdAhoW2a3Nq3XxrkTp0gso= -github.com/aws/aws-sdk-go-v2/service/lambda v1.66.0/go.mod h1:4L6vIpiChdahncljlDFzKWGiZsLgszGwDoYqMDhb6T4= -github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5 h1:WJZG9ajCzS93t5qgG3NqVJqJqvpab9frc+2OhEszF/s= -github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.5/go.mod h1:uAeVP7yiKq1iECAGBsHgMzlUH77OIrmsA1CBmIIeCe4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 h1:p9TNFL8bFUMd+38YIpTAXpoxyz0MxC7FlbFEH4P4E1U= -github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2/go.mod h1:fNjyo0Coen9QTwQLWeV6WO2Nytwiu+cCcWaTdKCAqqE= -github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0 h1:sCBj2KHGcbp9rZZ2HhwGSozndlZPnfZlidPKAdGySlo= -github.com/aws/aws-sdk-go-v2/service/s3control v1.50.0/go.mod h1:5Jtme+EepIEeN+icvNwSG+4GN7WPF9Q3AiBT9sLquEY= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7 h1:EcPyKUUo3neD2tDFKnq3TR3B9s2uZe9eWgxVQgixdzc= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.7/go.mod h1:MlNx35QVGG8TB2x1kOC0TKd9e93+RmFUE8HzYDLDLso= -github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6 h1:EXJOAcfyr0atxiQdrHTnrVTCwO9udESAcQ96sWiJ8es= -github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.6/go.mod h1:6dnbiz9aq9VKUdRM2Sh9Fouoj7BOpIedm8xAYpVpGy8= -github.com/aws/aws-sdk-go-v2/service/ses v1.28.4 h1:EDhsD67gk5WOUwKoh7ZgwU2OOp3Mm/IyMVVrf5EevOU= -github.com/aws/aws-sdk-go-v2/service/ses v1.28.4/go.mod h1:J2mxEMBb09SgtslSlV9GUHjvth7nWb2hG1Np5iSIurE= -github.com/aws/aws-sdk-go-v2/service/sns v1.32.3 h1:LC5JBrEAdJ0SSRLfNcLzOLsfoc3xO/BAsHiUNcQfDI4= -github.com/aws/aws-sdk-go-v2/service/sns v1.32.3/go.mod h1:ZO606Jfatw51c8q29gHVVCnufg2dq3MnmkNLlTZFrkE= -github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3 h1:Lcs658WFW235QuUfpAdxd8RCy8Va2VUA7/U9iIrcjcY= -github.com/aws/aws-sdk-go-v2/service/sqs v1.35.3/go.mod h1:WuGxWQhu2LXoPGA2HBIbotpwhM6T4hAz0Ip/HjdxfJg= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 h1:p1GahKIjyMDZtiKoIn0/jAj/TkMzfzndDv5+zi2Mhgc= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.1/go.mod h1:/vWdhoIoYA5hYoPZ6fm7Sv4d8701PiG5VKe8/pPJL60= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 h1:ORnrOK0C4WmYV/uYt3koHEWBLYsRDwk2Np+eEoyV4Z0= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2/go.mod h1:xyFHA4zGxgYkdD73VeezHt3vSKEG9EmFnGwoKlP00u4= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 h1:+woJ607dllHJQtsnJLi52ycuqHMwlW+Wqm2Ppsfp4nQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.1/go.mod h1:jiNR3JqT15Dm+QWq2SRgh0x0bCNSRP2L25+CqPNpJlQ= -github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5 h1:SR2VyTp+n8uHWJ5gI7aNtgkJc1JVKxv+Xrgu9A/KF0I= -github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.5/go.mod h1:t3Ljhmx5GEzD6OGd5ajMgs8L0Wza2Ppe5FE9uqFHLDo= -github.com/aws/smithy-go v1.13.3/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= -github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/aws/aws-sdk-go-v2 v1.32.5 h1:U8vdWJuY7ruAkzaOdD7guwJjD06YSKmnKCJs7s3IkIo= +github.com/aws/aws-sdk-go-v2 v1.32.5/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= +github.com/aws/aws-sdk-go-v2/config v1.28.5 h1:Za41twdCXbuyyWv9LndXxZZv3QhTG1DinqlFsSuvtI0= +github.com/aws/aws-sdk-go-v2/config v1.28.5/go.mod h1:4VsPbHP8JdcdUDmbTVgNL/8w9SqOkM5jyY8ljIxLO3o= +github.com/aws/aws-sdk-go-v2/credentials v1.17.46 h1:AU7RcriIo2lXjUfHFnFKYsLCwgbz1E7Mm95ieIRDNUg= +github.com/aws/aws-sdk-go-v2/credentials v1.17.46/go.mod h1:1FmYyLGL08KQXQ6mcTlifyFXfJVCNJTVGuQP4m0d/UA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 h1:sDSXIrlsFSFJtWKLQS4PUWRvrT580rrnuLydJrCQ/yA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20/go.mod h1:WZ/c+w0ofps+/OUqMwWgnfrgzZH1DZO1RIkktICsqnY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 h1:4usbeaes3yJnCFC7kfeyhkdkPtoRYPa/hTmCqMpKpLI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24/go.mod h1:5CI1JemjVwde8m2WG3cz23qHKPOxbpkq0HaoreEgLIY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM0Ys00860C+QFwu6u/5+LomP+o= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 h1:JX70yGKLj25+lMC5Yyh8wBtvB01GDilyRuJvXJ4piD0= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24/go.mod h1:+Ln60j9SUTD0LEwnhEB0Xhg61DHqplBrbZpLgyjoEHg= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.1 h1:IdOcs3kO2gSgjQ6CQVV3TiFrcqt4+p/hIO3fJoY5LAk= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.1/go.mod h1:73ZiTjCNz6qec4WaTLpXuz3QS/B6BGaeI1CsiojnR2w= +github.com/aws/aws-sdk-go-v2/service/acm v1.30.6 h1:fDg0RlN30Xf/yYzEUL/WXqhmgFsjVb/I3230oCfyI5w= +github.com/aws/aws-sdk-go-v2/service/acm v1.30.6/go.mod h1:zRR6jE3v/TcbfO8C2P+H0Z+kShiKKVaVyoIl8NQRjyg= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.7 h1:uysdx5dYnLtvApVpV4A730PfmqqEjb2ejYcB0NB+2js= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.37.7/go.mod h1:PmgOAeKyU7dx7gOZE+v+p3n2tiKa2DvGKvJ8GDehAZw= +github.com/aws/aws-sdk-go-v2/service/amp v1.30.3 h1:28FOQuvHpWMdEYK9x89FszjBmwGfhkWYIc45DQcLhsk= +github.com/aws/aws-sdk-go-v2/service/amp v1.30.3/go.mod h1:QbCuQItcTOX7oQR9Nn9nGveBCqSad391I5ReOyQmtag= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.0 h1:BkESaUndLOn3ZFTq4Eho347yvtiJxEQf1HWxgVu2RVI= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.0/go.mod h1:WP+ceHdK5RAijZxABi1mH1kCZmQKRJNKwV+cj0iVr44= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.6 h1:wNUMxMjviF0fbO1pWKVFT1xDRa+BY2qwW6+YJkgIRvI= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.24.6/go.mod h1:pCq9ErKoUWYFfmpENhlWuhBF+NNNwVOXNrZA5C480eM= +github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.6 h1:Wqlx6m821gv7qXMJQ3f7JuTQusWbZNWbpEgFD6/qkgE= +github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.6/go.mod h1:liN6AXsZpCSw888Vdsc1OSeKuEVvWek31jv41mn4KCA= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.50.0 h1:5tF6T8pAKna0TZ2g77jKdTCKoIRDsaYlYxz9OC1BraI= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.50.0/go.mod h1:I1+/2m+IhnK5qEbhS3CrzjeiVloo9sItE/2K+so0fkU= +github.com/aws/aws-sdk-go-v2/service/backup v1.39.7 h1:YeU78WW19lWGew7OBP2lImtLvn2d5Zlktjwh268d07I= +github.com/aws/aws-sdk-go-v2/service/backup v1.39.7/go.mod h1:oeRKTbMD3NrXPRvFZGSibtpJfpYlyLKnQOyHvl6rjqQ= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.46.0 h1:Rqsc2iSjGyl+/4B26d7I2lyzIO0RNY7OhLs+RwSL5Ps= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.46.0/go.mod h1:1UmWM2dmPjAP9GndptgNB5ZO1GnVRHFUX5JK0RB+ozY= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.1 h1:FbjhJTRoTujDYDwTnnE46Km5Qh1mMSH+BwTL4ODFifg= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.1/go.mod h1:OwyCzHw6CH8pkLqT8uoCkOgUsgm11LTfexLZyRy6fBg= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.44.0 h1:OREVd94+oXW5a+3SSUAo4K0L5ci8cucCLu+PSiek8OU= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.44.0/go.mod h1:Qbr4yfpNqVNl69l/GEDK+8wxLf/vHi0ChoiSDzD7thU= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.6 h1:jwaOL3HT0yXEIs/2Bs35sx6DM6L755ppdW9DejXYYa4= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.29.6/go.mod h1:wOfD5vHIuGIe9aMoujgn0teM3fGOvtW1uxeZPs+MluI= +github.com/aws/aws-sdk-go-v2/service/configservice v1.50.6 h1:GsIoN6f+LLTX/Sa70WO77Cy1GTrSF9xi7e8OwwOiGcs= +github.com/aws/aws-sdk-go-v2/service/configservice v1.50.6/go.mod h1:5vbQi0lIP9T7RLGyjmQZhqf5Xv9WxHXk7qlHnhEqWKc= +github.com/aws/aws-sdk-go-v2/service/datasync v1.43.4 h1:rc3uPdxBtqgt3ELUzTP7qRV8M4MhWboC4wsvPCPGK3M= +github.com/aws/aws-sdk-go-v2/service/datasync v1.43.4/go.mod h1:+goO0fVAf3qrLIIlnp0nITiG26fGtkfKakRXkgJ9u14= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.1 h1:vucMirlM6D+RDU8ncKaSZ/5dGrXNajozVwpmWNPn2gQ= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.37.1/go.mod h1:fceORfs010mNxZbQhfqUjUeHlTwANmIT4mvHamuUaUg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0 h1:RhSoBFT5/8tTmIseJUXM6INTXTQDF8+0oyxWBnozIms= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6 h1:zg+3FGHA0PBs0KM25qE/rOf2o5zsjNa1g/Qq83+SDI0= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6/go.mod h1:ZSq54Z9SIsOTf1Efwgw1msilSs4XVEfVQiP9nYVnKpM= +github.com/aws/aws-sdk-go-v2/service/ecs v1.52.0 h1:7/vgFWplkusJN/m+3QOa+W9FNRqa8ujMPNmdufRaJpg= +github.com/aws/aws-sdk-go-v2/service/ecs v1.52.0/go.mod h1:dPTOvmjJQ1T7Q+2+Xs2KSPrMvx+p0rpyV+HsQVnUK4o= +github.com/aws/aws-sdk-go-v2/service/efs v1.34.0 h1:0VpBMWwpq5UuhneIWO19+/Mp5DmFwQIEAoC0LqFCYdM= +github.com/aws/aws-sdk-go-v2/service/efs v1.34.0/go.mod h1:WBUkzX6kKt36+zyeTQYxySd0TPuvNQhNWG6vRrNBzJw= +github.com/aws/aws-sdk-go-v2/service/eks v1.52.1 h1:XqyUdJbXQxY48CbBtN9a51HoTQy/kTIwrWiruRDsydk= +github.com/aws/aws-sdk-go-v2/service/eks v1.52.1/go.mod h1:WTfZ/+I7aSMEna6iYm1Kjne9A8f1MyxXNfp6hCa1+Bk= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.0 h1:Fyzf7cqohTLamP8kht9xvkMJT3HXmz0IQGdRMk1tdJk= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.0/go.mod h1:yx9zxw7KuLQoIdf0ajFjNhsIve273fJDMmF/BprT8Vc= +github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.5 h1:bCj+S/v35iLUnHp8DiIC92sdWYweLUjBDSLFbw7vHQ0= +github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.5/go.mod h1:gOJmxmxThaTRM7r8WZ6BeOCl14UE48lSgMca7U4/oMM= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.5 h1:12Fm4tTwFk2Url99X56hdKXKVK7suzZKjtdXAILne4g= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.5/go.mod h1:qnlecrYsTCjPhGuF+3SZaz7WGuNz/T3L/Q8a3Yc7uww= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.42.1 h1:7CbnVh+BXerN1kiqTbm3Y2GkaaAiZ26v9GMlb0nubYo= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.42.1/go.mod h1:pZP3I+Ts+XuhJJtZE49+ABVjfxm7u9/hxcNUYSpY3OE= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.6 h1:LLUzdN3H7EEmpRjkJDpMGdbimAPTg6+3fFvJCDpjcrQ= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.35.6/go.mod h1:njIZoyz4eQquthx3TH9aIz5svTr55u/6+agentCxFC0= +github.com/aws/aws-sdk-go-v2/service/firehose v1.35.1 h1:yA6/HoFnFrPhE1nMO3LzsgKIT/99NDWoX5Xzqnqhpyg= +github.com/aws/aws-sdk-go-v2/service/firehose v1.35.1/go.mod h1:TSAFnwAC+DYOJX5JehOV+wJiAhpluwa+yHDxDmWI4P0= +github.com/aws/aws-sdk-go-v2/service/grafana v1.26.6 h1:4HbrlCilE6Gfp/mzsm0QUZWrkOXnJhA6tANilm4bW5A= +github.com/aws/aws-sdk-go-v2/service/grafana v1.26.6/go.mod h1:HJ529PdQzuLBtEDDjLtpk9tUskaGduSfAeY2bQzSPi0= +github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.2 h1:b7UFaMcKBI7L6dn0cIdti+JWo7tu/PBzSiPMxL5hG+0= +github.com/aws/aws-sdk-go-v2/service/guardduty v1.51.2/go.mod h1:Nt8fPu+TIY++o7jufOiHACxNFdgTNSL5yY9csYxIK3s= +github.com/aws/aws-sdk-go-v2/service/iam v1.38.1 h1:hfkzDZHBp9jAT4zcd5mtqckpU4E3Ax0LQaEWWk1VgN8= +github.com/aws/aws-sdk-go-v2/service/iam v1.38.1/go.mod h1:u36ahDtZcQHGmVm/r+0L1sfKX4fzLEMdCqiKRKkUMVM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 h1:gvZOjQKPxFXy1ft3QnEyXmT+IqneM9QAUWlM3r0mfqw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5/go.mod h1:DLWnfvIcm9IET/mmjdxeXbBKmTCm0ZB8p1za9BVteM8= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.5 h1:3Y457U2eGukmjYjeHG6kanZpDzJADa2m0ADqnuePYVQ= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.5/go.mod h1:CfwEHGkTjYZpkQ/5PvcbEtT7AJlG68KkEvmtwU8z3/U= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 h1:P1doBzv5VEg1ONxnJss1Kh5ZG/ewoIE4MQtKKc6Crgg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5/go.mod h1:NOP+euMW7W3Ukt28tAxPuoWao4rhhqJD3QEBk7oCg7w= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.6 h1:yN7WEx9ksiP5+9zdKtoQYrUT51HvYw+EA1TXsElvMyk= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.6/go.mod h1:j8MNat6qtGw5OoEACRbWtT8r5my4nRWfM/6Uk+NsuC4= +github.com/aws/aws-sdk-go-v2/service/kms v1.37.6 h1:CZImQdb1QbU9sGgJ9IswhVkxAcjkkD1eQTMA1KHWk+E= +github.com/aws/aws-sdk-go-v2/service/kms v1.37.6/go.mod h1:YJDdlK0zsyxVBxGU48AR/Mi8DMrGdc1E3Yij4fNrONA= +github.com/aws/aws-sdk-go-v2/service/lambda v1.68.0 h1:iOeBeG/kwavag7SR2obST2YVIika2Bt+BvKUdFYDN30= +github.com/aws/aws-sdk-go-v2/service/lambda v1.68.0/go.mod h1:guz2K3x4FKSdDaoeB+TPVgJNU9oj2gftbp5cR8ela1A= +github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.6 h1:8Ma/55QqIQBimERWAPLiOafZZ2CGMz15l1jKOcx2YnU= +github.com/aws/aws-sdk-go-v2/service/macie2 v1.43.6/go.mod h1:8DUfCGSV5Y4q2H2pyN1+oZtLszDKMzizpUx6AA9WAxo= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.1 h1:8LrDaf/GI94aAXufGevIiHYd+btpMkWPmpHRKn7gLPs= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.44.1/go.mod h1:Hda4HPusP9TqF+NEC+aw2296WJ+yJGZR72Ufj1atZ3w= +github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0 h1:bFpcqdwtAEsgpZXvkTxIThFQx/EM0oV6kXmfFIGjxME= +github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0/go.mod h1:ralv4XawHjEMaHOWnTFushl0WRqim/gQWesAMF6hTow= +github.com/aws/aws-sdk-go-v2/service/s3control v1.50.1 h1:WjVnnNd++hjjmuODULNfZaW2zEKZVrDGZvdQUK2dF8M= +github.com/aws/aws-sdk-go-v2/service/s3control v1.50.1/go.mod h1:ymXHnBHIxM/iqrgGphFuoUfuczoy4inIr2LH8PRj8NQ= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.6 h1:68IWlYXT4lWbn1EmL8NBouGTyi9W/IXkXSJbTiasjXY= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.6/go.mod h1:p6YS4Jv8IRTR8g77fl7iAYa72RfFV5t7ek8TP8/fKVM= +github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.7 h1:pWQKR8guL3JKhJo4fzbez5TwcG6oNShKNv1cOlDX0KM= +github.com/aws/aws-sdk-go-v2/service/securityhub v1.54.7/go.mod h1:UleZz3snRNYUF7PwsUDdKFq7VF1SUI4WGgMrnLNbYos= +github.com/aws/aws-sdk-go-v2/service/ses v1.28.5 h1:fct7t4dGDFoJRk+8EIYBXLNsjd0PdvlRRTtfVwkMwSc= +github.com/aws/aws-sdk-go-v2/service/ses v1.28.5/go.mod h1:JRCjHrdiLrSoHRbbOd0lTQOS5U9Yxe72wB3Rk+e2tcQ= +github.com/aws/aws-sdk-go-v2/service/sns v1.33.5 h1:nJDOsZumqKsejsiGKgpezFzI2oatHmQi/kKKC4wS8v4= +github.com/aws/aws-sdk-go-v2/service/sns v1.33.5/go.mod h1:SODr0Lu3lFdT0SGsGX1TzFTapwveBrT5wztVoYtppm8= +github.com/aws/aws-sdk-go-v2/service/sqs v1.37.1 h1:39WvSrVq9DD6UHkD+fx5x19P5KpRQfNdtgReDVNbelc= +github.com/aws/aws-sdk-go-v2/service/sqs v1.37.1/go.mod h1:3gwPzC9LER/BTQdQZ3r6dUktb1rSjABF1D3Sr6nS7VU= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg= +github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.8 h1:a7UROHRTNSQrJ2h4BETtfACcPjWuZPoPpeMBmxS7K00= +github.com/aws/aws-sdk-go-v2/service/vpclattice v1.12.8/go.mod h1:X0X0qZ4S3qpAm8NfTdW4lacTf2VusIV3sbwF+CN3d4k= +github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= +github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= @@ -152,7 +152,6 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=