我安装了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 /凭证中读取凭据"错误(过了一段时间)。
我尝试过'凭据' => $提供者,当然,这是主意,但由于它没有工作我恢复到硬编码凭据。我已经倾销了$ S3_AK和$ S3_PK并且他们很好,我实际上正确地将它们用于S3,但是我有Zend的包装器。我已经尝试了〜/ .aws / credentials(no" .ini")得到相同的结果。这两个文件都具有777权限。
奇怪的信息:我必须将内存限制设置为-1,这样就可以var_dump异常。异常的html大约是200mb。
我更喜欢使用环境变量,尽管凭证文件很好。我只是不明白为什么它似乎试图读取文件,即使我已经硬编码了凭据。
编辑:所以朋友给我看了this,我删除了个人资料并修改了try / catch,发现客户端似乎是正确创建的,错误来自于尝试实际发送电子邮件。< / p>答案 0 :(得分:9)
诀窍就是从工厂参数中删除'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',
]);
答案 1 :(得分:1)
此解决方案可能仅在您使用SDK的第3版时才有效。我使用类似的东西:
$provider = CredentialsProvider::memoize(CredentialsProvider::ini($profile, $path));
$client = new SesClient([
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => $provider]);
我将它用于S3Client
,DynamoDbClient
和其他一些客户端,所以我假设SesClient
构造函数支持相同的参数。
答案 2 :(得分:-2)
好的,我设法解决了这个问题。 我无法读取凭据文件,但这不是我的想法。 发生的事情是成功创建了实际的客户端,但try / catch也包含了sendEmail。这就是失败的原因。 关于使用显式凭据创建客户端:如果指定了区域it will try and read a credentials file。
关于SendEmail,this is the syntax that worked for me,我在AWS文档网站中找到了另一个,但那个失败了。它必须适用于较旧的SDK。