Depositos: Clasificación de objetos AWS S3 con Lambda

[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]

Clasificación de objetos de AWS S3 con Lambda

Este artículo ayuda a mover objetos recién cargados a sus respectivos buckets (depositos) S3 con la ayuda de la función Lambda usando Python.

[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]


Paso 1:

Cree tres buckets (depositos) de la siguiente manera,

  • Deposito común

  • Deposito de jpg

  • Deposito de mp3


Paso 2:

Cree la función Lambda con el siguiente código:

Asegúrese de sustituir con sus propios valores siempre que sea necesario

Código:

import boto3
import urllib.parse
import jsons3 = boto3.resource('s3')
s3_bucket=boto3.client('s3')
def lambda_handler(event, context):
    
    source_bucket = event['Records'][0]['s3']['bucket']['name']
    jpg_bucket = s3.Bucket('jpg-bucket--001')
    mp3_bucket = s3.Bucket('mp3-bucket--001')source_bucket = s3.Bucket(source_bucket)for objects in source_bucket.objects.all():
        
        print(objects)if objects.key.endswith('.jpg'):
            
            print(f"{objects.key} to jpg bucket")
      
            copy_object = jpg_bucket.Object(objects.key)
            copy_object.copy({'Bucket': objects.bucket_name,
                              'Key': objects.key}) 
           
            s3_bucket.delete_object(Bucket=objects.bucket_name, Key=objects.key)
            
        elif objects.key.endswith('.mp3'):
            
            print(f"{objects.key} to mp3 bucket")copy_object = mp3_bucket.Object(objects.key)
            copy_object.copy({'Bucket': objects.bucket_name,
                              'Key': objects.key})
            s3_bucket.delete_object(Bucket=objects.bucket_name, Key=objects.key)
        
    return {
       'statusCode': 200,
       'body': json.dumps('Successfully moved jpg & mp3 files then deleted them from source bucket')
   }

Paso 3:

Agregue el disparador Lambda como depósito s3, luego seleccione el depósito común de las opciones

depositos


Etapa 4:

Con el rol básico de ejecución de lambda, esta función no podrá hacer su trabajo. Por lo tanto, agregue la política adecuada para que esta función funcione.

Ejemplo de política a continuación:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

La política anterior tiene acceso total a S3 y acceso limitado a los registros de CloudWatch para todos los recursos de la cuenta, esto se proporcionó solo con el propósito de este tutorial.

Como práctica recomendada, siempre defina permisos para recursos específicos y limite los permisos tanto como sea posible.


Paso 5:

· Ahora agregue un archivo con la extensión .jpg al depósito común y verifique el depósito jpg, el archivo .jpg se copiará en ese depósito y el mismo archivo se eliminará del depósito de origen, que es el depósito común.

· Si repite lo mismo con el archivo de extensión .mp3, se copiará en el depósito de mp3 y se eliminará del depósito común.

Pantalla de resultados:

  • Archivo subido en depósito común

depositos

  • Archivo copiado en el depósito jpg

depositos

  • Archivo copiado al depósito de mp3

depositos

  • Archivo eliminado del depósito de origen

depositos

Con la función anterior, puede modificar el código de acuerdo con sus necesidades y convertirlo en una solución más eficiente para cumplir con sus sólidos objetivos organizacionales.

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]

Diego Pacheco

Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Recent Post

[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]