2014-02-21 5 views
7

Ich versuche, aws s3 cp Befehl aus PHP-Code mit Shell-Exec ausführen. Folgendes ist der PHP-Code.Ausführen von AWS CLI-Befehl von PHP Ergebnisse in nicht finden von Anmeldeinformationen

echo shell_exec("sudo aws s3 cp s3://<bucket>/somefolder/somefile s3://<bucket>/someotherfolder/somefile --region ap-southeast-1 --acl public-read"); 

Die Datei von Echo nicht wird immer kopiert und die Ausgabe ist der folgende

„Kann nicht Anmeldeinformationen finden abgeschlossen 1 Teil (e) mit ... Datei (en) verbleibenden“

Hinweis 1: ich habe bereits die Anmeldeinformationen festlegen Befehl aws konfiguriert

Hinweis 2: Wenn ich den exakt gleichen Befehl direkt vom Terminal laufen, es funktioniert gut.

Irgendeine Idee?

+0

Related: Diese Art von Operation kann mit dem AWS SDK for PHP durchgeführt werden. Siehe http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-s3.html#syncing-data-with-amazon-s3 –

Antwort

0

Sieht aus wie ein Erlaubnis-/Standortproblem der Konfigurationsdatei.

Mit AWS CLI festgelegte Anmeldeinformationen werden in eine spezielle Datei im Pfad des aktuellen Benutzers geschrieben. PHP Ich denke, dass in anderen Berechtigungen ausgeführt wird (nicht als derselbe Benutzer). Ich würde vorschlagen, dass Sie die Konfigurationen in separaten Dateien behalten und an die CLI this way weitergeben sollten. Sie müssen außerdem sicherstellen, dass die spezifische Umgebungsvariable in PHP shell_exec verfügbar ist.

2

Die AWS CLI legt Anmeldeinformationen unter ~/.aws/config fest, und die aws php sdk sucht unter ~/.aws/credentials nach ihnen.

So:

cd ~/.aws 
mv config credentials 

gelöst, was ich denke, das gleiche Problem für mich ist.

0

Um weg von user1464317 zu verlängern:

fand ich dieses Problem mit Yosemite vs Mavericks existiert. Die AWS-CLI für Mavericks sucht nach Berechtigungen in "~/.aws/config", wobei Yosemite in "~/.aws/credentials" sucht.

Wenn Cron verwenden, können Sie die Umgebungsvariable in crontab -e wie so gesetzt:

# Mavericks 
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/config" 

# Yosemite 
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/credentials" 

Oder Sie tun, wie user1464317 implizierte, verschieben Sie die Datei über:

mv config credentials 
1

Von Ihrem Terminal Sie können dann laufen:

$ cat ~/.aws/config 
[profile eb-cli] 
aws_access_key_id = XXXXXX 
aws_secret_access_key = XXXXXX 

$ aws configure 

und dann werden Sie für 4 Werte gestellt werden:

  1. Zugriffsschlüssel-ID (Zugriffsschlüssel) - Dies ist der kürzere der beiden Werte.
  2. Geheimschlüssel
  3. Standard Region Namen (in 'us-east-1')
  4. Ausgabeformat (Typ in 'json')

dann

$ aws s3 sync s3://<bucketname> 
Verwandte Themen