@@ -76,15 +76,52 @@ func (b *Bucket) Update(ctx context.Context) error {
7676}
7777
7878func (b * Bucket ) Delete (ctx context.Context ) error {
79- input := s3.DeleteBucketInput {
79+ listInput := s3.ListObjectsV2Input {
8080 Bucket : aws .String (b .Identifier ),
8181 }
8282
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+ }
8692 return err
8793 }
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
88125 }
89126
90127 b .Resource = nil
0 commit comments