Я посмотрел на каждый ответ здесь, и кажется, что моя проблема немного отличается или не было правильного решения. Я делаю следующее в моем файле PHP:
use Aws\Route53\Route53Client;
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01'
));
Получение этой ошибки:
Fatal error: Uncaught Aws\Exception\CredentialsException: Cannot read credentials from /.aws/credentials
Похоже, что простое исправление будет гарантировать, что каталог HOME является правильным. Это действительно так. Файлы доступны для чтения, и мой ec2-пользователь уже является владельцем. Ключ и секрет уже установлены в файле «учетные данные». Имя профиля уже установлено по умолчанию. Попытался скопировать / .aws в другие каталоги, такие как root, / home и т. Д. И изменил права доступа, chmod, все вышеперечисленное. Еще ничего.
Затем я попытался жестко закодировать учетные данные (я знаю — не рекомендуется), просто чтобы дать ему небольшой толчок, и он полностью игнорирует, что я сделал это:
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
В крайнем случае, я даже попытался включить класс CredentialProvider и передать его в свой массив — все еще ничего:
'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),
Что, черт возьми, я делаю не так?
Не уверен, что вы делаете неправильно, но я бы посоветовал полностью обойти проблему и назначить роль экземпляра EC2 для рассматриваемого vm, и тогда вам не придется об этом беспокоиться; это лучшее / более безопасное решение.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
Просто удали 'profile' => 'default'
, и вы должны работать нормально
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
Вот что я в конечном итоге сделал для целей этого вопроса, хотя ответ EJ выше на самом деле является правильным ответом. Надеюсь, это поможет кому-то получить файл с учетными данными для чтения:
use Aws\Credentials\CredentialProvider;
use Aws\Route53\Route53Client;
$profile = 'default';
$path = '/var/www/html/.aws/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => $provider
));
Работая на AWS Centos 7, я попробовал все (chmod / chown / root / home / user, env, bashrc и т. Д.), Чтобы заставить /.aws/credentials работать вне каталога apache / var / www. SDK сообщил, что не может прочитать файл учетных данных.
Я посмотрел на PHP, чтобы увидеть, могу ли я установить / переопределить переменную HOME, и он все равно не прочитал файл учетных данных, пока я не поместил папку .aws в папку ‘/ var / www’ и не установил переменную HOME в своем файле php следующим образом. так:
<%php
putenv('HOME=/var/www');
//ZIP File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below