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.
Ausgezeichnet. Genau das, was ich gesucht habe. Danke. – shogekiha
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
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! –