4

我安装了 AWS PHP SDK 并尝试使用 SES。~/.aws/credentials我的问题是,无论我做什么,它(显然)都在尝试阅读。我目前有这个代码:

$S3_AK = getenv('S3_AK');
$S3_PK = getenv('S3_PK');
$profile = 'default';
$path = '/home/franco/public/site/default.ini';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = SesClient::factory(array(
      'profile' => 'default',
      'region' => 'us-east-1',
      'version' => "2010-12-01",
      'credentials' => [
        'key'    => $S3_AK,
        'secret' => $S3_PK,
      ]
  )); 

并且仍然收到“无法从 ~/.aws/credentials 读取凭据”错误(一段时间后)。

我当然尝试了 'credentials' => $provider,这是我的想法,但由于它不起作用,我恢复为硬编码的凭据。我已经抛弃了 $S3_AK 和 $S3_PK 并且它们很好,我实际上将它们正确地用于 S3,但是我有 Zend 的包装器。我已经尝试了 ~/.aws/credentials (no ".ini") 以获得相同的结果。这两个文件都有 777 权限。

好奇的信息:我必须将内存限制设置为 -1,以便能够 var_dump 异常。异常的 html 约为 200mb。

我更喜欢使用环境变量,尽管凭证文件很好。我只是不明白为什么它似乎在尝试读取文件,即使我已经硬编码了凭据。

编辑:所以一位朋友向我展示了这个,我删除了配置文件并修改了 try/catch 并注意到客户端似乎已正确创建,并且错误来自尝试实际发送电子邮件。

4

3 回答 3

20

诀窍只是'profile' => 'default'从工厂参数中删除,如果已定义,我们不能使用自定义凭据文件或环境变量。没有记录,但只是工作。

我正在使用 Sns 和 Sdk v3。

<?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',
]);
于 2017-12-23T04:56:01.033 回答
1

此解决方案可能仅在您使用 SDK 版本 3 时才有效。我使用类似的东西:

$provider = CredentialsProvider::memoize(CredentialsProvider::ini($profile, $path));
$client = new SesClient([
    'version' => 'latest',
    'region'  => 'us-east-1',
    'credentials' => $provider]);

我将它用于S3ClientDynamoDbClient和其他一些客户端,因此我假设SesClient构造函数支持相同的参数。

于 2016-05-20T09:09:56.313 回答
-2

好的,我设法修复它。我无法读取凭证文件,但这不完全是我的想法。发生的事情是实际客户端已成功创建,但 try/catch 也包含 sendEmail。这就是失败的原因。关于使用显式凭据创建客户端:如果您指定区域,它将尝试读取凭据文件

关于 SendEmail,这是对我有用的语法,我还在 AWS 文档站点中找到了另一个语法,但那个语法失败了。它一定是用于较旧的 SDK。

于 2016-05-20T13:37:17.437 回答