2017-04-20 4 views
2

Ich habe einen (vielleicht eindeutigen?) Anwendungsfall in einigen Python-Skripten, die ich ausführen. Und zwar möchte ich die parallel awesomeness von gsutil und so mache ich nicht from google.cloud import storage, sondern verwende ich subprocess Anrufe wie:Können Sie eine keyfile.json an gsutil übergeben?

subprocess.Popen(["gsutil", "-q", "-m", "-o", "GSUtil:parallel_process_count=8,GSUtil:parallel_thread_count=8", "cp", files, destination]) 

, um Dateien aus Eimern zum Hochladen und Herunterladen.

In einer Instanzgruppe Vorlage kann ich das Dienstkonto über -scopes übergeben, aber ich möchte Authentifizierung auf der Anwendungsebene behandelt werden. Ich habe versucht, Umgebungsvariablen und Übergabe an subprocess:

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "keyfile.json" 
tmp_env = os.environ.copy() 
subprocess.Popen(['gsutil', ...], env=tmp_env) 

, aber ohne Erfolg. Laufen:

gcloud auth activate-service-account --key-file /path/to/keyfile.json --project my-project -q 

scheint der beste Weg, um mit einem json keyfile zu authentifizieren, die nicht den Python API erfordern. Aber es funktioniert nicht, wenn ich es am Ende meiner Dockerfile einwerfe, und ich könnte es natürlich am Ende eines startup.sh-Skripts einwerfen, das ich am Ende einer eingebetteten Bootstrap-Instanzgruppenvorlage ausgeführt habe .sh-Skript, keines erreicht wirklich, was ich möchte. Beide kommen nämlich von meinem ursprünglichen Ziel, auf Anwendungsebene "gsutil authentication" zu haben, weg.

tl; dr Gibt es eine Möglichkeit, die Anmeldeinformationen für keyfile.json an gsutil zu übergeben? Ist das ein Feature, das das Gsutil-Team jemals diskutiert hat? Ich entschuldige mich, wenn ich nicht gerade die Cloud Platform und GSUtil-Docs gejagt habe.

Antwort

3

Sie können einen Zeiger auf eine JSON Schlüsseldatei für gsutil in Ihrer .boto Konfigurationsdatei wie folgt:

[Credentials] 
gs_service_key_file = /path/to/your/keyfile.json 

Dies zu gsutil config -e installieren, auf dem entspricht für einen eigenständigen (nicht gcloud).

Wenn Sie dies in der Befehlszeile und nicht in Ihrer Konfigurationsdatei .boto angeben möchten, können Sie den Parameter -o ähnlich wie bei der Konfiguration der Prozess- und Thread-Anzahl in der Befehlszeile verwenden. Zu wit:

Beachten Sie, dass Sie sicherstellen müssen, dass der Schlüsseldateipfad von Ihrem Container aus zugänglich ist.

+0

Ausgezeichnet. Genau das, was ich gesucht habe. Danke. – shogekiha

+0

Warum in aller Welt kann ich das nicht in der Dokumentation finden? Es macht keinen Sinn für mich, dass die gesamte Dokumentation für gsutil interaktive Authentifizierung zeigt, wenn ich (und sicherlich unzählige andere) sich von einem Skript auf einem Container irgendwo authentifizieren müssen – Brennan

+0

Warum es in der Dokumentation nicht zu finden ist: das würde Sinn machen, da es nirgends erwähnt wurde :(Ich habe [nur einen Commit gemacht] (https://github.com/GoogleCloudPlatform/gsutil/commit/5e5ba0671f3a6bde14676f6cbcef06ec9772ffb7), um das zu beheben, obwohl! –

Verwandte Themen