0

AWS PHP SDKをインストールしましたが、SESを使用しようとしています。私の問題は、明らかに私が何をするにしても~/.aws/credentialsを読もうとしていることです。AWS PHP SDKに資格情報を渡すことができません

$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' => $ providerを試しましたが、それはアイデアでしたが、動作していないので、ハードコードされた資格情報に戻りました。私は$ S3_AKと$ S3_PKを投げ捨てました。彼らは本当にS3用に正しく使用していますが、そこにはZendのラッパーがあります。私は〜/ .aws/credentials(no ".ini")を同じ結果に試みました。どちらのファイルも777の権限を持っています。

奇妙な情報:例外をvar_dumpできるように、メモリの制限を-1に設定する必要がありました。例外へのhtmlは約200MBです。

資格情報ファイルは問題ありませんが、環境変数を使用することをお勧めします。私は信任状をハードコーディングしたにもかかわらず、ファイルを読み込もうとしているように見える理由は分かりません。

EDIT:友達が私にthisと表示し、プロファイルを削除して試してみると、クライアントが正しく作成されているように見えて、実際にメールを送信しようとしたことに気付きました。

+0

変数は 'AWS_ACCESS_KEY_ID'と' AWS_SECRET_ACCESS_KEY'すべきではありませんか? –

+0

私の答えがうまくいかない場合は、ファイルだけでなくファイルの親ディレクトリのパーミッションもチェックしてください。サーバーが実行されているユーザーは、親ディレクトリの1つを開くことができないため、サーバーを読み取ることができない場合があります。これは 'sudo -u www-data stat/home/franco/public/site/default.ini'のようなものでテストできます。ここで' www-data'はサーバーユーザーです。 – millinon

+0

フレデリック、1つはキーID、もう1つはアクセスキーです。私はそれらを環境変数から取得しています。それでも問題は、明示的に資格情報を伝えていますが、そのファイルを読み込もうとしていることです。 – shinax

答えて

-1

いいえ、私はそれを修正することができました。 資格情報ファイルを読むことができませんでしたが、それは私の考えではありませんでした。 実際のクライアントが正常に作成されていたのですが、try/catchにもsendEmailが含まれていました。これは失敗していたものでした。 明示的な資格情報を持つクライアントの作成について:地域を指定する場合、it will try and read a credentials file

SendEmailについて、this is the syntax that worked for meについては、AWSのドキュメントサイトにももう1つ見つかりましたが、1つは失敗しました。これは古いSDKのものだったはずです。

1

このソリューションは、SDKのバージョン3を使用している場合にのみ有効です。私はS3ClientDynamoDbClient、およびいくつかの他のクライアントのためにこれを使用するので、私はSesClientコンストラクタが同じ引数をサポートしていることを想定しています

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

:私はこれに似たものを使用します。

+0

私が言ったように、「資格情報=> $プロバイダーはもちろん」と試しましたが、それでもファイルを読み込もうとしました。 – shinax

0

このトリックでは、工場出荷時のパラメータからちょうど'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', 
]); 
関連する問題