веб-сервисы Amazon — AWS SDK для PHP: ошибка при получении учетных данных с сервера метаданных профиля экземпляра

Я пытаюсь отправить сообщения SNS на Android через веб-API.
Скачал и установил SDK из http://aws.amazon.com/developers/getting-started/php/

Получил следующую ошибку при запуске sample.php:

Fatal error: Uncaught exception 'Aws\Common\Exception\InstanceProfileCredentialsException' with message '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] 28: Connection timed out after 5016 milliseconds [url] http://169.254.169.254/latest/meta-data/iam/security-credentials/)' in C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\InstanceMetadata\InstanceMetadataClient.php:85 Stack trace: #0 C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\Credentials\RefreshableInstanceProfileCredentials.php(52): Aws\Common\InstanceMetadata\InstanceMetadataClient->getInstanceProfileCredentials() #1 C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\Credentials\AbstractRefreshableCredentials.php(54): Aws\Common\Credentials\Refreshable in C:\xampp\htdocs\aws-php\vendor\aws\aws-sdk-php\src\Aws\Common\InstanceMetadata\InstanceMetadataClient.php on line 85

Небольшое руководство по этой теме мне очень поможет

47

Решение

В моем случае я использовал

return DynamoDbClient::factory(array(
'version' => 'latest',
'region'  => AWS_REGION,
'key' => AWS_KEY,
'secret'  => AWS_SECRET
));

который был в порядке с aws/aws-sdk-php версия 2.8.5, но когда композитор автоматически установил версию 3.2.0, я получил ошибку выше. Проблема просто в том, что я должен был изменить способ звонка

return DynamoDbClient::factory(array(
'version' => 'latest',
'region'  => AWS_REGION,
'credentials' => array(
'key' => AWS_KEY,
'secret'  => AWS_SECRET,
)
));

как задокументировано Вот. Без изменения вызова, апаш php возвращается к поиску ~/.aws/credentials файл с использованием переменной среды HOME, которая была пустой. Вы можете проверить его значение, запустив php -r 'var_dump(getenv("HOME"));',

это это связанный пост

137

Другие решения

Вы должны разместить .aws/credentials файл с вашей конфигурацией в домашнем каталоге веб-службы * обычно /var/www) не в домашнем каталоге вошедшего в систему пользователя.

Вы можете узнать, какой домашний каталог использует ваш веб-сервис, запустив echo getenv('HOME'); в файле php на вашем сервере.

8

В моем случае мне пришлось использовать жестко закодированные учетные данные

$s3Client = new S3Client([
'region' => REGION,
'version' => '2006-03-01',
'credentials' => [
'key'    => S3_KEY,
'secret' => S3_SECRETE,
],
]);

Смотрите больше деталей Вот:

5

Вот шаги:

  1. Тип cd ~
    По этому вы перейдете в домашний каталог.
  2. mkdir .aws
  3. sudo vi .aws/credentials
  4. Напишите следующие строки и сохраните файл.

    [default]
    aws_access_key_id = Your AWS Access Key
    
    aws_secret_access_key = Your AWS Secret Access Key
    
4

Я пытался использовать файл учетных данных и получил ту же ошибку, этот парень на github в значительной степени прибил его:

Файл учетных данных должен быть в формате ini, но не иметь расширения .ini. Он должен иметь раздел «по умолчанию», определенный с вашим ключом и секретом:

$ less ~/.aws/credentials

[default]
aws_access_key_id = key
aws_secret_access_key = secret

Если вы указали другое имя раздела вместо значения по умолчанию, просто добавьте profile ключ к параметрам S3Client:

[example]
aws_access_key_id = key
aws_secret_access_key = secret

$s3Client = new \Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => $yourPreferredRegion,
'profile' => 'example',
]);

Использование файла учетных данных или переменных среды является рекомендуемым способом предоставления учетных данных на вашем собственном сервере.

И ответ @Anti также очень помог мне!

Если вы предпочитаете жестко запрограммированный способ, просто следуйте ответу @shadi.

3

Если это laravel и aws / aws-sdk-php-laravel sdk, то после настройки всех шагов и определения ключа в файле .env
Вы должны удалить конфигурационный кеш и восстановить его, выполнив следующие команды.

php artisan config:cache;
composer dump-autoload;
0

Вы можете попробовать эти строки:

$credentials = new Aws\Credentials\Credentials('key' , 'secret-key');

$s3 = new S3Client(['version' => 'latest','region'  => 'ap-south-1','credentials'=>$credentials]);
-1
По вопросам рекламы [email protected]