본문 바로가기
golang

[golang] aws-sdk-go-v2 aws resource 정보를 max value 이상 가져오기

by devjh 2022. 4. 28.
반응형

이번 게시글에서는 aws-sdk-go-v2에서 제공하는 resource의 정보를 max value 이상 가져오는방법에 대해 정리합니다.

 

aws sdk에서 제공하는 클라이언트를 이용해 aws의 데이터를 가져올때, 전체 데이터를 요청해도 지정된 갯수 이상으로 가져오지 못하는 경우가 있습니다.

 

이런 경우에는 데이터를 모두 내려주지 않았다는 의미로 Istrucated에 값이 True로 설정되어 내려옵니다.

 

Istrucated의 값이 true라면 KeyMarker에 저장된 토큰값을 다시 넘겨서 조회되면 페이징, 커서 의 개념처럼 이전에 조회했던 부분부터 다시 1000개를 조회해 올 수 있습니다.

 

최초에 조회할때는 keyMarker를 비어있는 문자열로, 이후에는 내려온 값으로 조회해서 구현할 수 있습니다(sdk별로 비어있는 문자열을 허용하지 않는경우는 do while 방식을 사용)

아래의 소스코드는 버전관리된 object list를 가져오지만 타 resource도 cursor 개념으로 끊어서 가져오면 됩니다.

1. 소스코드

func foo() {
   var listObjectVersionsOutputList []*s3.ListObjectVersionsOutput
   bucketName := "your bucket"
   keyMarker := ""
   for {
      objectVersionsOutput, err := client.ListObjectVersions(context.TODO(), &s3.ListObjectVersionsInput{
         Bucket:    &bucketName,
         KeyMarker: &keyMarker,
      })
      if err != nil {
         panic(err)
      }
      listObjectVersionsOutputList = append(listObjectVersionsOutputList, objectVersionsOutput)
      log.Printf("[%d]개 단위로 쪼개서 가져옵니다, 첫번째 object는 %s 입니다. \n", 
         len(objectVersionsOutput.Versions), 
         *objectVersionsOutput.Versions[0].Key)
         
      if !objectVersionsOutput.IsTruncated {
         break
      }
      keyMarker = *objectVersionsOutput.NextKeyMarker
   }
   fmt.Println(len(listObjectVersionsOutputList))
}

 

반응형

댓글