2017-07-21 3 views
0

Ich habe die Dokumentation für Google Cloud Storage (GCS) gelesen und bin sehr verwirrt.Dateiübertragung von Google Compute Engine zu Google Storage

Lassen Sie mich die Situation beschreiben:

Vor ich einen einfachen PHP-Skript verwenden, um Daten aus und SQL-Tabelle. Zu jeder Stunde. Danach habe ich es an meinen FTP-Server gesendet. Jetzt Jetzt möchte ich stattdessen zu einem Google Nearline-Kühlhaus gesendet werden.

Bevor das Skript war einfach, nichts Besonderes, einfach nur ein wenig PHP

passthru('curl --connect-timeout 30 --max-time 3600 -T '.$file_path.' "ftp://'.$ftp_server['user'].':'.$ftp_server['pass'].'@'.$ftp_server['ip'].':'.$ftp_server['port'].$ftp_server['path'].'/'.$filename.'.gz"', $status_result); 

Nun las ich die Wolke Google-API und ich bin sehr verwirrt von tatsächlich, wie mein PHP-Skript zu ändern, so dass es die gz sendet Dateien zum Nearline-Kältespeicher.

Ich lese diese: https://developers.google.com/api-client-library/php/

und ich habe folgende Fragen

  • Er sagt, dass ich die Google-API enthalten müssen, wie kann ich das tun? Im Beispiel hieß es, dass ich den Befehl "$ composer google/cloud" verwenden und dann in meine PHP-Dateien schreiben sollte: "benutze Google \ Cloud \ ServiceBuilder;" Aber ich habe Composer nicht auf dem Server benutzt . Der Server ist auf reinem PHP geschrieben.

    1. Wenn ich eine einfache PHP-Datei habe (zB history_dump.php), wie schließe ich die Google Cloud API als externen Link ein?
    2. Die Art, wie ich es jetzt getan habe, ist SQL -> CSV -> GZ, ich möchte nicht ändern, kann ich GZ-Dateien an GCS senden? Wie?

Vielen Dank im Voraus

+0

Ich habe auch ein PHP-Skript geschrieben jetzt aber Es gibt mir einen Fehler wie folgt: HTTP/1.1 401 Nicht autorisierte X-GUploader-Upload-ID: ******** _ 7hxso Variieren: Ursprung Variieren: X-Origin WWW-Authenticate: Träger Realm = "https: // accounts. google.com/ ", error = invalid_token Inhaltstyp: application/json; charset = UTF-8 Content-Length: 249 Datum: Fr, 21 Jul 2017 14:50:50 GMT Server: UploadServer {"error": {"errors": [{"domain": "global", "reason": "authError", "message": "Ungültige Anmeldeinformationen", "locationType": "header", "location": "Autorisierung"}], "code": 401, "message": "Ungültige Anmeldeinformationen"}} – thefolenangel

+0

Die ' Antwort von HTTP 401 Unauthorized besagt, dass Sie nicht die richtigen Anmeldeinformationen für die Authentifizierung übergeben. Sie können über ['Authentifizierung'] (https://cloud.google.com/docs/authentication/) und ['Standardanmeldeinformationen für Anwendungen'] lesen (https://developers.google.com/identity/protocols/application- Standard-Anmeldeinformationen), um zu verstehen, wie Sie die Anmeldeinformationen für Ihren API-Aufruf an Cloud Storage konfigurieren und weitergeben können. – Tuxdude

Antwort

1

Warum nicht einfach hält ein kleines Skript verwenden? GCE wird mit gsutil installiert, mit dem Sie Dateien an GCS übertragen können. Versuchen Sie folgendes:

passthru('gsutil cp '.$filepath.' gs://bucket/', $status_result); 

anzumerken, dass für Auth arbeiten, werden Sie müssen sicherstellen, dass die Instanz des Dienstkonto scoped GCS zugreifen zu können, finden Sie unter: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

+0

Hallo Ich denke, dass Ihr Kommentar sehr relevant ist, wie Sie sehen können, ich bin ein Newbie-PHP-Entwickler. Also lese ich nach den Funktionen, mit denen man Unix-Befehle aufrufen kann, zB system(), exec() und ofc passthru(). Aber ich vermisse etwas, denn obwohl ich es schreibe, wie du gesagt hast, sollte ich. Ich denke, dass meine Berechtigung nicht stimmt, nachdem ich das Skript ausgeführt habe, gibt es '1' zurück, was ein Fehler ist. Momentan ist mein "Cloud API access scopes" für "Storage" auf "Read only" eingestellt. Glauben Sie, dass das Problem darin liegt? – thefolenangel

+0

Ein wenig mehr Informationen zum Debuggen, wenn ich dies ausführen: passthru ("gcloud-h", $ status_result2); und ich echo die Ergebnisvariable es funktioniert tatsächlich? – thefolenangel

+0

Danke für die Antwort, die es geholfen hat! Wie bei meiner anderen Frage bezog sich das auf den Bereich des Dienstkontos. > Wenn Sie zum Beispiel Ihre VM mit dem Bereich devstorage.read_only erstellt haben, scheiterte der Versuch, in einen Bucket zu schreiben, auch wenn Ihr Dienstkonto über die Berechtigung zum Schreiben verfügt Eimer. Sie würden devstorage.full_control oder devstorage.read_write benötigen. – thefolenangel

Verwandte Themen