La CLI ya la tenemos instalada, sino echad un vistazo al artículo que he enlazado antes para ver los pasos de instalación. El comando base sobre el que realizamos las operaciones es:
$ aws s3
Todo lo que os voy a indicar en esta entrada (y más) podéis consultarlo también en la página man del comando ejecutando:
$ aws s3 help
Para ver la ayuda de cada comando es suficiente con pasar como parámetro «help». Ejemplos:
$ aws s3 cp help
$ aws s3 mv help
Listar, crear y eliminar buckets
Los «buckets» o «cubos» es el contenedor S3 donde se almacenarán los datos. Para crear uno, debemos elegir un nombre (tiene que ser válido a nivel de DNS y único) y opcionalmente la región en la que queremos crear el bucket. Esto nos puede interesar por temas de latencia. Todo esto utilizando el parámetro «mb» (make bucket):
$ aws s3 mb s3://lab01-storage make_bucket: s3://lab01-storage/
Si quisiéramos forzar la ubicación del almacenamiento S3:
$ aws s3 mb s3://lab02-storage --region eu-west-1 make_bucket: s3://lab02-storage/
Para visualizar los buckets que tenemos en nuestra cuenta de AWS, simplemente ejecutamos aws s3 con el parámetro «ls»:
$ aws s3 ls 2014-11-14 16:21:14 lab01-storage 2014-11-14 16:22:05 lab02-storage
Para eliminar un bucket, rb (remove bucket) seguido del bucket:
$ aws s3 rb s3://lab02-storage remove_bucket: s3://lab02-storage/
Y para forzar la eliminación en caso de que no esté vacío le pasamos el parámetro –force:
$ aws s3 rb s3://lab02-storage --force remove_bucket: s3://lab02-storage/
Subir, descargar y eliminar objetos
Con la CLI de aws se incluyen los comandos cp, ls, mv, rm y sync. Todos ellos funcionan igual que en las shell de Linux. Sync es un añadido que permite sincronizar directorios completos. Vamos a ver unos ejemplos:
Copiar de local a remoto:
$ aws s3 cp foo.txt s3://lab01-storage upload: ./foo.txt to s3://lab01-storage/foo.txt
Copiar de remoto a local:
$ aws s3 cp s3://lab01-storage/bar.txt bar.txt download: s3://lab01-storage/bar.txt to ./bar.txt
Listar archivos remotos:
$ aws s3 ls s3://lab01-storage 2014-11-14 16:27:17 0 foo.txt
Mover/renombrar un archivo remoto:
$ aws s3 mv s3://lab01-storage/foo.txt s3://lab01-storage/bar.txt move: s3://lab01-storage/foo.txt to s3://lab01-storage/bar.txt
$ aws s3 ls s3://lab01-storage 2014-11-14 16:28:27 0 bar.txt
Borrar un archivo remoto:
$ aws s3 rm s3://lab01-storage/bar.txt delete: s3://lab01-storage/bar.txt
Como podéis ver, muy sencillo. La parte de sincronización también es fácil de utilizar si tenemos una base de rsync, indicamos el origen y el destino y sincronizará todos los archivos y directorios que contenga. Si queremos que sea recursivo utilizaremos el parámetro «–recursive»:
$ aws s3 sync test/ s3://lab01-storage --recursive upload: test/bar.txt to s3://lab01-storage/bar.txt upload: test/foo.txt to s3://lab01-storage/foo.txt upload: test/zzz.txt to s3://lab01-storage/zzz.txt
$ aws s3 ls s3://lab01-storage 2014-11-14 16:32:02 0 bar.txt 2014-11-14 16:32:03 0 foo.txt 2014-11-14 16:32:03 0 zzz.txt
Para sincronizar borrando contenido en destino que ya no exista en origen:
$ rm -f test/foo.txt $ aws s3 sync test s3://lab01-storage --delete delete: s3://lab01-storage/foo.txt $ aws s3 ls s3://lab01-storage 2014-11-14 16:32:02 0 bar.txt 2014-11-14 16:32:03 0 zzz.txt
También podemos establecer filtros de inclusión y exclusión:
$ aws s3 sync . s3://lab01-storage --exclude '*.jpg' --include 'M*.txt' --exclude 'prueba?.txt'
Privilegios
Los comandos cp, mv y sync permiten asignar permisología a usuarios en los objetos utilizando el parámetro –grants, pudiendo especificar el tipo de permiso a asignar al usuario con el atributo Permission (read, readacl, writeacl, full), el objeto al que asignarlo con el atributo Grantee_Type (uri, emailaddress, id) y el identificador/usuario al que asignarlo con Grantee_ID.
El siguiente ejemplo otorga permiso de lectura para el archivo que vamos a subir (foo.txt) a todos los usuarios
aws s3 cp foo.txt s3://bucket-name/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers/pre>
Para profundizar en este tema es recomendable revisar la documentación sobre ACLs de AWS.
--grants (string) Grant specific permissions to individual users or groups. You can supply a list of grants of the form: --grants Permission=Grantee_Type=Grantee_ID [Permission=Grantee_Type=Grantee_ID ...] Each value contains the following elements: o Permission - Specifies the granted permissions, and can be set to read, readacl, writeacl, or full. o Grantee_Type - Specifies how the grantee is to be identified, and can be set to uri, emailaddress, or id. o Grantee_ID - Specifies the grantee based on Grantee_Type. The Grantee_ID value can be one of: o uri - The group's URI. For more information, see Who Is a Grantee? o emailaddress - The account's email address. o id - The account's canonical ID
Con esta información ya podréis tener la base para trabajar desde la CLI con el almacenamiento S3 de Amazon.