이 글은 나와 같이 AWS MediaConvert를 실행시키기 위해 Lambda를 사용하는데, Setting 실수를 하는 사람들에게 도움이 되고자 적었다.
🥾 사용 배경
먼저, 나는 동영상 스트리밍을 위해 AWS MediaConvert를 사용하기로 하였다. 그 이유로 AWS MediaConvert는 강력한 동영상 트랜스코딩 서비스를 제공한다. 이 말은 우리가 동영상을 업로드 했을 때 다양한 형식으로 처리해서 저장한다는 것이다. 예를 들어 썸네일을 제공한다거나, 원하는 구간을 잘라서 저장해주는 기능을 제공해준다. 그 중에서도 특히 HLS(HTTP Live Streamng)와 같은 스트리밍 프로토콜을 지원하기도 하고 AWS를 활용한 인프라 구성을 많이 해놓은 상태이기 때문에 동영상 스트리밍을 해야하는 내 프로젝트에 적절하였다.
Mediaconvert의 주요 역할은 사용자가 동영상을 업로드하여 프로젝트 내 세팅된 S3 Bucket(Input)에 동영상 파일이 저장되면, 해당 파일을 AWS MediaConvert가 스트리밍을 할 수 있도록 변환시킨 파일들을 이전과 다른 Bucket(Output)에 저장을 하는 것이다.
이 과정에서 Input Bucket에 파일을 올리면 MediaConvert가 변환하도록 명령하는 함수가 필요하다. 그것이 바로 AWS Lambda의 역할이다.
Input Bucket에서 지정한 경로에 파일이 업로드 되면 AWS Lambda에서 Python으로 구현한 함수를 실행시켜 Mediaconvert를 실행시켰다.
사용 프로세스
- 사용자의 파일 업로드
- S3 Input Bucket에 업로드
- AWS Lambda 함수 실행
- MediaConvert 변환작업 시작
- 변환이 완료되면 Output Bucket에 변환 파일 저장
🙅 문제 배경
분명 AWS Lambda 함수를 모두 적절하게 구현해주고 S3의 원하는 Bucket에 업로드 해주면 Trigging되는 설정도 하였다.
하지만.. 동영상을 업로드해도 MediaConvert가 작업을 수행하지 않는 것이다. 업로드 되어야 하는 S3 Input Bucket에는 동영상 파일이 잘 업로드 되어있는 것을 보아 AWS Lambda가 정상 작동을 하지 않는 다는 것을 알 수 있었다.
📝 오류 퀴즈
AWS Lambda를 세팅하는 것에 있어서 2가지 문제를 마주하였다. 진짜 별거 아닌데 삽질을 많이했다..
그 이유는 그냥 찍어 맞추려고 했기 때문이다. 어떤 점이 문제인지 전혀 모른체 그냥 뭐가 잘못됐는지 들여다봤다. 내가 생각하기에 개발자들이 가장 시간을 많이 들이는 이유가 이것 때문이 아닐까 생각한다.
우리가 해야할 일은 오류를 마주하면 어떤 오류인지 맞추는 퀴즈같은 것이 아니라 해당 오류를 고치는 것이다. 어떤 오류인지는 로그가 다 알려준다. 정말 중요하다. 로그를 보자. 나혼자 퀴즈를 풀지 말고 정답을 알려주는 로그를 보고 오류를 알자..
✅ 정답보기
🚫 문제 1. - Handler 이름 형식
먼저 나는 문제상황을 파악하기 위해 CloudWatch에서 제공하는 해당 Lambda의 Metric을 살펴보았다.
아래 사진을 보면 에러가 잔뜩 발생한 것을 볼 수 있다.

아래 사진은 마찬가지로 CloudWatch에서 제공하는 위 Lambda 함수 에러에 대한 로그이다.

위 로그에서 가장 많이 발생하는 첫 번째 로그를 보면 HandlerNotFound 에러가 발생하는 것을 볼 수 있다.
Lambda의 Handler 이름을 지정해야 하는데 해당 Handler의 이름은 [파일이름].[함수이름] 으로 되어야 한다.
아래의 예시처럼 lambda_function.py 라는 파일 이름 내에 handler()라는 함수로 구현되어 있다면, Handler이름으로 lambda_function.handler라고 작성해야 하는 것이다.


난 해당 형식을 지키지 않고 handler의 이름을 지었고 위 오류가 발생한 것이었다.
이 이름을 수정하고 나는 mediaconvert가 실행될 거라고 기뻐하였다… 하지만… 아니었다.
🚫 문제 2. - Aws Lambda에 IAM role 부여
잔뜩 기대를 하고 Mediaconvert 작업 결과를 봤지만 실행되지 않았다.
다시 한번 Lambda함수가 제대로 실행되지 않았는지 Metric을 확인하였다.

하지만 위를 보면 알 수 있듯이 Lambda함수는 모두 성공하였고, 의문이 든채 다시 로그를 살펴봤다.

위 로그를 살펴보면 에러가 발생한 이유는 Lambda함수에 실행할 권한을 부여하지 않아 발생하였다고 한다.
사실 필자는 IAM계정을 만들어 권한을 부여하여 사용하지 않고, Root 계정에서 인프라를 구성하고 있었기에 권한 관련 에러는 생각하지 못했다.
아래와 같이 Mediaconvert 실행에 관련한 권한을 부여해줬다.

다시 실행해보니 mediaconvert가 제대로 실행되는 모습을 볼 수 있다.

🙏 결론
로그를 보자!!!!!!
로그를 보면 오류 발생 원인을 쉽게 찾을 수 있다. 어떤 오류인지 맞추기 퀴즈는 하지 말자
'Infra' 카테고리의 다른 글
Docker in Docker 문제 (0) | 2024.09.04 |
---|