![](https://i.imgur.com/zqUpiFC.png) # Cloud Storage Dirígete en el menú de navegación, a Cloud Storage > Buckets. ![Screenshot 2024-09-25 at 07.22.48](https://hackmd.io/_uploads/r1J2Ev-AC.png) **Crear buckets** Por Cloud Shell, puedes crear un bucket con los permisos por defecto con el comando gsutil mb, recordando que el nombre del bucket debe ser único: ``` gsutil mb gs://mibigdatabucket ``` Por consola iremos viendo cada opción posible en el bucket. Primero debes ir a "+ CREAR" en la barra superior. ![Screenshot 2024-09-25 at 07.26.50](https://hackmd.io/_uploads/SJS5rPbRC.png) Luego comenzamos a llenar los datos solicitados, partiendo por elegir un nombre globalmente único para el bucket. ![Screenshot 2024-09-25 at 07.28.51](https://hackmd.io/_uploads/HJCeUDWRR.png) Luego de continuar indicamos la localización geográficaa de los datos, mirando siempre el lado derecho donde aparece el costo por GB de almacenar los datos en cada región, doble región o multi-region. Dejaremos multi-región. Luego presiona continuar. ![Screenshot 2024-09-25 at 07.29.53](https://hackmd.io/_uploads/B1u4IP-AC.png) A continuación se elegirá el tipo de almacenamiento para los datos. De la clase sabemos que hay 4 tipos, que van bajando de precio por GB y de disponibilidad. Sin embargo, no de durabilidad. ![Screenshot 2024-09-25 at 07.31.16](https://hackmd.io/_uploads/BkE9LDZC0.png) Luego se nos pedirá sobre el control de acceso y elegiremos Preciso (fine-grained) para especificar el acceso a través de ACLs, en vez de políticas que se aplican a todo el bucket. Desmarca "Aplica la prevención de acceso público a este bucket" Luego haz click en CONTINUE. ![Screenshot 2024-09-25 at 07.55.29](https://hackmd.io/_uploads/BkqRnvZAR.png) Miremos las opciones de protección de datos: se podría seleccionar control de versiones y política de retención, pero lo analizaremos más adelante. ![Screenshot 2024-09-25 at 07.35.30](https://hackmd.io/_uploads/rJrFPvWR0.png) Finalmente haz click en **CREAR**. Mira en la interfaz donde están creados los buckets, el qu acabas de crear y el que creaste por medio de Cloud Shell. **Subir o bajar archivos a buckets** Por Cloud Shell podemos usar el comando "gsutil cp" para subir archivos o bajar archivos. El comando se usa igual que en los comandos de unix. Sube un archivo a tu Cloud Shell y comienza a experimentar. Para subir un archivo a Cloud Shell puedes hacerlo de la siguiente manera. Presiona Upload del menu de los tres puntos. ![](https://i.imgur.com/7b4KCcY.png) Luego experimenta con esos comandos, reemplazando archivo_local con el nombre de tu archivo y mibigdatabucket con el nombre del bucket que acabas de crear. ``` export BUCKET_NAME= < el nombre de tu bucket > gsutil cp archivo_local gs://$BUCKET_NAME/ gsutil cp gs://$BUCKET_NAME/miarchivo . gsutil ls gs://$BUCKET_NAME/ ```` También este mismo comando lo usaremos para copiar datos desde otro bucket de Cloud Storage. Si creas por consola otro bucket y suber un archivo puedes experimentar con el mismo. ``` gsutil cp gs://BUCKET_NAME_2/otro_archivo gs://$BUCKET_NAME/ ``` **Setear control de acceso** Obtendremos la lista de ACL de un archivo con el siguiente comando, ``` gsutil acl get gs://$BUCKET_NAME/archivo_subido > acl.txt cat acl.txt ``` Obtendremos algo como: ![](https://i.imgur.com/qJqF4ds.png) Para dejar un archivo privado, como lo está ahora se usa el siguiente comando: ``` gsutil acl set private gs://$BUCKET_NAME/setup.html gsutil acl get gs://$BUCKET_NAME/setup.html > acl2.txt cat acl2.txt ``` Si quisieramos que estuviera disponible públicamente lo hacemos con el siguiente comando: ``` gsutil acl ch -u AllUsers:R gs://$BUCKET_NAME/mi_archivo gsutil acl get gs://$BUCKET_NAME/mi_archivo > acl3.txt cat acl3.txt ``` Verifica que el archivo es público, abriendo el link del archivo en un browser incognito. La URL pública la puedes encontrar en la consola web, haciendo click en el bucket, luego en el objeto, así obtendrás el detalle del objeto. ![Screenshot 2024-09-25 at 08.11.16](https://hackmd.io/_uploads/rkQgxdbAA.png) También podemos usar SignedURLs que son permisos temporales para los objetos. Para saber sobre esto: [SignedURL](https://cloud.google.com/storage/docs/access-control/signed-urls?hl=es_419) **Versionamiento** El versionamiento permite almacenar versiones pasadas de un objeto. Para obtener cual es el estado del bucket en cuanto a versioning ejecutamos el comando: ``` gsutil versioning get gs://$BUCKET_NAME ``` *Suspended* significa que el bucket no tiene versionamiento activado. El comando para activarlo es: ``` gsutil versioning set on gs://$BUCKET_NAME ``` Con off se desactiva, y lo puedes verificar con gsutil versioning get, que ocupamos recién. Sube un objeto dos veces a tu bucket para ver por consola las versiones que se crean del objeto. Para subir un archivo por consola con versioning sube con la opción -v ``` gsutil cp -v miarchivo gs://$BUCKET_NAME ``` Para listar todas las versiones de un archivo ``` gsutil ls -a gs://$BUCKET_NAME/miarchivo ``` Si quieres recuperar una versión antigua puedes referenciar el nombre de la versión, la primera es la más antigua. ``` gsutil cp $VERSION_NAME archivo_recupeado ``` **Subir archivos grandes o muchos archivos** Para subir archivos grandes, a través de trabajos, como se conversó en clases con Data Transfer. Sin embargo, con gsutil tenemos la opción de subir archivos grandes en partes activando las transferencias compuestas paralelasa, lo podemos hacer en el archivo .boto o de la siguiente manera: ``` gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp archivo_grande gs://BUCKET_NAME ``` Si algún archivo que has subido se ha cortado en su upload, puedes reanudar la carga usando la opción -n para evitar subir partes ya subidas. Otra opción para cuando tenemos muchos archivos que subir es usar rsync para sincronizar carpetas locales a Cloud Storage. Por ejemplo: ``` mkdir carpetasync cp m_archivo carpetasync gsutil rsync -r ./carpetasync gs://$BUCKET_NAME/carpetasync ```` Verifica los resultados en la consola web. Además la opción -m puede hacer que tus comandos se ejecuten en paralelo, por ejemplo si estás subiendo muchos archivos. Sin embargo, esto puede consumir tu ancho de banda y se debe configurar su uso (como el número de threads creados) en el archivo de configuración .boto o con algún otro software. **Ciclo de vida** En Cloud Storage podemos mover un objetos desde una clase de almacenamiento a otra, para ir reduciendo los costos asociados, o borrar objetos después de cierta cantidad de días desde su creación. Para obtener el ciclo de una bucket lo hacemos con el siguiente comando: ``` gsutil lifecycle get gs://$BUCKET_NAME ``` Ahora no hay ciclo de vida, por lo que crearemos uno, editando un archivo json. Crea un archivo lifecycle.json y editalo con lo siguiente: ```json= { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 31} } ] } ``` Esta regla de Borrar se aplicará a archivos luego de 30 días de su creación. Para setear la política usamos el comando: ``` gsutil lifecycle set lifecycle.json gs://$BUCKET_NAME ``` Verifícalo con el comando gsutil lifecycle get o por consola, en el tab CICLO DE VIDA del bucket, puedes además presionar en AGREGAR UNA REGLA y experimentar con las políticas: ![Screenshot 2024-09-25 at 08.13.30](https://hackmd.io/_uploads/H1ZuxO-CR.png) Link a la documentación de: [gsutil tool](**https://cloud.google.com/storage/docs/gsutil**) # Eventos Cloud Storage a PubSub Cada vez que un objeto en Cloud Storage se carga, se borra, actualiza sus metadatos o se archiva, hay un evento en el sistema. Estos eventos pueden ser usuados para gatillar funciones de Cloud Functions, o cualquier otro servicio. Para esto, los eventos pueden ser enviados a Pub/Sub así ser leídos desde diferentes subscriptores. ![](https://i.imgur.com/FIviDh6.png) Vamos a crear un bucket, crear un tópico en pub/sub y una subscripción: ``` gsutil mb gs://mibucket gcloud pubsub topics create mitopico gcloud pubsub subscriptions create misubscripcion --topic nombre_topico ```` Vamos ahora a crear las notificaciones para el bucket, indicando que cuando un objeto tenga la acción indicada (creación) se envía la notificación al tópico. ``` gsutil notification create -f json -e OBJECT_FINALIZE -t mitopico gs://mibucket ```` Las opciones a elegir para las notificaciones son además: OBJECT_METADATA_UPDATE, OBJECT_DELETE, OBJECT_ARCHIVE Verificaremos lo que hemos hecho, subiendo un archivo al bucket, y eliminandolo, por consola. Ejemplos clásicos de uso de estos eventos: * Cada vez que se suba una imagen el sistema debe crear un thumbnail, lo que se gatilla que es la función que se gatilla. * Cada vez que se sube un log a un datalake, se debe ejecutar un script que verifica esquema, esta acción es la que se gatilla. Podemos mirar los mensajes creados en Pub/Sub -> subscripciones -> Mensajes. Luego de hacer alguna acción que deba haber generado una notificación presiona Extraer para verlo. Examina el cuerpo del mensaje. ![Screenshot 2024-09-25 at 08.20.35](https://hackmd.io/_uploads/HyhffdZ0C.png) Recuerda eliminar todo lo que haz creado al finalizar la actividad.