El objetivo de este programa es enviar archivos almacenados en la máquina local a un bucket en el servicio S3 de AWS.
Es importante destacar que para que funcione el envío, las credenciales dadas a boto3 (librería cliente de aws) deben tener permisos de escritura.
- Python 3
- dependencias (mirar archivo
requirements.txt
)
Se recomienda la utilización de un entorno virtual, puedes crearlo dentro de la misma carpeta.
virtualenv venv
En caso de tener python 2.7 por defecto es necesario definir que sea python3 para el entorno virtual
virtualenv -p python3 venv
Luego se debe activar el entorno virtual e instalar las dependencias.
# activar
source venv/bin/activate
# instalar dependencias
pip install -r requirements.txt
El siguiente paso es generar el archivo que almacenará las llaves de acceso a aws. Este archivo debe llamarse .env
y su contenido es el siguiente:
AWS_ACCESS_KEY_ID='PUT_HERE_YOUR_ACCESS_KEY'
AWS_SECRET_ACCESS_KEY='PUT_HERE_YOUR_SECRET_ACCESS_KEY'
PUT_HERE_YOUR_ACCESS_KEY
y PUT_HERE_YOUR_SECRET_ACCESS_KEY
se obtienen de un usuario de aws (https://console.aws.amazon.com/iam/home?#/users), sección 'Credenciales de seguridad'
Para comprobar que todo está en orden puede ejecutar los tests.
python -m unittest discover
Existen dos comandos: upload_to_s3.py
y delete_object_in_s3.py
. El primero sube uno o más archivos a un bucket en S3 y el segundo permite eliminar un objecto (archivo) en s3.
python upload_to_s3.py ruta/a/archivo*.gz nombre_bucket
Notar que la ruta al archivo puede ser un patrón, esto permite subir varios archivos a la vez.
# consultar ayuda
python upload_to_s3.py --help
usage: upload_to_s3.py [-h] [--omit-filename-check] [--replace]
file [file ...] bucket
move document to S3 bucket
positional arguments:
file data file path. It can be a pattern, e.g. /path/to/file or /path/to/file*.zip
bucket bucket name. Valid options are:
optional arguments:
-h, --help show this help message and exit
--omit-filename-check It Accepts filenames with distinct format to YYYY-mm-dd.*
--replace It replaces file if exists in bucket, default behavior ask to user a confirmation
python delete_object_in_s3.py nombre_archivo nombre_bucket
A diferencia del comando anterior el primer parámetro es el nombre del archivo, no la ruta en el disco local.
# consultar ayuda
python delete_object_in_s3.py --help
usage: delete_object_in_s3.py [-h] filename bucket
delete an object from S3 bucket
positional arguments:
filename filename to delete in bucket
bucket bucket name. Valid options are:
optional arguments:
-h, --help show this help message and exit
python download_from_s3.py nombre_archivo nombre_bucket --destination-path /home/user
El primer parámetro es el nombre del archivo a descargar, el segundo corresponde al nombre del bucket en que se
encuentra el archivo, y por último, existe un parámetro opcional que permite definir la ruta donde se guardará el
archivo, si es omitido el archivo será guardado en el current working directory
(dado por os.getcwd()
)
# consultar ayuda
python download_from_s3.py --help
usage: download_from_s3.py [-h] [--destination-path DESTINATION_PATH]
filename [filename ...] bucket
download one or more objects from S3 bucket
positional arguments:
filename one or more filenames
bucket bucket name
optional arguments:
-h, --help show this help message and exit
--destination-path DESTINATION_PATH
path where files will be saved, if it is not provided
we will use current path
python delete_bucket_from_s3.py nombre_bucket
El parámetro es el nombre del bucket a eliminar. Este comando eliminará el bucket junto a todos sus archivos
usage: delete_bucket_from_s3.py [-h] bucket_name
delete S3 bucket
positional arguments:
bucket_name bucket name
optional arguments:
-h, --help show this help message and exit
python move_bucket_from_s3.py bucket_origen bucket_destino --filename nombre_archivo --extension filtro_de_extensiones
El primer parámetro es el bucket desde donde se copiarán los archivos. El segundo comando es el bucket al que se copiarán los archivos. El parámetro opcional nombre_archivo es para solo mover uno o más archivos según nombre de archivo. El último parámetro opcional, filtro_de_extensiones, permite mover los archivos que solo contengan las extensiones indicadas. Ej: .viajes
# consultar ayuda
usage: move_bucket_from_s3.py [-h] [-f [FILENAME [FILENAME ...]]] [-e [EXTENSION_FILTER [EXTENSION_FILTER ...]]]
source_bucket target_bucket
move one or more objects from source S3 bucket to target S3 bucket
positional arguments:
source_bucket source bucket name
target_bucket target bucket name
optional arguments:
-h, --help show this help message and exit
-f [FILENAME [FILENAME ...]], --filename [FILENAME [FILENAME ...]]
one or more filenames
-e [EXTENSION_FILTER [EXTENSION_FILTER ...]], --extension [EXTENSION_FILTER [EXTENSION_FILTER ...]]
only files with this extension will be moved
python move_objets_from_s3.py bucket extension fecha_inicial fecha_final tuplas --destination-path directorio
El primer parámetro es el bucket desde donde se actualizarán los archivos. El segundo parámetro es la extensión del bucket, puede ser un patrón. Ej: .bip* o .trip.gz. El tercer parámetro es la fecha inicial en formato YY-MM-DD. Ej: 2022-06-30. El cuarto parámetro es la fecha final en formato YY-MM-DD. Ej: 2022-07-10. El quinto parámetro es un listado de 3-tuplas para reemplazar valores en objectos, deben estar entre comillas y sin espacio entre los elementos de las tuplas. Ej: "[0,2,3] [8,LABORAL,FERIADO]" El parámetro opcional directorio permite definir un directorio para almacenar las versiones locales de los archivos sin modificar. Ej: --destination-path data. En caso de no definirlo, los archivos locales se almacenaran en la misma carpeta del proyecto S3FileUploader.
usage: update_objects_from_s3.py [-h] [--destination-path DESTINATION_PATH]
bucket extension start_date end_date tuples
update one or more objects from S3 bucket
positional arguments:
bucket bucket name
extension Object bucket files extension, can be a pattern.
Example: .bip*
start_date End date to process in YYYY-MM-DD format .
end_date Start date to process in YYYY-MM-DD format .
tuples 3-Tuples of values to be replaced on the files, must
be in quotes and the elements without separation.
Example: "[0,2,3] [2,METRO,BUS]"
optional arguments:
-h, --help show this help message and exit
--destination-path DESTINATION_PATH
path where files will be saved, if it is not provided
we will use current path