Deleting a file after transcoding with AWS Lambda and Elastic Transcoder

让人想犯罪 __ 提交于 2019-12-25 08:59:46

问题


I'm using a Lambda python script to call Elastic Transcoder on a file that I upload. How do I delete the file after transcoding?

At the moment, my code creates the job, and then deletes the source file straight away, i.e., before the job even has a chance to run. :-)

How can I wait for Elastic Transcode to finish?

import os
import boto3
import urllib

def lambda_handler(event, context):
  transcoder = boto3.client('elastictranscoder', 'ap-southeast-2')
  pipeline_id = get_pipeline(transcoder, 'MP4 Transcode')
  base_filename = os.path.basename(event['Records'][0]['s3']['object']['key'])
  output = transcoder.create_job(
      PipelineId=pipeline_id,
      Input={
      'Key': create_aws_filename('uploads', base_filename, ''),
      'FrameRate': 'auto',
      'Resolution': 'auto',
      'AspectRatio': 'auto',
      'Interlaced': 'auto',
      'Container' : 'auto'
  })
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key'])
print("deleting " + key)  
boto3.client('s3').delete_object(Bucket=bucket, Key=key)

回答1:


You basically have to poll Elastic Transcoder for the job's status (every 30 seconds, for example), and wait until the job is completed. Once the job is completed, you can delete your S3 source file.

Using boto3, you can retrieve a job's status like this:

transcoder = boto3.client('elastictranscoder')
job = transcoder.read_job(Id=job_id)
status = job['Job']['Status']

Or alternatively, you can use the job_complete waiter.



来源:https://stackoverflow.com/questions/43105822/deleting-a-file-after-transcoding-with-aws-lambda-and-elastic-transcoder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!