Por Antonio Guzmán, Technology Advocate at Xertica

El almacenamiento de archivos ha crecido de tal manera últimamente, que hoy en día es imperativo tener disponibilidad de almacenamiento en la nube. Pasamos de requerir MB a TB. Queremos flexibilidad y diversos tipos de almacenamiento: alta demanda y disponibilidad multirregional, menor demanda focalizada en una región o acceso esporádico.
Cloud Storage
Google Cloud Storage es un almacenamiento versátil de objetos donde puedes colocar cualquier cosa. Todos los archivos son vistos como un objeto y no hay mayor distinción más allá del tipo de almacenamiento elegido (son cuatro, dos para alta demanda y dos para manejo de respaldos e históricos). No aprovisionas nada y se ajusta a tu demanda. Es elástico y cuenta con buenos precios para pagar únicamente por lo que usas.

Puedes acceder a Google Cloud Storage de diferentes formas: desde la consola web, la línea de comandos, vía Cloud SDK usando la API con las bibliotecas para varios lenguajes de programación. Cada uso y necesidad puede encontrar el mecanismo correcto.



12345
# Crea un bucket
gsutil mb gs://TU_BUCKET

# Almacena un archivo
gsutil cp /LA/RUTA/DE/TU/ARCHIVO gs://TU_BUCKET

Mira lo fácil que es manipular archivos y aprovechar gestionar versiones que tienes de tus archivos.


1234567891011121314
# Habilitar versionamiento
gsutil versioning set on gs://TU_BUCKET

# Conoce el estatus del versionamiento
gsutil versioning get gs://TU_BUCKET

# Lista toda las versiones existentes y sus respectivos identificadores únicos
gsutil ls -a gs://TU_BUCKET/TU_FILE

# Recupera una versión específica y produce un nuevo archivo
gsutil cp gs://TU_BUCKET/TU_FILE#GENERATION_NUMBER_X gs://BUCKET_DESTINO/NOMBRE_DE_TU_FILE

# Borra una versión específica
gsutil rm gs://TU_BUCKET/TU_FILE#GENERATION_NUMBER_X

También puedes manejar el ciclo de vida de tus archivos definiendo políticas a través de un JSON. Imagina que cuando un objeto cumple un tiempo determinado, lo puedes mover de alta disponibilidad a modo respaldo (nearline o coldline) y luego eliminarlo, todo de manera automática.



123
# Despliega un .json para definir las reglas automáticas que manejan los ciclos 
# de vida de tus objetos almacenados
gsutil lifecycle set TU_LIFECYCLE_FILE gs://TU_BUCKET/

Donde el .json puede lucir así:



12345678910111213141516171819202122232425262728293031
{
 "lyficycle": {
  "rule": [{
   "action": {
    "type": "SetStorageClass",
    "storageClass": "NEARLINE"
   },
   "condition": {
    "age": 366,
    "matchesStorageClass": ["MULTI_REGIONAL"]
   }
  }, {
   "action": {
    "type": "SetStorageClass",
    "storageClass": "COLDLINE"
   },
   "condition": {
    "age": 732,
    "matchesStorageClass": ["NEARLINE"]
   }
  }, {
   "action": {
    "type": "Delete"
   },
   "condition": {
    "age": 1827,
    "matchesStorageClass": ["COLDLINE"]
   }
  }]
 }
}

¿Quieres “encriptar” tu información? Google lo hace por ti cuando la información está “at rest”, no obstante, tú mismo puedes proveer las “key encryption”. También tienes listas de control de acceso (ACL) para decidir quién y con cuál nivel interactúan con tus archivos. Mira cómo lo puedes hacer:



1234567891011121314151617181920212223
def upload_encrypted_blob(bucket_name, source_file_name,
                          destination_blob_name, base64_encryption_key):

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    # La clave es una AES Key encryption de 256 bit (32 byte)
    encryption_key = base64.b64decode(base64_encryption_key)
    blob = storage.Blob(destination_blob_name, bucket, encryption_key=encryption_key)

    blob.upload_from_filename(source_file_name)


def download_encrypted_blob(bucket_name, source_blob_name,
                            destination_file_name, base64_encryption_key):

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    # La clave es una AES Key encryption de 256 bit (32 byte)
    encryption_key = base64.b64decode(base64_encryption_key)
    # No podrás obtener el archivo si no pasas la encryption_key
    blob = storage.Blob(source_blob_name, bucket, encryption_key=encryption_key)

    blob.download_to_filename(destination_file_name)

Los posibilidades de almacenamiento son varias; desde servir contenido para una aplicación hasta servir un sitio web estático (y conectarlo con un balanceador de cargas), pasando por el resguardo de tus respaldos o integrarlo como etapa de una solución de Big Data. Tú decides.

Puedes consultar aquí el repositorio con los pasos para que comiences a probar Cloud Storage.




Enlaces de interés