Solucion al error de AWS SDK PHP "Cannot read credentials from ~/.aws/credentials"

Hace tiempo use el SDK de AWS para PHP de Amazon y al querer usar credenciales personalizadas mediante Variables o con Variables de entorno me salia el error "Cannot read credentials from ~/.aws/credentials". Esto significa que el SDK pasara lo que pasara siempre quería usar las credenciales del archivo "~/.aws/credentials".

aws sdk php page

El código que usaba originalmente es:

<?php
use Aws\Credentials\CredentialProvider;

$profile = 'sns-reminders';
$path = '../private/credentials';

$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);

$sdk = new Aws\Sdk(['credentials' => $provider]);

$sns = $sdk->createSns([
        'profile' => $profile,
        'region'  => 'us-east-1',
        'version' => 'latest',
]);

Después de depurarlo un rato me di cuenta que si colocábamos el nombre del perfil al momento de crear una instancia con createSns() este se iba directamente a buscar las credenciales en el archivo "~/.aws/credentials". Por lo tanto la solución es quitar el nombre del perfil de ahí y listo. Tendría que quedar algo así:

<?php
use Aws\Credentials\CredentialProvider;

$profile = 'sns-reminders';
$path = '../private/credentials';

$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);

$sdk = new Aws\Sdk(['credentials' => $provider]);

$sns = $sdk->createSns([
        'region'  => 'us-east-1',
        'version' => 'latest',
]);

Noten que se quito la parte de 'profile' => $profile.

Esto funciona con la versión 3 del SDK con cualquier perfil, yo en este caso estaba usando el servicio de AWS SNS.

Github del SDK: AWS SDK PHP

Etiquetas
Categorías

Comentarios