Google Cloud Storage Gestión de archivos y objetos

En la primera parte de esta serie de tutoriales de dos partes, tuvimos una descripción general de cómo se utilizan los depósitos en Google Cloud Storage para organizar los archivos. Vimos cómo administrar depósitos en Google Cloud Storage desde Google Cloud Console. Esto fue seguido por un script de Python en el que estas operaciones se realizaron mediante programación.

En esta parte, demostraré cómo administrar objetos, es decir, archivos y carpetas dentro de los compartimientos de GCS. La estructura de este tutorial será similar a la del anterior. Primero demostraré cómo realizar operaciones básicas relacionadas con la administración de archivos usando Google Cloud Console. A esto le seguirá una secuencia de comandos de Python para realizar las mismas operaciones mediante programación..

Al igual que la denominación de cubos en GCS tenía algunas pautas y restricciones, la denominación de objetos sigue un conjunto de pautas también. Los nombres de objetos deben contener caracteres Unicode válidos y no deben contener caracteres de retorno de carro o salto de línea. Algunas recomendaciones incluyen no tener caracteres como "#", "[", "]", "*", "?" o caracteres de control XML ilegales porque pueden interpretarse incorrectamente y pueden llevar a ambigüedad.

Además, los nombres de objetos en GCS siguen un espacio de nombres plano. Esto significa que físicamente no hay directorios y subdirectorios en GCS. Por ejemplo, si creas un archivo con nombre /tutsplus/tutorials/gcs.pdf, aparecerá como si gcs.pdf reside en un directorio llamado tutoriales que a su vez es un subdirectorio de tutsplus. Pero de acuerdo con GCS, el objeto simplemente reside en un cubo con el nombre /tutsplus/tutorials/gcs.pdf.

Veamos cómo administrar objetos usando Google Cloud Console y luego saltaremos al script de Python para hacer lo mismo mediante programación..

Utilizando Google Cloud Console

Continuaré desde donde lo dejamos en el último tutorial. Empecemos por crear una carpeta..


Para crear una nueva carpeta, haga clic en Crear carpeta botón resaltado arriba. Cree una carpeta rellenando el nombre deseado como se muestra a continuación. El nombre debe seguir las convenciones de nomenclatura de objetos..

Ahora subamos un archivo a la carpeta recién creada..

Después de la creación, el navegador GCS mostrará una lista de los objetos recién creados. Los objetos se pueden eliminar seleccionándolos de la lista y haciendo clic en el botón Eliminar.


Al hacer clic en el botón de actualización se rellenará la interfaz de usuario con cualquier cambio en la lista de objetos sin actualizar toda la página.

Manejando objetos programáticamente

En la primera parte, vimos cómo crear una instancia de Compute Engine. Usaré el mismo aquí y construiré sobre el script Python de la última parte.

Escribiendo el guión de Python

No hay pasos de instalación adicionales que deban seguirse para este tutorial. Consulte la primera parte para obtener más detalles sobre la instalación o el entorno de desarrollo..

gcs_objects.py

importar sys desde pprint importar pprint desde googleapiclient importar descubrimiento desde googleapiclient importar http desde oauth2client.client importar GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ('storage', 'v1', credentials = cyproveer) list_objects (bucket): service = create_service () # Crea una solicitud a objects.list para recuperar una lista de objetos. fields_to_return = \ 'nextPageToken, elementos (nombre, tamaño, contentType, metadata (my-key))' req = service.objects (). list (bucket = bucket, fields = fields_to_return) all_objects = [] # Si tiene demasiados Los elementos a listar en una solicitud, list_next () manejarán automáticamente la paginación con pageToken. while req: resp = req.execute () all_objects.extend (resp.get ('items', []) req = service.objects (). list_next (req, resp) pprint (all_objects) def create_object (bucket, nombre de archivo) ): service = create_service () # Este es el cuerpo de solicitud como se especifica: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'name': filename, con abierto (nombre de archivo, 'rb') como f: req = service.objects (). insert (bucket = bucket, body = body, # También puede configurar media_body = nombre de archivo, pero por el bien de # demostración, pasar el identificador de archivo más genérico, que podría muy bien ser un StringIO o similar. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream')) resp = req.execute () pprint (resp) def delete_object (bucket, filename): service = create_service () res = service.objects (). delete (bucket = bucket, object = filename) .execute () pprint (res) def print_help (): print "" "Uso: python gcs_objects.py  El comando puede ser: ayuda: imprime esta lista de ayuda: muestra una lista de todos los objetos en el grupo especificado crear: cargar el archivo proporcionado en el grupo especificado eliminar: eliminar el nombre de archivo proporcionado del grupo "" "si __name__ ==" __main__ ": si len ( sys.argv) < 2 or sys.argv[1] == "help" or \ sys.argv[1] not in ['list', 'create', 'delete', 'get']: print_help() sys.exit() if sys.argv[1] == 'list': if len(sys.argv) == 3: list_objects(sys.argv[2]) sys.exit() else: print_help() sys.exit() if sys.argv[1] == 'create': if len(sys.argv) == 4: create_object(sys.argv[2], sys.argv[3]) sys.exit() else: print_help() sys.exit() if sys.argv[1] == 'delete': if len(sys.argv) == 4: delete_object(sys.argv[2], sys.argv[3]) sys.exit() else: print_help() sys.exit() 

