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 salía 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".
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',
]);
Solución al error
Después de depurar un rato me di cuenta de que si colocamos 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 quitó 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