2014-02-21 2 views
7

Я пытаюсь запустить команду aws s3 cp из PHP-кода с помощью оболочки exec. Ниже приведен код php.Выполнение команды AWS CLI из результатов php Не удается найти учетные данные

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

Файл не получает скопирована и выход из эха следующий

«Не удалось найти учетные данные Законченные 1 часть (ы) с ... файл (ы) остающегося»

Note1: Я уже установлены учетные данные с помощью AWS настроить команду

Примечание 2: Если я бегу точно такую ​​же команду непосредственно из терминала, он отлично работает.

Есть идеи?

+0

Связанный: Этот тип операции может быть выполнен с помощью AWS SDK для PHP. См. 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:

Я нашел это проблема существует с Yosemite против Mavericks. AWS CLI для Mavericks ищет разрешения в «~/.aws/config», где Yosemite просматривает «~/.aws/credentials».

При использовании хрон, вы можете установить переменные среды в кронтабе -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. Ключ доступа Ключ доступа (Ключ доступа) - это более короткий из двух значений.
  2. Секретный ключ доступа
  3. По умолчанию Название (введите 'нас-восток-1')
  4. Выходной формат (тип в 'JSON')

затем

$ aws s3 sync s3://<bucketname> 
Смежные вопросы