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
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é
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.
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 :
Voici les étapes:
cd ~
Par cela, vous irez dans le répertoire personnel.mkdir .aws
Sudo vi .aws/credentials
É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
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.
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;