2014-02-21 64 views
7

我想從使用shell exec的php代碼中運行aws s3 cp命令。以下是php代碼。從php執行AWS CLI命令導致無法找到憑據

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

該文件是沒有得到複製並從回波的輸出是下面的

「無法找到與...文件(多個)剩餘的已完成1份憑證」

注1:我一直在使用AWS的配置命令

注2已經設置憑據:如果我直接從終端上運行相同的指令,它工作正常。

任何想法?

+0

相關:此類操作可以使用適用於PHP的AWS開發工具包完成。請參閱http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-s3.html#syncing-data-with-amazon-s3 –

回答

0

看起來像配置文件的權限/位置問題。

使用AWS CLI設置的憑證寫在當前用戶的路徑中的特殊文件中。 PHP我猜是在執行其他權限(而不是相同的用戶)。我建議你應該將配置保存在一個單獨的文件中並傳遞給CLI this way。您還需要確保PHP shell_exec內的特定環境變量可用。

2

AWS CLI在〜/ .aws/config處設置憑據,並且aws php sdk在〜/ .aws/credentials處查找它們。

所以:

cd ~/.aws 
mv config credentials 

解決什麼,我覺得對我來說是同樣的問題。

0

延長關閉user1464317的:

我發現約塞米蒂VS小牛存在這個問題。適用於Mavericks的AWS CLI將在「〜/ .aws/config」中查找權限,其中Yosemite將查找「〜/ .aws/credentials」。

如果使用的cron,您可以設置在crontab -e命令環境變量,像這樣:

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

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

,或者你作爲user1464317暗示,移動文件過來:

mv config credentials 
1

從終端,你可以運行:

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

$ aws configure 

然後你會被要求4個值:

  1. 訪問密鑰ID(訪問密鑰) - 這是兩個值中較短的一個。
  2. 訪問密鑰
  3. 默認區域名稱(請在 '美東-1')
  4. 輸出格式(類型 'JSON')

然後

$ aws s3 sync s3://<bucketname>