1

Ich kann die Standardanmeldeinformationen für Anwendungen in Google Container Engine nicht abrufen. Die Dokumente geben an, dass sie für App Engine und Compute Engine gedacht sind, aber mir wurde gesagt, dass sie transparent zu einem Container weitergeleitet werden sollten, der auf Container Engine ausgeführt wird.Google Container Engine: Zugriff auf Cloud-Speicher

Hier ist der Code, der hat versagt:

credentials = GoogleCredentials.get_application_default() 
service = discovery.build('storage', 'v1', credentials=credentials) 

Der Fehler es sich nicht an: AssertionError: No api proxy found for service "memcache"

Ist es richtig Anwendung Standardanmeldeinformationen erwarten mit Container-Engine zu arbeiten? Wenn nicht, kann jemand den richtigen Weg empfehlen, von einem Container, der auf Container Engine läuft, eine Verbindung zum Cloud-Speicher herzustellen?

Danke.

EDIT: Nach gcloud beta auth application-default activate-service-account --key-file <my_key>.json das credentials Objekt in dem obigen Beispiel ausgeführt wird, Python mit Daten gefüllt. Allerdings bekomme ich immer noch den gleichen Fehler.

+0

Welche Laufzeit verwenden Sie? – mgilson

+0

@mgilson Bitte lassen Sie mich wissen, wenn dies das ist, was Sie verlangen: 'Client-Version: version.Info {Major:" 1 ", Minor:" 2 ", GitVersion:" v1.2.4 ", GitCommit:" 3eed1e3be6848b877ff80a93da3785d9034d0a4f " , GitTreeState: "clean"} Server Version: version.Info {Major: "1", Minor: "2", GitVersion: "v1.2.4", GitCommit: "3eed1e3be6848b877ff80a93da3785d9034d0a4f", GitTreeState: "sauber"} ' – user326502

+0

IIRC Die Container-Engine unterstützt verschiedene Python-Laufzeiten und nicht alle unterstützen memcache. (FWIW, das liegt außerhalb meiner Erfahrung, also könnte ich mich irren - ich ziehe das nur aus den Tiefen meiner Gedanken heraus, wo ich anscheinend aus dem einen oder anderen Grund einige dieser Informationen zwischengespeichert habe ...) – mgilson

Antwort

1

Der einfachste Weg, um auf Cloud-Speicher auf Container Engine zuzugreifen, scheint die gcloud-Bibliothek zu sein.

Wenn das App Engine-SDK auf dem Container installiert ist (gcloud findet es und geht davon aus, dass es auf App Engine ausgeführt wird), funktioniert es nicht mit einer Nullkonfiguration. Also habe ich aufgehört, den offiziellen Google container zu verwenden.

Auf einem python container fügen Sie einfach gcloud zu Ihrem requirements.txt (oder laufen pip install gcloud). Solange der Container in einer Google Compute Engine-Instanz lebt, können Sie auf alle Buckets im selben Projekt zugreifen.

Beispiel:

from gcloud import storage 
client = storage.Client() 
bucket = client.get_bucket('<bucket_name>') 
blob = bucket.blob('test_file.txt') 
blob.upload_from_string('test content') 

Die gcloud Bibliothek gibt es auch für Java, Node und Ruby.

+0

Ich bin froh Du hast eine Lösung gefunden.Ich habe den Code bearbeitet, um die Import-Anweisung hinzuzufügen - nur um explizit zu sein. – mgilson