Попытка создать экземпляр 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()
имеет параметр имени файла, но нет очевидного способа передать путь к профилю учетных данных, отличный от переменной 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