Cloud Functions를 활용한 자동 인코딩 구현
- 인쇄
- PDF
Cloud Functions를 활용한 자동 인코딩 구현
- 인쇄
- PDF
기사 요약
이 요약이 도움이 되었나요?
의견을 보내 주셔서 감사합니다.
VOD Station은 Object Storage 버킷과 연동하여 인코딩을 수행하나 버킷에 파일이 업로드 되었는지 여부를 감지하여 자동 인코딩하는 기능을 제공하지 않습니다. 대신 Object Storage의 이벤트 관리 기능과 Cloud Functions를 활용하여 유사한 기능을 구현할 수 있습니다.
자동 인코딩 순서
- Object Storage 미디어 파일 업로드
- Object Storage에서 업로드 이벤트 트리거
- Cloud Functions를 통해 VOD Station 인코딩 API 요청
- VOD Station에서 인코딩 수행
구현 가이드
다음은 Object Storage와 Cloud Functions, VOD Station API를 이용해 자동 인코딩을 구현할 수 있는 예시입니다.
- Object Storage 원본 파일을 저장할 버킷에 이벤트 설정
- Object Storage > Bucket Management > 이벤트를 설정할 버킷의 이벤트 관리 메뉴 클릭
- 이벤트 관리 팝업 > 생성 버튼 클릭
- 버킷 이벤트 생성
- 이벤트 이름 입력
- 필터 설정: TBD
- 이벤트 유형: 객체 생성(PUT)
- 신규 파일 업로드는 POST와 PUT 두 가지 이벤트가 동시에 발생, 따라서 POST, PUT을 모두 선택하면 인코딩 액션 트리거가 두 번 될 수 있습니다.
- 덮어쓰기는 PUT 이벤트만 발생합니다.
- 대상: Cloud Functions
- 미리 생성해둔 트리거가 없다면 트리거 생성 버튼을 클릭하여 트리거를 생성합니다.
- 트리거 생성 팝업에서는 이름만 입력하여 생성 버튼 클릭합니다.
- 트리거에 연결할 액션(수행할 로직)을 설정해야 하지만, 미리 액션을 만들어두지 않았다면 생략합니다.
- 생성된 트리거를 선택
- 이 단계에서 연결된 액션은 없어도 됩니다.
- 재귀 호출 주의 안내를 확인한 후 체크합니다.
- 미리 생성해둔 트리거가 없다면 트리거 생성 버튼을 클릭하여 트리거를 생성합니다.
- Cloud Functions 에서 Action 설정
- Cloud Functions > Action > Action 생성 버튼 클릭
- Action 생성 페이지에서 트리거 조건 설정
- 트리거 종류: Object Storage를 선택합니다.
- 이름: 이전 단계에서 만들어둔 트리거 선택 후 추가 버튼을 클릭합니다.
- 재귀 호출 주의 안내를 확인 후 체크합니다.
- Action의 로직 설정
- 패키지: 원하는 패키지(그룹)을 선택, 없다면 신규 생성합니다.
- 타입: 기본 (필요에 따라 시퀀스 선택 가능)
- 이름: 생성할 액션의 이름을 입력합니다.
- 소스코드: 생성할 액션에서 수행할 비즈니스 로직을 고객이 직접 구현해야하며, 본 가이드 하단에 소스코드 예시를 참고해 주십시오.
자동 인코딩 Action 소스 코드 설정
다음은 Cloud Functions 설정 예시입니다.
참고하여 구현 부탁드리며, 예제는 정상 동작을 보장하지 않습니다.
Example parameter
- Default Parameter (JSON Object)
- 아래와 같이 설정합니다.
{ "base_url": "https://vodstation.apigw.fin-ntruss.com", "api_url": "/api/v2/category/{CATEGORY-ID}/add-files", "access_key": "{API-ACCESS-KEY}", "secret_key": "{API-SECRET-KEY}" }
{CATEGORY-ID}
: 인코딩을 수행할 카테고리 ID 값으로 치환합니다.{API-ACCESS-KEY}
: 사용자의 Access Key 값으로 치환합니다.{API-SECRET-KEY}
: 사용자의 Secret Key 값으로 치환합니다.
- Default Parameter (JSON Object)
Example source code
- 예시는 Python 3.7 에서 구현하였으며, 다른 언어로 구현할 수 있습니다.
import hashlib import hmac import base64 import requests import time import json def make_signature(url, timestamp, access_key, secret_key): timestamp = int(time.time() * 1000) timestamp = str(timestamp) secret_key = bytes(secret_key, "UTF-8") method = "PUT" message = method + " " + url + "\n" + timestamp + "\n" + access_key message = bytes(message, "UTF-8") sign_key = base64.b64encode( hmac.new(secret_key, message, digestmod=hashlib.sha256).digest() ) print(sign_key) return sign_key def make_header(timestamp, access_key, sign_key): headers = { "Content-Type": "application/json; charset=utf-8", "x-ncp-apigw-timestamp": timestamp, "x-ncp-iam-access-key": access_key, "x-ncp-apigw-signature-v2": sign_key, } return headers def main(args): object_name = args.get("object_name") input_bucket_name = args.get("container_name") api_url = args["api_url"] full_url = f'{args["base_url"]}{api_url}' timestamp = str(int(time.time() * 1000)) sign_key = make_signature( api_url, timestamp, args["access_key"], args["secret_key"] ) headers = make_header(timestamp, args["access_key"], sign_key) try: res = requests.put(full_url, headers=headers, data=json.dumps({'bucketName' : input_bucket_name, 'pathList': [ object_name ] })) if res.status_code == 200: return {"input_bucket": input_bucket_name, "object_path": object_name, "res": res.text, "done": True} else: raise Exception({"done": False, "error_message": res.text}) except Exception as e: raise Exception({"done": False, "error_message": str(e)})
이 문서가 도움이 되었습니까?