@@ -57,51 +57,48 @@ func (a *mqlAwsS3) id() (string, error) {
5757
5858func (a * mqlAwsS3 ) buckets () ([]any , error ) {
5959 conn := a .MqlRuntime .Connection .(* connection.AwsConnection )
60-
61- svc := conn .S3 ("" )
6260 ctx := context .Background ()
6361
64- totalBuckets := make ([]s3types.Bucket , 0 )
65- params := & s3.ListBucketsInput {}
66- paginator := s3 .NewListBucketsPaginator (svc , params , func (o * s3.ListBucketsPaginatorOptions ) {
67- o .Limit = 100
68- })
69- for paginator .HasMorePages () {
70- output , err := paginator .NextPage (ctx )
71- if err != nil {
72- return nil , err
73- }
74- totalBuckets = append (totalBuckets , output .Buckets ... )
62+ configuredRegions , err := conn .Regions ()
63+ if err != nil {
64+ return nil , err
7565 }
7666
77- res := []any {}
78- for _ , bucket := range totalBuckets {
79- location , err := svc .GetBucketLocation (ctx , & s3.GetBucketLocationInput {
80- Bucket : bucket .Name ,
67+ type bucketWithRegion struct {
68+ bucket s3types.Bucket
69+ region string
70+ }
71+ var bucketsWithRegions []bucketWithRegion
72+
73+ for _ , region := range configuredRegions {
74+ svc := conn .S3 (region )
75+ log .Debug ().Str ("region" , region ).Msg ("listing S3 buckets in region" )
76+ params := & s3.ListBucketsInput {BucketRegion : aws .String (region )}
77+ paginator := s3 .NewListBucketsPaginator (svc , params , func (o * s3.ListBucketsPaginatorOptions ) {
78+ o .Limit = 100
8179 })
82- if err != nil {
83- log .Error ().Err (err ).Str ("bucket" , * bucket .Name ).Msg ("Could not get bucket location" )
84- continue
85- }
86- if location == nil {
87- log .Error ().Err (err ).Str ("bucket" , * bucket .Name ).Msg ("Could not get bucket location (returned null)" )
88- continue
80+ for paginator .HasMorePages () {
81+ output , err := paginator .NextPage (ctx )
82+ if err != nil {
83+ log .Warn ().Err (err ).Str ("region" , region ).Msg ("could not list S3 buckets in region" )
84+ break
85+ }
86+ for _ , bucket := range output .Buckets {
87+ bucketsWithRegions = append (bucketsWithRegions , bucketWithRegion {bucket : bucket , region : region })
88+ }
8989 }
90+ }
9091
91- region := string (location .LocationConstraint )
92- // us-east-1 returns "" therefore we set it explicitly
93- // https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html#API_GetBucketLocation_ResponseSyntax
94- if region == "" {
95- region = "us-east-1"
96- }
92+ res := []any {}
93+ for _ , bwr := range bucketsWithRegions {
9794 mqlS3Bucket , err := CreateResource (a .MqlRuntime , ResourceAwsS3Bucket ,
9895 map [string ]* llx.RawData {
99- "name" : llx .StringDataPtr (bucket .Name ),
100- "arn" : llx .StringData (fmt .Sprintf (s3ArnPattern , convert .ToValue (bucket .Name ))),
96+ "name" : llx .StringDataPtr (bwr . bucket .Name ),
97+ "arn" : llx .StringData (fmt .Sprintf (s3ArnPattern , convert .ToValue (bwr . bucket .Name ))),
10198 "exists" : llx .BoolData (true ),
102- "location" : llx .StringData (region ),
103- "createdTime" : llx .TimeDataPtr (bucket .CreationDate ),
104- "createdAt" : llx .TimeDataPtr (bucket .CreationDate ),
99+ "location" : llx .StringData (bwr . region ),
100+ "createdTime" : llx .TimeDataPtr (bwr . bucket .CreationDate ),
101+ "createdAt" : llx .TimeDataPtr (bwr . bucket .CreationDate ),
105102 })
106103 if err != nil {
107104 return nil , err
@@ -115,7 +112,6 @@ func (a *mqlAwsS3) buckets() ([]any, error) {
115112 }
116113
117114 if conn .Filters .General .IsFilteredOutByTags (mapStringInterfaceToStringString (tags )) {
118- log .Debug ().Interface ("log_group" , bucket .Name ).Msg ("excluding log group due to filters" )
119115 continue
120116 }
121117 }
0 commit comments