[PYTHON] Accéder à Cloud Storage à partir d'une instance Compute Engine

introduction

Je souhaite accéder à Cloud Storage à partir d'une instance GCE. Puisqu'il est accessible depuis l'intérieur du projet, Méthode utilisant OAuth 2.0 directement Simpler [Compte de service]( Utilisez https://cloud.google.com/compute/docs/authentication).

Authentification

Tout d'abord, récupérez le jeton d'accès auprès du serveur de métadonnées.

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"]

Accès à l'aide de jetons

L'accès à Cloud Storage utilise le jeton reçu.

Obtenir un objet

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()

Exemple de code a utilisé ʻoauth2_client.AccessTokenCredentials`, mais il est également accessible par la méthode ci-dessus.

Télécharger des objets au format chunk

from apiclient import discovery
from apiclient.http import MediaIoBaseUpload

sp = discovery.build("storage", "v1")
# fp:Données à télécharger, 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()

référence

Recommended Posts

Accéder à Cloud Storage à partir d'une instance Compute Engine
Utiliser Cloud Datastore depuis Compute Engine
Accédez à Google Cloud Storage à partir de Python (boto) à l'aide du compte de service et du fichier de clé (p12)
Utiliser Cloud Storage depuis Python3 (Introduction)
Exécutez Cloud Dataflow (Python) depuis AppEngine
Accéder au serveur de développement de Django depuis un navigateur
Exploitez le stockage d'objets cloud de Sakura à partir de Python
Firebase: utilisez Cloud Firestore et Cloud Storage depuis Python
"PySpark": configurer PySpark sur une instance Alibaba Cloud CentOS