Попытка создания экземпляра ec2client w.r.t
$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): я пытаюсь это на моей локальной машине разработки.
Изменить 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 ..
Это создает у меня впечатление, что профили учетных данных доступны только в том случае, если приложение работает в облачном экземпляре AWS! Что делает идею профилей бесполезной (которая предназначена для среды разработки)
Редактировать 3)
После отладки кажется, что sdk с профилями учетных данных поврежден или не так, как ожидалось. И то и другое credential profiles
а также environment variable
оба зависят от переменных среды. Если переменные среды отключены, оба не удастся.
Возможные обходные пути:
б) Установить переменную 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
Вы должны разместить .aws/credentials
файл в корне вашего веб-сервиса, а не в корне вашего пользователя ssh
Вы должны поместить файл .aws / credentials с вашей конфигурацией в домашний каталог веб-службы.
Поместите это в какой-нибудь PHP файл вашего сайта
echo getenv('HOME');
затем в этом каталоге:
mkdir .aws
touch credentials
nano credentials
И там вы должны вставить содержимое (нет необходимости в кавычках в ключах):
[default]
aws_access_key_id = xxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxx
И это должно сделать это!
Редактировать:
Как говорит Сакхунзай в комментарии (спасибо!), Echo getenv (‘HOME’) может иногда возвращать null, если это происходит, он предлагает следующее решение: «Однако из командной строки php -i | grep HOME дает мне правильный домашний каталог пользователя»
Так что имейте это в виду.