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"