하는 데 의의를 둬春
Clound Function 업로드 시 VOD Station로 자동 인코딩 하기 + 파일 권한 지정 및 원본 파일 삭제 본문
[이렇게 사용하세요!] 동영상 서비스 자동화 .. : 네이버블로그 (naver.com)
[이렇게 사용하세요!] 동영상 서비스 자동화 하기 : 네이버 클라우드 플랫폼 VOD Station + Cloud Functio
안녕하세요, 누구나 쉽게 시작하는 클라우드 네이버 클라우드 플랫폼 ncloud.com 입니다. 온라인 쇼핑 후 ...
blog.naver.com
Cloud Function - VOD Station 자동 인코딩은 위 블로그를 참조하여 구현했다.
트리거에 시퀀스만 등록해야하는걸 액션까지 등록해놓고 왜 안되지 이러고 있었던 나는 바보일까...?
자동 인코딩을 위해선 동영상을 업로드하고 이벤트를 발생시킬 input bucket과 인코딩 후 파일을 저장할 output bucket이 필요하다. 하나의 bucket을 사용하면 재귀 호출이 일어나므로 절대 하지 말 것. 그렇게 경고했는데도 하나로 넣었다가 큰일날 뻔 했다.
인코딩 후 기존 업로드 파일과 썸네일 일부를 삭제하고 싶어 파이썬으로 액션을 만들었다.
virtual environment와 함께 패키징 하는 것도 위의 링크 참조했음.
cloud function에 접근하려면 boto3 모듈이 필요하므로 패키징 해야 했다.
https://guide.ncloud-docs.com/docs/storage-storage-8-2
Python용 AWS SDK (Boto3)
guide.ncloud-docs.com
(☝🏻 파이썬으로 Object Storage 사용하는 예제)
아 boto3 인스톨 할 때 pyjoke 대신 이거 넣으면 됨
그리고 파워쉘 쓰지마세요... cmd 쓰세요...
(virtualenv) c:\WorkingDir> pip install boto3==1.6.19
썸네일 삭제 액션은 output bucket에 이미지 파일이 생성(PUT)될 때
원본 파일 삭제 액션은 output bucket에 인코딩 된 동영상 파일이 생성(PUT) 때 실행하도록 한다.
(파일 업로드 -> 썸네일 추출 -> 인코딩 순서로 진행됨)
이미지 파일 관련 __main__.py
import requests
import json
import sys
import boto3
import time
def main(args):
print("Thumbnail uploaded :::::::::::::::::::::", time.strftime('%c', time.localtime(time.time())))
access_key = args["NCLOUD_ACCESS_KEY"]
secret_key = args["NCLOUD_SECRET_KEY"]
category_name = args["CATEGORY_NAME"]
service_name = args["SERVICE_NAME"]
endpoint_url = args["ENDPOINT_URL"]
region_name = args["REGION_NAME"]
input_bucket = args["INPUT_BUCKET"]
output_bucket = args["OUTPUT_BUCKET"]
object_name = args["object_name"]
s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key)
# 권한 부여
s3.put_object_acl(Bucket=output_bucket, Key=object_name, ACL='public-read')
# 02~10.jpg 포함되면 이미지 삭제
for i in range(2, 11):
if i < 10:
num = str(i).zfill(2)
else:
num = str(i)
thumb_suffix = "_" + num + ".jpg"
if object_name.find(thumb_suffix) > -1:
s3.delete_object(Bucket=output_bucket, Key=object_name)
print("Thumbnail", object_name, "has been deleted from", output_bucket, ":::", time.strftime('%c', time.localtime(time.time())))
return {"result" : "true"}
동영상 파일 관련 __main__.py
import requests
import json
import sys
import boto3
import time
def main(args):
print("Encoding file uploaded :::::::::::::::::::::", time.strftime('%c', time.localtime(time.time())))
access_key = args["NCLOUD_ACCESS_KEY"]
secret_key = args["NCLOUD_SECRET_KEY"]
service_name = args["SERVICE_NAME"]
endpoint_url = args["ENDPOINT_URL"]
region_name = args["REGION_NAME"]
input_bucket = args["INPUT_BUCKET"]
output_bucket = args["OUTPUT_BUCKET"]
object_name = args["object_name"]
prefix = object_name.replace("_default.mp4", "")
s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key)
# 파일 권한 설정
try:
s3.put_object_acl(Bucket=output_bucket, Key=object_name, ACL='public-read')
except Exception as e:
print("Exception occured from put_object_acl", e)
# 원본파일 삭제
objects_to_delete = s3.list_objects(Bucket=input_bucket, Prefix=prefix)
delete_keys = {'Objects' : []}
delete_keys['Objects'] = [{'Key' : k} for k in [obj['Key'] for obj in objects_to_delete.get('Contents', [])]]
s3.delete_objects(Bucket=input_bucket, Delete=delete_keys)
for key in delete_keys:
print("Original", key, "has been deleted from :::", time.strftime('%c', time.localtime(time.time())))
return {"result" : "true"}
'기타' 카테고리의 다른 글
[Tomcat] 리눅스에서 tomcat 포트번호가 충돌날 때 (0) | 2023.03.13 |
---|