Google Cloud Storage Gestion des fichiers et des objets

Dans la première partie de cette série de didacticiels en deux parties, nous avions un aperçu de la façon dont les compartiments sont utilisés sur Google Cloud Storage pour organiser les fichiers. Nous avons vu comment gérer les compartiments sur Google Cloud Storage à partir de la console Google Cloud. Cela a été suivi par un script Python dans lequel ces opérations ont été effectuées par programme.

Dans cette partie, je montrerai comment gérer des objets, c’est-à-dire des fichiers et des dossiers dans des compartiments GCS. La structure de ce tutoriel sera similaire à celle du précédent. Tout d'abord, je vais vous montrer comment effectuer des opérations de base relatives à la gestion de fichiers à l'aide de la console Google Cloud. Ceci sera suivi par un script Python pour effectuer les mêmes opérations par programme.

Tout comme la désignation de compartiment dans GCS comportait des directives et des contraintes, la désignation des objets suit également une série de directives. Les noms d'objet doivent contenir des caractères Unicode valides et non des caractères de retour à la ligne ou de saut de ligne. Certaines recommandations incluent de ne pas avoir de caractères comme "#", "[", "]", "*", "?" ou des caractères de contrôle XML illégaux, car ils peuvent être mal interprétés et peuvent conduire à une ambiguïté.

En outre, les noms d'objet dans GCS suivent un espace de nom plat. Cela signifie physiquement qu'il n'y a pas de répertoires et de sous-répertoires sur GCS. Par exemple, si vous créez un fichier avec le nom /tutsplus/tutorials/gcs.pdf, il semblera que gcs.pdf réside dans un répertoire nommé tutoriels qui à son tour est un sous-répertoire de tutsplus. Mais selon GCS, l’objet réside simplement dans un compartiment avec le nom /tutsplus/tutorials/gcs.pdf.

Voyons comment gérer les objets à l'aide de la console Google Cloud, puis passons au script Python pour effectuer la même chose par programme..

Utilisation de la console Google Cloud

Je continuerai de là où nous sommes partis dans le dernier tutoriel. Commençons par créer un dossier.


Pour créer un nouveau dossier, cliquez sur le bouton Créer le dossier bouton mis en évidence ci-dessus. Créez un dossier en remplissant le nom souhaité, comme indiqué ci-dessous. Le nom doit suivre les conventions de dénomination des objets..

Ajoutons maintenant un fichier dans le dossier nouvellement créé..

Après la création, le navigateur GCS listera les objets nouvellement créés. Les objets peuvent être supprimés en les sélectionnant dans la liste et en cliquant sur le bouton de suppression..


En cliquant sur le bouton d'actualisation, l'interface utilisateur sera renseignée avec les modifications apportées à la liste d'objets sans actualiser la page entière..

Gestion des objets par programme

Dans la première partie, nous avons vu comment créer une instance de Compute Engine. Je vais utiliser la même chose ici et construire sur le script Python de la dernière partie.

Écrire le script Python

Aucune étape d'installation supplémentaire ne doit être suivie pour ce tutoriel. Reportez-vous à la première partie pour plus de détails sur l'installation ou l'environnement de développement..

gcs_objects.py

importer système depuis pprint importer pprint depuis googleapiclient découverte de importation de googleapiclient importation http de oauth2client.client importation GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ('storage', 'v1', credentials = list_objects (bucket): service = create_service () # Créez une demande à objects.list pour récupérer une liste d'objets. fields_to_return = \ 'nextPageToken, items (nom, taille, contentType, métadonnées (ma-clé))' req = service.objects (). list (bucket = compartiment, champs = champs_à_retour) all_objects = [] # Si vous en avez trop Les éléments à lister dans une requête, list_next () # gérera automatiquement la pagination avec pageToken. tandis que req: resp = req.execute () all_objects.extend (resp.get ('items', [])) req = service.objects (). list_next (req, resp) pprint (tous_objects) def create_object (bucket, filename) ): service = create_service () # Voici le corps de la requête spécifié: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'nom': nomfichier, avec open (nom de fichier, 'rb') comme f: req = service.objects (). insert (bucket = seau, corps = corps, # Vous pouvez également définir media_body = nomfichier, mais pour des raisons de # démonstration, passez le descripteur de fichier plus générique, qui pourrait très bien être un StringIO ou similaire. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream')) resp = req.execute () pprint (resp) def delete_object (bucket, nomfichier): service = create_service () res = service.objects (). delete (bucket = bucket, object = nomfichier) .execute () pprint (res) def print_help (): print "" "Utilisation: python gcs_objects.py  La commande peut être: help: Imprime cette liste d’aide: Répertorie tous les objets du seau spécifié. Create: Téléchargez le fichier fourni dans le seau spécifié. Delete: Supprime le nom de fichier fourni du seau "" "if __name__ ==" __main__ ": if 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() 

Le script Python ci-dessus illustre les opérations principales pouvant être effectuées sur des objets. Ceux-ci inclus:

  • création d'un nouvel objet dans un seau
  • liste de tous les objets dans un seau
  • suppression d'un objet spécifique

Voyons à quoi ressemble chacune des opérations ci-dessus lors de l'exécution du script.

$ python gcs_objects.py Utilisation: python gcs_objects.py  La commande peut être: help: Imprime cette liste d’aide: Répertorie tous les objets du seau spécifié. Create: Téléchargez le fichier fourni dans le seau spécifié. Delete: Supprime le nom de fichier fourni du seau $ python gcs_objects.py liste 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 à 01:16.png ', u'size': u'36680 ' ] $ python gcs_objects.py créer 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 / 14767023857777, 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 ', uCimeCreated': 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 à 13:16.png', u 'taille': u'36680 '] $ python gcs_objects.py supprimer tutsplus-demo-test gcs_buckets.py "$ python gcs_objects.py liste tutsplus-demo-test [u'contentType': -form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', uesize': u'0 ', u'contentType': u'image / png ', u'name ': u'tutsplus / Screen Shot 2016-10-17 à 13:16.png', ouais ': u'36680']

Conclusion

Dans cette série de didacticiels, nous avons vu le fonctionnement de Google Cloud Storage à vol d'oiseau, suivi d'une analyse approfondie des compartiments et des objets. Nous avons ensuite vu comment effectuer des opérations majeures liées au compartiment et aux objets via la console Google Cloud.. 

Ensuite, nous avons effectué la même chose en utilisant des scripts Python. Il est possible de faire plus avec Google Cloud Storage, mais il vous reste à explorer.