2013-08-18 4 views
28

Из этого кода я получаю ошибку нижеAmazon DynamoDB InvalidSignatureException

require "vendor/autoload.php"; 
use Aws\Common\Aws; 
use Aws\DynamoDb\DynamoDbClient; 
use Aws\DynamoDb\Enum\ComparisonOperator; 
use Aws\DynamoDb\Enum\KeyType; 
use Aws\DynamoDb\Enum\Type; 

$aws = Aws::factory(array(
'key' => '[clipped]', 
'secret' => '[clipped]', 
'region' => Region::US_WEST_1 
)); 

$client = $aws->get("dynamodb"); 
$tableName = "ExampleTable"; 

$result = $client->createTable(array(
    "TableName" => $tableName, 
    "AttributeDefinitions" => array(
     array(
      "AttributeName" => "Id", 
      "AttributeType" => Type::NUMBER 
     ) 
    ), 
    "KeySchema" => array(
     array(
      "AttributeName" => "Id", 
      "KeyType" => KeyType::HASH 
     ) 
    ), 
    "ProvisionedThroughput" => array(
     "ReadCapacityUnits" => 5, 
     "WriteCapacityUnits" => 6 
    ) 
)); 

print_r($result->getPath('TableDescription')); 

Я получаю следующее сообщение об ошибке при попытке добавить таблицу в DynamoDB AWS в.

PHP Fatal error: Uncaught Aws\\DynamoDb\\Exception\\DynamoDbException: AWS Error Code: 
InvalidSignatureException, 
Status Code: 400, 
AWS Request ID: [clipped], 
AWS Error Type: client, 
AWS Error Message: Signature expired: 20130818T021159Z is now earlier than 
20130818T021432Z (20130818T022932Z - 15 min.), 
User-Agent: aws-sdk-php2/2.4.3 Guzzle/3.7.2 curl/7.21.6 PHP/5.3.6-13ubuntu3.9\n thrown in 
/var/www/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php on 
line 91 

До сих пор я:

  • Проверено, чтобы увидеть, если Authentication Key и Secret Key были правильными, они были.
  • Обновлено cURL
  • Когда я ввел ложные разрешения на аутентификацию, ошибка не изменилась.

ответ

81

Возможно, ваше местное системное время может быть неверным. У меня была аналогичная проблема с AWS S3, где мои системные часы были перекошены на 30 минут.

Если вы работаете в Ubuntu, попробуйте обновить системное время:

sudo ntpdate ntp.ubuntu.com 
+1

Спасибо, что это сработало! –

+8

на mac 'sudo ntpdate -u time.apple.com' – BKH

+0

Я буквально растратил весь свой день на это! Спасибо за этот ответ, мгновенно исправил проблему. –

2

Вы также можете перезапустить службу даты, чтобы решить эту проблему, если вы уже получили Ntpdate установлены.

sudo service ntpdate stop 
sudo service ntpdate start 
1

Если вы используете docker-machine на Mac, вы можете решить с помощью этой команды:

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'

0

Краткое примечание для беспризорных проектов: это, как правило, решаются vagrant reload.