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