quiet files cli aws amazon-web-services amazon-ec2 amazon-s3

amazon web services - files - Obtiene el último objeto modificado desde S3 CLI



s3 client sync (4)

Tengo un caso de uso en el que visualizo programáticamente una instancia EC2, copio un archivo ejecutable de S3, lo ejecuto y cierro la instancia (hecho en datos de usuario). Necesito obtener solo el último archivo agregado de S3. ¿Hay alguna forma de obtener el último archivo / objeto modificado de un depósito S3 utilizando la CLI?


Lo siguiente es script bash, que descarga el último archivo de un Bucket S3. En su lugar, utilicé el comando AWS S3 Synch para que no se descargara el archivo de S3 si ya existía.

--excluir, excluye todos los archivos

--include, incluye todos los archivos que coinciden con el patrón

#!/usr/bin/env bash BUCKET="s3://my-s3-bucket-eu-west-1/list/" FILE_NAME=`aws s3 ls $BUCKET | sort | tail -n 1 | awk ''{print $4}''` TARGET_FILE_PATH=target/datdump/ TARGET_FILE=${TARGET_FILE_PATH}localData.json.gz echo $FILE_NAME echo $TARGET_FILE aws s3 sync $BUCKET $TARGET_FILE_PATH --exclude "*" --include "*$FILE_NAME*" cp target/datdump/$FILE_NAME $TARGET_FILE

ps Gracias @David Murray


Puede enumerar todos los objetos en el depósito con aws s3 ls $BUCKET --recursive :

$ aws s3 ls $BUCKET --recursive 2015-05-05 15:36:17 4 an_object.txt 2015-06-08 14:14:44 16322599 some/other/object 2015-04-29 12:09:29 32768 yet-another-object.sh

Están ordenados alfabéticamente por clave, pero esa primera columna es la última vez que se modificó. Un orden rápido los reordenará por fecha:

$ aws s3 ls $BUCKET --recursive | sort 2015-04-29 12:09:29 32768 yet-another-object.sh 2015-05-05 15:36:17 4 an_object.txt 2015-06-08 14:14:44 16322599 some/other/object

tail -n 1 selecciona la última fila, y awk ''{print $4}'' extrae la cuarta columna (el nombre del objeto).

$ aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk ''{print $4}'' some/other/object

Por último, pero no menos importante, aws s3 cp en aws s3 cp para descargar el objeto:

$ KEY=`aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk ''{print $4}''` $ aws s3 cp s3://$BUCKET/$KEY ./latest-object


Si se trata de un archivo recién cargado, puede usar Lambda para ejecutar un fragmento de código en el nuevo objeto S3.

Si realmente necesita obtener la más reciente, puede nombrar sus archivos con la fecha primero, ordenar por nombre y tomar el primer objeto.


aws s3api list-objects-v2 --bucket "bucket-name" |jq -c ".[] | max_by(.LastModified)|.Key"