Подтвердить что ты не робот

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'));

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

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

До сих пор я:

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

Ответ 1

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

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

sudo ntpdate ntp.ubuntu.com

Ответ 2

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

sudo service ntpdate stop
sudo service ntpdate start

Ответ 3

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

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

Ответ 4

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