aws php amazon-web-services google-cloud-messaging aws-sdk amazon-sns

AWS SDK para PHP: error al recuperar credenciales del servidor de metadatos del perfil de instancia



amazon ses php (8)

Aquí están los pasos:

  1. Escriba cd ~ Con esto irá al directorio de inicio.
  2. mkdir .aws
  3. sudo vi .aws/credentials
  4. Escriba las siguientes líneas y guarde el archivo.

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

Estoy tratando de enviar mensajes SNS a Android a través de la API web. Descargué e instalé el SDK desde http://aws.amazon.com/developers/getting-started/php/

Recibí el siguiente error al ejecutar 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 poco de orientación sobre este tema me ayudará mucho


En mi caso tuve que usar credenciales codificadas

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

Ver más detalles here :


En mi caso, estaba usando

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

que solía estar bien con aws/aws-sdk-php versión 2.8.5, pero cuando el compositor instaló automáticamente la versión 3.2.0, obtuve el error anterior. El problema es simplemente que debería haber cambiado la forma en que hice la llamada a

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

como se documenta here . Sin cambiar la llamada, el apache php estaba volviendo a buscar el archivo ~/.aws/credentials usando la variable de entorno HOME, que estaba vacía. Puede verificar su valor ejecutando php -r ''var_dump(getenv("HOME"));'' .

This es una publicación relacionada


Estaba tratando de usar un archivo de credenciales y obtuve el mismo error, este tipo en github prácticamente lo logró:

El archivo de credenciales debe estar en formato ini pero no tener una extensión .ini. Debe tener una sección ''predeterminada'' definida con su clave y secreto:

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

Si especificó otro nombre de sección en lugar del predeterminado, simplemente agregue una clave de profile a los parámetros de S3Client:

$ less ~/.aws/credentials [default] aws_access_key_id = key aws_secret_access_key = secret

El uso de un archivo de credenciales o variables de entorno es la forma recomendada de proporcionar credenciales en su propio servidor

¡Y la respuesta de @Anti también me ayudó mucho!

Si prefiere la forma codificada, solo siga la respuesta de @shadi.


Esto podría deberse a que el archivo de configuración no se ha publicado.

Asegúrese de publicar el archivo de configuración:

php artisan config:cache; composer dump-autoload;

Para probar este es el problema, simplemente borre la configuración.

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

Si funciona con el caché borrado, entonces este será el problema.


Puedes probar estas líneas:

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


Si es laravel y aws / aws-sdk-php-laravel sdk, luego de configurar todos los pasos y definir la clave en el archivo .env, debe soltar la caché de configuración y reconstruirla siguiendo los comandos.

php artisan config:clear


.aws/credentials colocar el archivo .aws/credentials con su configuración en el directorio de inicio del servicio web * generalmente /var/www ), no en el directorio de inicio del usuario conectado.

Puede encontrar qué directorio de inicio está utilizando su servicio web ejecutando echo getenv(''HOME''); en un archivo php en su servidor.