Google Cloud Storage Bestanden en objecten beheren

In het eerste deel van deze tweedelige zelfstudiereeks hadden we een overzicht van hoe buckets worden gebruikt op Google Cloud Storage om bestanden te ordenen. We hebben gezien hoe we buckets op Google Cloud Storage vanuit Google Cloud Console kunnen beheren. Dit werd gevolgd door een Python-script waarin deze bewerkingen programmatisch werden uitgevoerd.

In dit deel zal ik demonstreren hoe objecten, zoals bestanden en mappen binnen GCS-buckets, moeten worden beheerd. De structuur van deze tutorial zal vergelijkbaar zijn met die van de vorige. Eerst zal ik demonstreren hoe basishandelingen met betrekking tot bestandsbeheer met behulp van Google Cloud Console kunnen worden uitgevoerd. Dit wordt gevolgd door een Python-script om dezelfde bewerkingen programmatisch uit te voeren.

Net zoals het benoemen van emmers in GCS enkele richtlijnen en beperkingen had, volgt de naamgeving van objecten ook een aantal richtlijnen. Objectnamen moeten geldige Unicode-tekens bevatten en mogen geen Carriage Return- of Line Feed-tekens bevatten. Sommige aanbevelingen bevatten geen tekens zoals "#", "[", "]", "*", "?" of illegale XML-besturingspersonages, omdat ze verkeerd kunnen worden geïnterpreteerd en tot onduidelijkheid kunnen leiden.

Objectnamen in GCS volgen ook een platte naamruimte. Dit betekent dat er fysiek geen directory's en submappen zijn op GCS. Als u bijvoorbeeld een bestand met naam maakt /tutsplus/tutorials/gcs.pdf, het zal lijken alsof gcs.pdf bevindt zich in een map met de naam tutorials die op zijn beurt een submap is van tutsplus. Maar volgens GCS zit het object gewoon in een emmer met de naam /tutsplus/tutorials/gcs.pdf.

Laten we eens kijken hoe we objecten beheren met Google Cloud Console en vervolgens naar het Python-script springen om hetzelfde programmatisch te doen.

Google Cloud Console gebruiken

Ik ga door van waar we gebleven zijn in de laatste tutorial. Laten we beginnen met het maken van een map.


Om een ​​nieuwe map aan te maken, klikt u op de Map aanmaken knop hierboven gemarkeerd. Maak een map door de gewenste naam in te vullen, zoals hieronder wordt weergegeven. De naam moet de naamgevingsconventies voor objecten volgen.

Laten we nu een bestand uploaden in de nieuw gemaakte map.

Na het maken van de GCS-browser worden de nieuw gemaakte objecten weergegeven. Objecten kunnen worden verwijderd door ze in de lijst te selecteren en op de knop Verwijderen te klikken.


Als u op de knop Vernieuwen klikt, wordt de gebruikersinterface gevuld met eventuele wijzigingen in de lijst met objecten zonder de hele pagina te vernieuwen.

Objecten programmatisch beheren

In het eerste deel hebben we gezien hoe een Compute Engine-instantie te maken. Ik zal hier hetzelfde gebruiken en voortbouwen op het Python-script uit het laatste deel.

Het Python-script schrijven

Er zijn geen extra installatiestappen die moeten worden gevolgd voor deze zelfstudie. Raadpleeg het eerste deel voor meer informatie over de installatie- of ontwikkelomgeving.

gcs_objects.py

import sys van pprint import pprint van googleapiclient import discovery van googleapiclient import http van oauth2client.client import GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ('opslag', 'v1', referenties = referenties) def list_objects (bucket): service = create_service () # Maak een verzoek naar objects.list om een ​​lijst met objecten op te halen. fields_to_return = \ 'nextPageToken, items (naam, grootte, contentType, metadata (mijn-sleutel))' req = service.objects (). list (bucket = bucket, fields = fields_to_return) all_objects = [] # Als je te veel hebt items die in één verzoek moeten worden vermeld, list_next () zal # automatisch omgaan met paging met de 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, bestandsnaam ): service = create_service () # Dit is de hoofdtekst van het verzoek zoals opgegeven: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'name': bestandsnaam, met open (bestandsnaam, 'rb') als f: req = service.objects (). insert (bucket = bucket, body = body, # Je kunt ook gewoon media_body = bestandsnaam instellen, maar ter wille van # demonstratie, pas in de meer algemene bestandshandling, die # heel goed een StringIO of vergelijkbaar kan zijn. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream')) resp = req.execute () pprint (resp) def delete_object (bucket, bestandsnaam): service = create_service () res = service.objects (). delete (bucket = bucket, object = bestandsnaam) .execute () pprint (res) def print_help (): print "" "Gebruik: python gcs_objects.py  Opdracht kan zijn: help: Drukt deze helplijst af: toont een lijst van alle objecten in de opgegeven bucket create: Upload het verstrekte bestand in gespecificeerde bucket delete: verwijder de voorziene bestandsnaam uit bucket "" "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() 

Het bovenstaande Python-script toont de belangrijkste bewerkingen die op objecten kunnen worden uitgevoerd. Waaronder:

  • creatie van een nieuw object in een emmer
  • lijst van alle objecten in een emmer
  • verwijdering van een specifiek object

Laten we eens kijken hoe elk van de bovenstaande bewerkingen eruitziet wanneer het script wordt uitgevoerd.

$ python gcs_objects.py Gebruik: python gcs_objects.py  Commando kan zijn: help: Drukt deze helplijst af: toont alle objecten in de opgegeven bucket create: Upload het meegeleverde bestand in gespecificeerde bucket delete: Verwijder de verstrekte bestandsnaam uit bucket $ python gcs_objects.py list 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 om 1.03.16 PM.png ', u'size': u'36680 ' ] $ python gcs_objects.py create 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 lijst 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 om 1.03.16 PM.png', u 'size': u'36680 '] $ python gcs_objects.py verwijderen tutsplus-demo-test gcs_buckets.py "$ python gcs_objects.py lijst tutsplus-demo-test [u'contentType': u'application / x-www -vorm-urlencode; 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 om 1.03.16 PM.png', u'size ': u'36680']

Conclusie

In deze zelfstudieserie hebben we gezien hoe Google Cloud Storage werkt vanuit vogelperspectief, gevolgd door een grondige analyse van buckets en objecten. We hebben vervolgens gezien hoe belangrijke bucket- en objectgerelateerde bewerkingen kunnen worden uitgevoerd via Google Cloud Console. 

Vervolgens hebben we hetzelfde uitgevoerd met Python-scripts. Er is meer dat kan worden gedaan met Google Cloud Storage, maar dat is voor u om te verkennen.