El script de Python anterior muestra las principales operaciones que se pueden realizar en los objetos. Éstos incluyen:

  • Creación de un nuevo objeto en un cubo.
  • Listado de todos los objetos en un cubo.
  • eliminación de un objeto específico

Veamos cómo se ve cada una de las operaciones anteriores cuando se ejecuta el script.

$ python gcs_objects.py Uso: python gcs_objects.py  El comando puede ser: ayuda: imprime esta lista de ayuda: enumera todos los objetos en el compartimiento especificado crear: cargue el archivo provisto en el compartimiento especificado eliminar: elimine el nombre de archivo provisto del cubo $ python gcs_objects.py lista tutsplus-demo-test [u 'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size': u'0 ', u'contentType' : u'image / png ', resp = req.execute () u'name': u'tutsplus / Screen Shot 2016-10-17 a 1.03.16 PM.png ', u'size': u'36680 ' ] $ python gcs_objects.py crear tutsplus-demo-test gcs_buckets.py u'bucket ': u'tutsplus-demo-test', u'contentType ': u'application / octet-stream', u'crc32c ': u 'XIEyEw ==', u'etag ': u'CJCckonZ4c8CEAE =', u'generation ': u'1476702385770000', u'id ': u'tutsplus-demo-test / gcs_buckets.py / 1476702385770000', u'kind ': u'storage # object', u'md5Hash ': u' + bd6Ula + mG4bRXReSnvFew == ', u'mediaLink': u'https: //www.googleapis.com/download/storage/v1/b/tutsplus -demo-test / o / gcs_buckets.py? generation = 147670238577000 0 & alt = media ', u'metag eneration ': u'1', u'name ': u'gcs_buckets.py', u'selfLink ': u'https: //www.googleapis.com/storage/v1/b/tutsplus-demo-test/o /gcs_buckets.py ', u'size': u'2226 ', u'storageClass': u'STANDARD ', u'timeCreated': u'2016-10-17T11: 06: 25.753Z ', u'updated': u'2016-10-17T11: 06: 25.753Z ' $ python gcs_objects.py list tutsplus-demo-test [u'contentType': u'application / octet-stream ', u'name': u'gcs_buckets. py ', u'size': u'2226 ', u'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size ': u'0', u'contentType ': u'image / png', u'name ': u'tutsplus / Screen Shot 2016-10-17 a 1.03.16 PM.png', u 'tamaño': u'36680 '] $ python gcs_objects.py eliminar tutsplus-demo-test gcs_buckets.py "$ python gcs_objects.py lista tutsplus-demo-test [u'contentType': u'application / x-www -form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size': u'0 ', u'contentType': u'image / png ', u'name ': u'tutsplus / Captura de pantalla 2016-10-17 a las 1.03.16 PM.png', tamaño de ': u'36680']

Conclusión

En esta serie de tutoriales, vimos cómo funciona el almacenamiento en la nube de Google a vista de pájaro, a lo que siguió un análisis en profundidad de cubos y objetos. Luego vimos cómo realizar operaciones importantes relacionadas con objetos y cubos a través de Google Cloud Console. 

Luego realizamos lo mismo usando scripts de Python. Se puede hacer más con Google Cloud Storage, pero eso queda por explorar..