내일배움캠프

230518 s3 폴더 삭제(폴더 내 모든 객체 삭제)

Neda 2023. 5. 18. 20:51

S3 폴더 삭제

계속 데이터 생성 삭제 테스트를 하면서 멤버를 생성하면서 이미지를 업로드 하다 보니

s3에 쌓이기만 해서 지우는 함수를 만들기로 했다.

폴더 내의 모든 객체 정보 가져오기

폴더 경로를 Prefix로 전달

ex. 경로가 버킷/폴더/image.png 일경우 Prefix는 '폴더/'이다

while문 내부에서 ListObjectV2Command를 send()하여 객체의 리스트를 가져오고 전부 합쳐 반환한다.

async function getObjectList(bucketName, folderPrefix) {

        try {
            const command = new ListObjectsV2Command({
            Bucket: bucketName,
            Prefix: folderPrefix
        });

        let isTruncated = true;

        console.log("Your bucket contains the following objects:\n")
        let contentList = [];
        while (isTruncated) {
            const { Contents, IsTruncated, NextContinuationToken } = await client.send(command);
            contentList = [...contentList,...Contents];
            isTruncated = IsTruncated;
            command.input.ContinuationToken = NextContinuationToken;
        }
        // console.log(contentList);
        return contentList
      } catch (err) {
        console.error(err);
      }
}

반환되는 결과:

[
  {
    Key: 'b510db3a-57ac-49af-9535-c100073291b6/24103c6b-c361-48b1-93ab-337d2e03d098.png',
    LastModified: 2023-05-18T03:54:34.000Z,
    ETag: '"c2aa2d34961feb11db8bdc8f9d6d373e"',
    ChecksumAlgorithm: undefined,
    Size: 263,
    StorageClass: 'STANDARD',
    Owner: undefined
  },
  {
    Key: 'b510db3a-57ac-49af-9535-c100073291b6/ff54ae8f-f330-432a-8df4-a9f508081a91.png',
    LastModified: 2023-05-18T03:55:11.000Z,
    ETag: '"0ec336c8e43d0db6dd6f16de1f38a70d"',
    ChecksumAlgorithm: undefined,
    Size: 4581,
    StorageClass: 'STANDARD',
    Owner: undefined
  }
]

 

가져온 모든 객체 삭제하기

deleteObjects는 객체 배열을 받아서 한 번에 여러 객체를 삭제할 수 있다.

async function deleteObjects(bucketName,objectList) {
  try {
    const deleteObjectsCommand = {
      Bucket: bucketName,
      Delete: {
        Objects: objectList,
        Quiet: true
      }
    };
    const response = await client.send(new DeleteObjectsCommand(deleteObjectsCommand));
    return response
  } catch (err) {
    console.error(err)
  }
}

반환되는 결과:

2023-05-18T10:53:35.377Z	8131cdc1-f237-405d-9d1f-295f68cdd6bd	INFO	{
  '$metadata': {
    httpStatusCode: 200,
    requestId: '7G4E4ZP89F976BWT',
    extendedRequestId: 'vasVeQhM24P/64CaNfLibOkwr9goDoCXGr8p78YDKDYJnWCbceUCWYTvG4Ps/H8sCCdHth2UxLM=',
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  }
}

 

ListObjectsV2Command

 

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/preview/client/s3/command/ListObjectsV2Command/

 

docs.aws.amazon.com

DeleteObjectsCommand

 

 

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/preview/client/s3/command/DeleteObjectsCommand/

 

docs.aws.amazon.com


한글로 된 문서가 잘 없지만, 아마존이 sdk를 잘 만들어둬서 사용하기 쉬웠다.

에러났을 때는 어떻게 해야 할지 모르겠다. 어디서 다시 재시도를 요청하는 것이 좋은지 모르겠다.