AWS SNSにPHPでendPointを追加できない
またもやはまりまくり。
iPhoneへのPUSH通知にAWSのSNSを導入していて、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配下に下がったみたい。やれやれ。