Greifen Sie über Python (boto) mit dem Dienstkonto und der Schlüsseldatei auf Google Cloud Storage zu (S. 12).

Wenn Sie von boto aus auf Google Cloud Storage zugreifen, können Sie mit dem Zugriffsschlüssel und dem geheimen Schlüssel darauf zugreifen, indem Sie den kompatiblen Betriebszugriff mit s3 aktivieren. http://qiita.com/itkr/items/d990e87a2540332ee0e5

Bei dieser Methode gibt es jedoch ein Problem. Der Zugriffsschlüssel, der mit einem kompatiblen Betriebszugriff ausgestellt werden kann, ist mit dem Google-Benutzerkonto verknüpft, was für Projekte mit mehreren Personen unpraktisch ist. Anschließend haben Sie die Möglichkeit, mit einem Dienstkonto und einer Schlüsseldatei (S. 12) darauf zuzugreifen.

Installation abhängiger Bibliotheken

Hier verwenden wir eine Bibliothek namens gcs-oauth2-boto-plugin.

pip install gcs-oauth2-boto-plugin

Vorbereitung der Einstellungsdatei

Bereiten Sie eine Konfigurationsdatei vor, die das Dienstkonto und den Pfad der Schlüsseldatei beschreibt.

Speicherort

Standardmäßig wird "~ / .boto" angezeigt. Sie können jedoch einen beliebigen Pfad angeben, indem Sie eine der folgenden Optionen in der Umgebungsvariablen vorbereiten. Dies ist übrigens das gleiche wie gsutil.

--BOTO_CONFIG (einzelne Datei angeben) --BOTO_PATH (mehrere durch : getrennte Dateien angeben)

Schreiben Sie beim Schreiben von Umgebungsvariablen in Python wie folgt.

import os
os.environ['BOTO_CONFIG'] = '/path.to/boto_config'

Erforderliche Beschreibung

Sie können verschiedene Einstellungen schreiben, aber die wichtigsten sind diesmal die folgenden Einstellungen

[Credentials]
gs_service_key_file = /path.to/sample-KEYFILE.p12
gs_service_client_id = [email protected]

[GSUtil]
default_project_id = sampleproject-994

Referenz: https://cloud.google.com/storage/docs/gsutil/commands/config#additional-configuration-controllable-features

Implementierung

Grundcode

import boto

bucket_name = 'bucket_name'
uri = boto.storage_uri(bucket_name, 'gs')
print uri.get_bucket()

Grundsätzlich ist dies alles, was Sie brauchen, wenn Sie das gcs-oauth2-boto-Plugin installiert haben.

Kommentar

Warum das alles ist, was Sie brauchen

boto verfügt über einen Mechanismus, mit dem Sie beim Einfügen einer AuthConnection ein Plugin installieren können. Ich werde es weglassen, weil ich den größten Teil der Implementierung von boto erneut drucken werde, wenn ich es im Detail schreibe. Wenn Sie sich jedoch den Code für die Authentifizierung von boto ansehen, finden Sie den Aufruf der Funktion get_plugin.

boto/plugin.py


def get_plugin(cls, requested_capability=None):
    if not requested_capability:
        requested_capability = []
    result = []
    for handler in cls.__subclasses__():
        if handler.is_capable(requested_capability):
            result.append(handler)
    return result

__subclasses__ zeigt eine Liste von Unterklassen an, in diesem Fall handelt es sich jedoch um eine Liste von Klassen, die von der AuthHandler-Klasse erben. Die Klasse "OAuth2ServiceAccountAuth" im gcs-oauth2-boto-Plugin erbt von "AuthHandler" und wird als Plugin erkannt. Darin werden notwendige Informationen wie "gs_service_key_file" aus der Einstellungsdatei abgerufen.

Apropos

Sie können auch eine eigene Klasse implementieren, die "AuthHandler" erbt und den Pfad der darin enthaltenen Konfigurationsdatei zwangsweise überschreibt, um sie dynamisch zu ändern. Aber ich denke, es kann wahrscheinlich klüger sein.

from boto.auth_handler import AuthHandler
from boto.pyami.config import Config

boto_path = ''

class SpamAuth(AuthHandler):
    def __init__(self, path, config, provider):
        config = Config(path=boto_path)
        # ...Abkürzung...

def spam(path='/path.to/boto_config'):
    global boto_path
    boto_path = path
    bucket_name = 'bucket_name'
    uri = boto.storage_uri(bucket_name, 'gs')
    print uri.get_bucket()

Zu diesem Zeitpunkt behält die URI-Klasse (in diesem Fall "BucketStorageUri") die Verbindung im Diktat "provider_pool" bei, sobald die Verbindung hergestellt ist. Wenn Sie also die Verbindung wechseln, "del BucketStorageUri.provider_pool [" gs "]" Es scheint, dass Sie es wie "BucketStorageUri.provider_pool = {}" löschen müssen.

Recommended Posts

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)
Kopieren Sie Daten von Amazon S3 mit Python (boto) in Google Cloud Storage.
Firebase: Verwenden Sie Cloud Firestore und Cloud Storage von Python
Greifen Sie über eine Compute Engine-Instanz auf den Cloud-Speicher zu
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Legen Sie den Google Cloud-Dienstkontoschlüssel in Heroku fest
Greifen Sie mit OAuth 2.0 von Python aus auf Tabellenkalkulationen zu
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Senden Sie eine E-Mail vom VirtualBox CentOS8-Server mit Ihrem Google-Konto als Sendeadresse und dem App-Passwort
Von Python bis zur Verwendung von MeCab (und CaboCha)
Verwenden Sie boto, um die Datei von S3 herunterzuladen.
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Verwenden Sie die Google Cloud Vision-API von Python
[GCP] Betreiben Sie Google Cloud Storage mit Python
Betreiben Sie den Cloud-Objektspeicher von Sakura von Python aus
Ich habe versucht, Google Translate aus Python zu verwenden, und es war einfach zu einfach
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
E-Mail-Anhänge über Ihr Google Mail-Konto mit Python.
Erstellen Sie mit python3 eine WAV-Datei aus dem GLSL-Shader
Führen Sie Python-Dateien mit Django aus HTML aus
Holen Sie sich AccessToken für das Dienstkonto mit dem Firebase Admin Python SDK