Estoy usando una secuencia de comandos Lambda Python para llamar a Elastic Transcoder en un archivo que subo. ¿Cómo elimino el archivo después de la transcodificación?
En este momento, mi código crea el trabajo y luego elimina el archivo fuente de inmediato, es decir, antes de que el trabajo tenga la oportunidad de ejecutarse. :-)
¿Cómo puedo esperar a que termine Elastic Transcode?
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)Básicamente, tiene que sondear a Elastic Transcoder para conocer el estado del trabajo (cada 30 segundos, por ejemplo) y esperar hasta que se complete el trabajo. Una vez que se completa el trabajo, puede eliminar su archivo fuente S3.
Usando boto3, puede recuperar el estado de un trabajo de esta manera:
transcoder = boto3.client('elastictranscoder') job = transcoder.read_job(Id=job_id) status = job['Job']['Status'] O alternativamente, puede usar el camarero job_complete .