본문 바로가기

Programming/Tip&Informaion

[Firehose] An error occurred (InvalidArgumentException) when calling the PutRecord operation: This operation is not permitted on KinesisStreamAsSource delivery stream type. 해결

이전 글에 이어서 제대로 쌓이지 않은 로그들을 재처리하기 위해서 processing-failed/ 내의 데이터를 재전송하는 작업을 했다.

작업을 처리 중에

An error occurred (InvalidArgumentException) when calling the PutRecord operation: This operation is not permitted on KinesisStreamAsSource delivery stream type.

에러가 발생했다. (처음에는 PutRecordBatch 로 했는데 안 돼서 PutRecord로 변경했는데도 똑같이 발생)

여기저기 찾아봤는데 aws cli 에선 

--cli-binary-format raw-in-base64-out 인자를 추가하라는 글이 많았다.

그런데 processing-failed/ 내의 파일들을 읽으려면 gzip, base64, json 처리가 필요해서 python으로 해결하고 싶었다.

그래서 생각해보다 Firehose 말고 Kinesis로 전송하는 걸로 변경해봤다. (사실 처음에는 lambda에 전송하려 했는데 lambda에 생각보다 많은 값을 요구해서 채우는 게 쉽지 않아 kinesis로 우회했다.)

다행히 Kinesis를 사용하니 정상적으로 작동되는 걸 확인할 수 있었다. 그런데 put_record를 사용했더니 속도가 매우 느렸다.. put_records로 변경하여 해결할 수 있었다.

 

근데 aws는 processing-failed에 있는 걸 재전송하는 건 안 만들어주는건가..?