[PYTHON] Greifen Sie über eine Compute Engine-Instanz auf den Cloud-Speicher zu

Einführung

Ich möchte von einer GCE-Instanz auf Cloud Storage zugreifen. Da der Zugriff von innerhalb des Projekts aus erfolgt, ist Methode mit OAuth 2.0 direkt einfacher [Dienstkonto]( Verwenden Sie https://cloud.google.com/compute/docs/authentication.

Authentifizierung

Holen Sie sich zuerst das Zugriffstoken vom Metadatenserver.

import json
import urllib2

METADATA_SERVER = "http://169.254.169.254/computeMetadata/v1/instance/service-accounts"
SERVICE_ACCOUNT = "default"

req = urllib2.Request("{0}/{1}/token".format(METADATA_SERVER, SERVICE_ACCOUNT))
req.add_header("Metadata-Flavor", "Google")

data = json.load(urllib2.urlopen(req))

token = data["access_token"]
token_type = data["token_type"]

Zugriff mit Token

Der Zugriff auf den Cloud-Speicher verwendet das empfangene Token.

Objekt abrufen

from apiclient import discovery

sp = discovery.build("storage", "v1")
req = sp.objects().get_media(bucket=<BUCKET>, object=<PATH>)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
res = req.execute()

Beispielcode hat "oauth2_client.AccessTokenCredentials" verwendet, aber Sie können auch mit der oben beschriebenen Methode darauf zugreifen.

Hochladen von Objekten im Blockformat

from apiclient import discovery
from apiclient.http import MediaIoBaseUpload

sp = discovery.build("storage", "v1")
# fp:Daten zum Hochladen, mimetype: MIME type
media_body = MediaIoBaseUpload(fp, mimetype, resumable=True)

req = sp.objects().insert(bucket=<BUCKET>, body=dict(name=<PATH>), media_body=media_body)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
req.execute()

Referenz

Recommended Posts

Greifen Sie über eine Compute Engine-Instanz auf den Cloud-Speicher zu
Verwenden Sie den Cloud-Datenspeicher von Compute Engine
Greifen Sie über Python (boto) mit dem Dienstkonto und der Schlüsseldatei auf Google Cloud Storage zu (S. 12).
Verwenden von Cloud-Speicher aus Python3 (Einführung)
Führen Sie Cloud Dataflow (Python) über AppEngine aus
Greifen Sie über einen Browser auf den Entwicklungsserver von Django zu
Betreiben Sie den Cloud-Objektspeicher von Sakura von Python aus
Firebase: Verwenden Sie Cloud Firestore und Cloud Storage von Python
"PySpark": Richten Sie PySpark auf einer Alibaba Cloud CentOS-Instanz ein