23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
현재는 서비스 종료 되었지만 이프랜드 라는 서비스에서 AWS 로 동영상 스트리밍 서비스를 구축한 적이 있는데요.
구축한 사례를 공유 하고자 합니다.
동영상 스트리밍이 필요로 하는 기능은 크게 2가지 있었습니다.
운영자(관리자)가 밋업(Room) 에 특정 동영상을 업로드 및 플레이.
해당 밋업 성향에 맞는 동영상(홍보영상등)을 반복적으로 플레이
용량은 수백 메가 ~ 몇 기가까지 다양
유저가 자기의 게시물에 동영상 컨텐츠 업로드
동영상 스트리밍을 위해서는 용량이 큰 동영상 파일을 HLS(HTTP Live Streaming) 로 변환 하는 작업이 제일 중요한데요.
위 1번의 경우에는 AWS의 MediaConvert를 활용하여 변환 및 구축하였고, 2번의 경우에는 Azure 를 활용하여 FFmpeg를 azure function으로 감싸서 구축하였습니다.
AWS의 MediaConvert는 비용이 꽤 비싼 반면, 쉽게 풍부한 옵션을 사용할수 있으며, FFMpeg으로 직접 HLS를 만드는 경우에는 비용은 공짜이나 옵션 사용 이나 실패 했을때의 처리등의 구현 난이도가 올라가게 됩니다.
어떤걸 선택할지는 서비스별, 기능별로 판단이 필요합니다.
본 포스팅에서는 AWS를 활용한 동영상 스트리밍 구축 경험을 공유 드리고자 합니다.
이프랜드에서는 구축한 동영상 시스템을 Content Media Service(CMS) 라고 지칭했으며, 앞으로 이 포스팅에서도 CMS로 작성 하도록 하겠습니다.
이프랜드 CMS의 전체 시스템 구성도 입니다.
CMS Core 영역
AWS 인프라 영역입니다. S3, Lambda, MediaConvert등 여러 AWS 리소스가 사용되고 있습니다.
CMS Client 영역
CMS Core 영역을 연동하여 실제로 동영상 서비스를 운영하는 영역입니다.
단계별로 작업 진행 내용
단계 | 작업 명 | 작업 내용 |
|---|---|---|
1번 | 동영상 업로드 | 운영자가 어드민을 통해 동영상을 업로드 합니다. |
2번 | S3 저장 | 영상이 S3에 저장됩니다. |
3번 | S3 업로드 감시 | S3 의 업로드를 모니터링 하는 lambda가 동작합니다. |
4번 | 업로드 동영상 작업 의뢰 | lambda에서 업로드된 동영상을 mediaconvert에 작업을 요청합니다. 여기서 HLS 로 영상이 변환 됩니다. |
5번 | HLS 변환 완료 | 완료된 HLS 영상과 썸네일을 S3에 저장합니다. |
6번 | 작업 완료 감시 | eventbridge에서 영상 변환 작업을 감시합니다. |
7번 | 작업 결과 메타 정보 전달 | 변환 결과에 대한 메타 정보를 완료 감시 lambda에 전달 합니다. |
8번 | 메타 정보 어드민 전달 | 변환 결과에 대한 메타 정보를 서비스에 맞게 가공하여 CMS Client에 전달 합니다. |
9번 | DB 저장 | 변환 결과 메타 정보를 DB에 저장합니다. 메타 정보에는 영상 URL (CDN 주소)등이 포함됩니다. |
10번 | 영상 플레이 | 사용자는 Cloud Front를 통해서 변환된 영상을 스트리밍으로 볼수 있습니다. |
다음으로는 시스템 구성도에 있는 부분들을 하나씩 보면서 구체적으로 어떻게 구축했는지 살펴보겠습니다.
참고로 리소스 명은 이프랜드 서비스 기준으로 작성하였습니다.
역할 이름 | 역할 | 비고 |
|---|---|---|
{환경}-ifland-Role-MediaConvert | MediaConvert를 사용하기 위한 역할 | 역할 생성후 "{환경}-ifland-Role-LambdaVod" 에 인라인 정책으로 추가할 예정 |
{환경}-ifland-Role-LambdaVod | lambda를 실행하기 위한 역할 | lambda 생성시 해당 역할 사용 |
IAM → 역할 → 역할 생성
서비스 또는 사용 사례에 MediaConvert 선택
권한추가에 AmazonAPIGatewayInvokerFullAccess / AmazonS3FullAccess 가 자동으로 등록됨.
역할 이름 입력 후 역할 생성
IAM → 역할 → 역할 생성
서비스 또는 사용 사례에 Lambda 선택
권한 추가에서 AWSLambdaBasicExecutionRole 을 검색하여 체크
AWSLambdaVPCAccessExecutionRole 도 검색해서 체크
역할 이름 입력 후 생성
{환경}-ifland-Role-LambdaVod 역할 인라인에 {환경}-ifland-Role-MediaConvert 역할 추가
{환경}-ifland-Role-MediaConvert 의 ARN 복사
{환경}-ifland-Role-LambdaVod 에서 권한 → 권한추가 → 인라인 정책 생성
JSON 으로 변경후 아래 JSON 파일 복사
Resouce 부분에는 위에서 복사한 ARN 입력
(복사할 JSON 파일)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*",
"Effect": "Allow",
"Sid": "Logging"
},
{
"Action": [
"iam:PassRole"
],
"Resource": [
"복사한 {환경}-ifland-Role-MediaConvert 의 ARN"
],
"Effect": "Allow",
"Sid": "PassRole"
},
{
"Action": [
"mediaconvert:*"
],
"Resource": [
"*"
],
"Effect": "Allow",
"Sid": "MediaConvertService"
},
{
"Action": [
"s3:*"
],
"Resource": [
"*"
],
"Effect": "Allow",
"Sid": "S3Service"
}
]
}권한이 4개 부여된게 보여짐. 정책이름은 {환경}-ifland-policy-VodLambdaConnectMediaConvert 로 입력후 정책 생성
아직 갈길이 머네요. ㅠㅠ
AWS 리소스가 여러가지 들어가고, 또한 IAM 등의 기본적으로 설정할 것들이 은근 꽤 많습니다.
다음 포스팅에서는 위 IAM의 연장선인 "임시 자격 증명" 설정을 소개해 드리고, S3/lambda등등의 설정을 하나씩 살펴보겠습니다.
최대한 빠르게 연재 할수 있도록 노력하겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.