2014-12-30 5 views
3

Попытка создать экземпляр ec2client w.r.tНевозможно создать экземпляр Aws EC2 Ec2Client

$ec2Client = \Aws\Ec2\Ec2Client::factory(array(
    'profile' => 'default', 
    'region' => 'us-west-2', 
    'version' => '2014-10-01' 
)); 

но с ошибкой

Uncaught exception 'Aws\Common\Exception\CredentialsException' with message 'Could not load credentials.' 

У меня есть:

cat ~/.aws/credentials 

[default] 
aws_access_key_id = xxxxxxxxxxx 
aws_secret_access_key = xxxxxxxxxxx 

Я использую aws- sdk через композитор "aws/aws-sdk-php": "3.*@dev".

Редактировать 1): Я пробовал это на своей локальной машине разработки.

Edit 2): Я попытался это:

use Aws\Common\Credentials\InstanceProfileProvider; 
    $profile= new InstanceProfileProvider(['profile'=>'default']); 
    $ec2Client = \Aws\Ec2\Ec2Client::factory(array(
     'region' => 'us-west-2', 
     'version' =>'2014-10-01', 
     'credentials' => $profile 
    )); 

Это дает мне другую ошибку:

'Error retrieving credentials from the instance profile metadata server. When you are not running inside of Amazon EC2, you must provide your AWS Access Key ID and Secret Access Key in the "key" and "secret" options when creating a client or provide an instantiated Aws\Common\Credentials\CredentialsInterface object. (cURL error 28: Connection timed out after 1000 milliseconds)' in .. /InstanceProfileProvider.php:9 .. 

Это дает мне ощущение, что учетные профили только тогда, когда приложение работает внутри АМС облачный экземпляр! Что делает идею профилей бесполезных (что когда они предназначены для Дев среды)

Edit 3)

После отладки это, кажется, что с SDK верительных профилей сломаны или не как ожидалось. Оба значения credential profiles и environment variable зависят от переменных среды. Если переменные окружения отключены, они будут терпеть неудачу.

Возможная работа вокруг:

а) Enable environment variables

б) Установите HOME EVN переменной

putenv('HOME=/Users/yourname'); 
$ec2Client = \Aws\Ec2\Ec2Client::factory(array(
'region' => 'us-west-2', 
'version' => '2014-10-01' 
)); 

Profile init() функция имеет параметр имени файла, но не существует очевидный способ пройти credentails профиля пути, кроме HOME env переменная

Aws\Common\Credentails\Profiler->init() 
public static function ini($profile = null, $filename = null){ 
... 
} 

Опять же, если вы не можете прочитать /Users/yourname/.aws/credentials файл, вы должны настроить его немного

chmod 644 /Users/yourname/.aws/credentials

+0

очень нравится это: http://stackoverflow.com/questions/27400563/aws-sdk-for-php-error-retrieving-credentials-from-the-instance-profile-metadata – sakhunzai

ответ

2

Вы должны поместить файл .aws/credentials в корневом каталоге вашего веб-службы, а не в корневом каталоге вашего SSH пользователя

1

Вы должны поместить файл .aws/credentials в свою конфигурацию в домашний каталог веб-службы.

Put это в какой-то PHP файл вашего сайта

echo getenv('HOME'); 

то в этом каталоге:

mkdir .aws 
touch credentials 
nano credentials 

И вы должны вставить содержимое (нет необходимости в кавычках в ключах):

[default] 
aws_access_key_id  = xxxxxxxxxxx 
aws_secret_access_key = xxxxxxxxxxx 

И это должно быть сделано!


Edit: Как sakhunzai говорит в комментарии, эхо GETENV ('HOME') может возвращать нуль иногда, если это произойдет, он предлагает это решение (спасибо!): «Однако из командной строки PHP -i | grep HOME дает мне правильный домашний каталог пользователя «

Так что имейте это в виду.

+0

'echo getenv ('HOME «); 'return null, если я не установил его' putenv ('HOME =/Users/yourname'); 'Однако из командной строки php -i | grep HOME дает мне правильный домашний каталог пользователя – sakhunzai

+0

Добавлен в главный ответ, спасибо! –