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:
-
Escriba
cd ~
Con esto irá al directorio de inicio. -
mkdir .aws
-
sudo vi .aws/credentials
-
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.