Подтвердить что ты не робот

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

Я пытаюсь отправить messeges SNS в android через web 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

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

4b9b3361

Ответ 1

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

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,
  )
));

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

Это является связанным сообщением

Ответ 2

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

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

Подробнее смотрите здесь:

Ответ 3

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

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

Ответ 4

Вот шаги:

  • Тип cd ~ Таким образом вы перейдете в домашний каталог.
  • mkdir .aws
  • sudo vi .aws/credentials
  • Запишите следующие строки и сохраните файл.

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

Ответ 5

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

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

$ 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.

Ответ 6

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

php artisan config:cache;
composer dump-autoload;

Ответ 7

Это может быть потому, что файл конфигурации не был опубликован.

Обязательно опубликуйте файл конфигурации:

php artisan vendor:publish  --provider="Aws\Laravel\AwsServiceProvider"

Чтобы проверить это проблема, просто очистите конфиг.

php artisan config:clear

Если это работает с очищенным кешем, то это будет проблемой.

Ответ 8

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

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

$s3 = new S3Client(['version' => 'latest','region'  => 'ap-south-1','credentials'=>$credentials]);