36

Ich versuche SNS-Nachrichten an Android über Web-API zu senden. heruntergeladen und installiert das SDK von http://aws.amazon.com/developers/getting-started/php/AWS SDK für PHP: Fehler beim Abrufen der Anmeldeinformationen vom Metadatenserver des Instanzprofils

Got Fehler folgende während sample.php ausgeführt wird:

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 

Ein wenig Anleitung zu diesem Thema mir viel

+0

Das bedeutet, dass Sie Ihre Anmeldeinformationen nicht korrekt konfiguriert ist. Weitere Informationen finden Sie unter [Bereitstellen von Anmeldeinformationen für das SDK] (http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html) im AWS SDK for PHP-Benutzerhandbuch. –

+0

Ich habe bereits die Datei /.aws/credentials mit AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY wie hier erwähnt konfiguriert. Immer noch funktioniert es nicht – Ravindra

+0

@Ravindra Haben Sie jemals eine Lösung gefunden? Ich habe das gleiche Problem –

Antwort

7

helfen Sie haben die .aws/credentials Datei platzieren mit Ihrer Konfiguration im Home-Verzeichnis des Web-Service * in der Regel /var/www) nicht im Home-Verzeichnis des angemeldeten Benutzers.

Sie können herausfinden, welches Home-Verzeichnis Ihr Web-Service verwendet, indem Sie echo getenv('HOME'); in einer PHP-Datei auf Ihrem Server ausführen.

116

In meinem Fall war ich mit

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

, die mit aws/aws-sdk-php Version 2.8.5 ok früher, aber als Komponist Version automatisch installiert 3.2.0, bekam ich den obigen Fehler. Das Problem ist nur, dass ich die Art und Weise geändert haben sollte ich den Anruf zu

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

als here dokumentiert. Ohne den Anruf zu ändern, fiel die Apache PHP zurück auf die Suche nach der ~/.aws/credentials Datei mit der Umgebungsvariablen HOME, die leer war. Sie können den Wert überprüfen, indem Sie php -r 'var_dump(getenv("HOME"));' ausführen.

This ist ein Ergebniss zu

+6

Das hat mir große Kopfschmerzen erspart. – vcardillo

+1

Das war mein Problem. – jbolter

+1

thx, du hast mir viel Zeit gespart – Dmitry

3

Ich habe versucht, eine Credentials-Datei zu verwenden, und bekam den gleichen Fehler, this guy auf Github genagelt so ziemlich alles:

Die Credentials-Datei in ini-Format sein sollte, aber keine .ini-Erweiterung haben. Es soll einen ‚default‘ Abschnitt mit Ihrem Schlüssel und geheimen definiert hat:

$ less ~/.aws/credentials 

[default] 
aws_access_key_id = key 
aws_secret_access_key = secret 

Wenn Sie statt Standard andere Abschnittsnamen angegeben, nur einen profile Schlüssel zu dem S3Client Parameter hinzuzufügen:

[example] 
aws_access_key_id = key 
aws_secret_access_key = secret 

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

unter Verwendung eines Berechtigungsnachweise oder Umgebungsvariablen-Datei ist die empfohlene Methode von Anmeldeinformationen auf Ihrem eigenen Server bereitstellt

Und @Antis Antwort hat mir auch sehr geholfen!

Wenn Sie den fest codierten Weg bevorzugen, folgen Sie einfach @shadis Antwort.

4

Hier sind die Schritte:

  1. Typ cd ~ Damit Sie in das Home-Verzeichnis gehen.
  2. mkdir .aws
  3. sudo vi .aws/credentials
  4. schreiben folgende Zeilen und die Datei speichern.

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

Das funktioniert gut, wenn du versuchst, das AWS SDK in Kommandozeilenskripten zu verwenden . – apokryfos

0

In meinem Fall hatte ich hartcodierte Anmeldeinformationen

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

Weitere Details here zu verwenden: