自宅プログラマーの憂鬱

Since 2013。個人でアプリ作っています。

AWS SNSにPHPでendPointを追加できない

またもやはまりまくり。
iPhoneへのPUSH通知にAWSSNSを導入していて、endPointの登録にAWS SDK for PHPを使用したのですが、はまりましたので共有します。解決策はこちらを参考にしました。

AWS SDK用のPHPスクリプトは以下で良いはずなのですが、エラーになります。

<?php 
require 'aws.phar';
use Aws\Sns\SnsClient;
 
$sns = SnsClient::factory(array(
            'version' => 'latest',  //これ入れないとエラー吐く
            'key'    => 'アクセスキーを入れる', //アクセスキー
            'secret' => 'シークレットキーを入れる', //シークレットキー
            'region' => 'ap-northeast-1'//地域コード
            ));
 
//デバイス(iPhone等)からデバイストークンを受け取る
$token = $_POST['token'];
 
//Application ARN:Amazon SNS上のAPP ARNを指定
$iOS_AppArn = 'arn:aws:sns:ap-northeast-1:1234567890:app/APNS_SANDBOX/hogehoge';
 
$options = array(
            'PlatformApplicationArn' => $iOS_AppArn,
            'Token' => $token,
            'CustomUserData' => "Test" //User Data
);
 
//エンドポイントをAmazon SNSに登録
$sns->createPlatformEndpoint($options);

?>

実行結果:404 Not Found、アクセスできてない

PHP Fatal error:  Uncaught exception 'Aws\Exception\CredentialsException'
 with message 'Error retrieving credentials from the instance profile metadata
 server. (Client error: `GET http://xxx.xxx.xxx.xxx/latest/meta-data/iam/
security-credentials/` resulted in a `404 Not Found` response:

で、アクセスキーとか、シークレットキーを設定する部分を以下の様に変更。

$sns = SnsClient::factory(array(
            'version' => 'latest', //これ入れないとエラー吐く
            'credentials' => [
                'key'    => 'AccessKey',
                'secret=> 'secret '],
            'region' => 'ap-northeast-1'//地域コード
            ));

これで、無事登録。どうやらパラメータがcredentials配下に下がったみたい。やれやれ。