web-dev-qa-db-fra.com

AWS SDK pour PHP: erreur lors de l'extraction des informations d'identification du serveur de métadonnées de profil d'instance

J'essaie d'envoyer des messages SNS à Android via une application Web . Téléchargé et installé le SDK à partir de http://aws.Amazon.com/developers/getting-started/php/

Vous avez une erreur suivante lors de l'exécution de 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

Un peu de conseils sur ce sujet m'aidera beaucoup

47
Ravindra

Dans mon cas, j'utilisais

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

qui fonctionnait jadis avec aws/aws-sdk-php version 2.8.5, mais lorsque composer a automatiquement installé la version 3.2.0, j'ai eu l'erreur ci-dessus. Le problème est simplement que j’aurais dû changer la façon dont j’ai appelé

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

comme documenté ici . Sans changer l'appel, le Apache php retombait dans la recherche du fichier ~/.aws/credentials à l'aide de la variable d'environnement HOME, qui était vide. Vous pouvez vérifier sa valeur en exécutant php -r 'var_dump(getenv("HOME"));'.

Ceci est un article lié

137
shadi

Vous devez placer le fichier .aws/credentials avec votre configuration dans le répertoire de base du service Web * généralement /var/www) et non dans le répertoire de base de l'utilisateur connecté.

Vous pouvez trouver le répertoire de base utilisé par votre service Web en exécutant echo getenv('HOME'); dans un fichier php sur votre serveur.

8
Anti

Dans mon cas, je devais utiliser des informations d'identification codées en dur

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

Voir plus de détails ici :

5
elegant-user

Voici les étapes:

  1. Tapez cd ~Par cela, vous irez dans le répertoire personnel.
  2. mkdir .aws
  3. Sudo vi .aws/credentials
  4. Écrivez les lignes suivantes et enregistrez le fichier.

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

J'essayais d'utiliser un fichier d'identifiants et j'ai eu la même erreur, ce gars sur github a très bien réussi:

Le fichier d'informations d'identification doit être au format ini mais ne pas avoir une extension .ini. Il devrait avoir une section 'default' définie avec votre clé et votre secret:

$ less ~/.aws/credentials

[default]
aws_access_key_id = key
aws_secret_access_key = secret

Si vous avez spécifié un autre nom de section au lieu de celui par défaut, ajoutez simplement une clé profile aux paramètres 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',
]);

L'utilisation d'un fichier d'informations d'identification ou de variables d'environnement est la méthode recommandée pour fournir des informations d'identification sur votre propre serveur.

Et la réponse de @Anti m'a aussi beaucoup aidé!

Si vous préférez la méthode codée en dur, suivez simplement la réponse de @shadi.

3

Si c'est laravel et aws/aws-sdk-php-laravel sdk, après avoir configuré toutes les étapes et défini le fichier .env, vous devez supprimer le cache de configuration et le reconstruire à l'aide des commandes suivantes.

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