3

AWS IoT サービスに接続された IoT デバイスの ThingShadow 状態を取得するコードを PHP で書きました。

public function getState($name){
    require_once HOME . DS . 'includes' . DS . 'aws' . DS . 'aws-autoloader.php';
    $IoT = new Aws\IotDataPlane\IotDataPlaneClient([
        'version' => 'latest',
        'region'  => 'us-west-2'
    ]);

    $result = $IoT->getThingShadow([
        'thingName' => $name, // REQUIRED
    ]);

    echo $result["payload"]->getContents();
}

localhost サーバーで実行すると完全に動作しますが、EC2 インスタンスで実行すると動作しません。このメソッドを呼び出すと、ループのように見えるものでスタックします。

資格情報を確認しましたが、すべて問題ありません。

テストの場合、間違って入力するthingNameと、次のエラーが発生します。

Fatal error: Uncaught exception 'Aws\IotDataPlane\Exception\IotDataPlaneException' with message 'Error executing "GetThingShadow" on "https://data.iot.us-west-2.amazonaws.com/things/WRONG_NAME/shadow"; AWS HTTP error: Client error: 404 ResourceNotFoundException (client): No shadow exists with name: 'WRONG_NAME' - {"message":"No shadow exists with name: 'WRONG_NAME'","traceId":"f3c5f1ba-e24a-448d-b4e2-d6265751df87"}' exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: 404' in /var/www/html/includes/aws/GuzzleHttp/Middleware.php:69 Stack trace: #0 /var/www/html/includes/aws/GuzzleHttp/Promise/Promise.php(199): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response)) #1 /var/www/html/includes/aws/GuzzleHttp/Promise/Promise.php(152): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array) #2 /var/www/html/includes/aws/GuzzleHttp/Promise/TaskQueue.php(60): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #3 /var/www/html/includes/aws/GuzzleHtt in /var/www/html/includes/aws/Aws/WrappedHttpHandler.php on line 152

既存のものの実際の名前でコードを実行すると、応答しません。コードがどこかでループしているようです。

AWS PHP SDK v3 を使用しています。

4

0 に答える 0