@@ -76,15 +76,52 @@ func (b *Bucket) Update(ctx context.Context) error {
76
76
}
77
77
78
78
func (b * Bucket ) Delete (ctx context.Context ) error {
79
- input := s3.DeleteBucketInput {
79
+ listInput := s3.ListObjectsV2Input {
80
80
Bucket : aws .String (b .Identifier ),
81
81
}
82
82
83
- if _ , err := b .Client .Services .S3 .DeleteBucket (ctx , & input ); err != nil {
84
- var e smithy.APIError
85
- if errors .As (err , & e ) && e .ErrorCode () != "NoSuchBucket" {
83
+ for paginator := s3 .NewListObjectsV2Paginator (b .Client .Services .S3 , & listInput ); paginator .HasMorePages (); {
84
+ page , err := paginator .NextPage (ctx )
85
+
86
+ if err != nil {
87
+ var e smithy.APIError
88
+ if errors .As (err , & e ) && e .ErrorCode () == "NoSuchBucket" {
89
+ b .Resource = nil
90
+ return nil
91
+ }
86
92
return err
87
93
}
94
+
95
+ if len (page .Contents ) == 0 {
96
+ break
97
+ }
98
+
99
+ var objects []types.ObjectIdentifier
100
+ for _ , object := range page .Contents {
101
+ objects = append (objects , types.ObjectIdentifier {
102
+ Key : object .Key ,
103
+ })
104
+ }
105
+
106
+ input := s3.DeleteObjectsInput {
107
+ Bucket : aws .String (b .Identifier ),
108
+ Delete : & types.Delete {
109
+ Objects : objects ,
110
+ },
111
+ }
112
+
113
+ if _ , err = b .Client .Services .S3 .DeleteObjects (ctx , & input ); err != nil {
114
+ return err
115
+ }
116
+ }
117
+
118
+ deleteInput := s3.DeleteBucketInput {
119
+ Bucket : aws .String (b .Identifier ),
120
+ }
121
+
122
+ _ , err := b .Client .Services .S3 .DeleteBucket (ctx , & deleteInput )
123
+ if err != nil {
124
+ return err
88
125
}
89
126
90
127
b .Resource = nil
0 commit comments