kunkunwoo@blog:~$ 거누권의 생각깜지

aws media convert (with terraform)

· 배운 것 · 7분 읽기

📖 서문

추석 연휴 이후 바로 백신을 맞아서 토일월화수목금토일 쉬는 엑조디아 발동했다. ( 노린건 아니다. ㅎ.. )

그러다보니 시간이 좀 남아, 회사에서 이야기 나왔던 주제가 생각이 나서 시도해보았다.
주제는 다음과 같다.
1. s3에 영상 업로드가 되면,
2. aws lambda를 이용해서 aws media convert를 켜주어 영상 포맷을 스트리밍이 가능한 형태로 conversion 시킨다.

ㄲ


🗺 계획

구성 시나리오
구성 시나리오

⛏ 실습 !!!

처음부터 하려니 막막해서 구글링을 하다보니 개꿀따리 코드를 찾았다!!
( 사용 방법이 잘 적혀있으니 git readme도 같이 참고하길 바란다. ) https://github.com/trackit/aws-workflow-video-on-demand/tree/master/mediaconvert_lambda

GitHub - trackit/aws-workflow-video-on-demand: AWS Workflow for video-on-demand with automated API


1. 사전 준비

aws cli 세팅을 이미 해놓은 상태여야 한다. ( 당연히 aws 상에 cli를 통해서 올리는거니까 해놔야함 )

1) 일반적인 세팅
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-files.html

구성 및 자격 증명 파일 설정 - AWS Command Line Interface

2) aws-vault 사용 세팅 ( 보안적으로 훨씬 더 뛰어나나, 이 예제는 iam api도 호출하므로 MFA 설정까지 해줘야 하는 번거로움이 있다. )
https://www.44bits.io/ko/post/securing-aws-credentials-with-aws-vault

aws-vault 사용법: AWS의 인증 정보 안전하게 사용하기


2. git clone 후, mediaconvert_lambda 안에 있는 job.json, mediaconvert.py를 원하는 설정으로 세팅

내가 필요한 media convert는 원래 코드에서 바꿀점은

1) mp4 변경이 필요 없었고 hls( m3u8 형태 )만 필요했다,
2) apple Hls 해상도나 bitrate도 preset되어 있는 밑의 저 두개를 사용할 예정이었다.

media convert에서 미리 정해져 있는 preset
media convert에서 미리 정해져 있는 preset

그래서

1) mediaconvert.py의 42번째줄을 없애거나 주석처리

42번째 줄
42번째 줄

2) job.json Outputs 수정 및 mp4관련해서 json 지우기

	"Outputs": [
                {
                    "Preset": "System-Avc_16x9_360p_29_97fps_1200kbps",
                    "NameModifier": "_360"
                },
                {
                    "Preset": "System-Avc_16x9_540p_29_97fps_3500kbps",
                    "NameModifier": "_540"
                }
            ],

그 외에는 변경사항 없다.


3. mediaconvert_lambda 를 zip으로 압축한다.

밑부터는 terraform을 이용한 방법이다. terraform을 이용하지 않을 거라면 aws lambda console로 가서 함수를 만들고 직접 이 코드를 업로드 하는 방식을 이용하면 된다. 이 방법은 따로 설명하지 않겠다.


4. main.tf 작성

자신의 상황에 맞춰 작성하면 됨, 모르겠으면 git readme 확인
자신의 상황에 맞춰 작성하면 됨, 모르겠으면 git readme 확인

5. terraform init & apply ㄱ

위에 1번 사전준비에서 1) 일반적인 세팅으로 했다면,

terraform init
terraform apply

2) aws-vault로 했으면,

terraform init
aws-vault exec {세팅한 profile 이름} -- terraform apply

3) aws console에서 lambda가 정상적으로 추가되었는지 확인

람다 함수가 추가됨을 확인
람다 함수가 추가됨을 확인

6. 결과

1) { s3 input bucket}/input 에 .mov, .mp4 형태의 파일을 업로드 했더니

영상 파일 업로드
영상 파일 업로드

2) 밑의 사진처럼 media convert 작업이 진행되는걸 볼수있었고,

3) { s3 output bucket }/파일이름/hls 에 잘 저장됨을 확인했다.

s3 output bucket에 conversion된 파일이 추가됨
s3 output bucket에 conversion된 파일이 추가됨

📚 추가적인 참고 사항

https://techblog.woowahan.com/2646/

좌충우돌 Terraform 입문기 | 우아한형제들 기술블로그

https://d2.naver.com/helloworld/7122%EF%BB%BF


aws에서 비교적 간단하게 media convert pipeline을 만들수 있는게 놀랍다. 역시 대감집은 다르다.
만약에 media convert가 다 되었을때의 처리도 해주고 싶다면, cloudwatch? 쪽을 추가적으로 보면 될거 같다.