【问题标题】:Amazon DynamoDB InvalidSignatureExceptionAmazon DynamoDB InvalidSignatureException
【发布时间】:2013-08-20 03:37:31
【问题描述】:

从这段代码中我得到了下面的错误

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

到目前为止,我已经:

  • 检查了 Authentication Key 和 Secret Key 是否正确。
  • 更新 cURL
  • 当我输入错误的身份验证权限时,错误并没有改变。

【问题讨论】:

    标签: php amazon-web-services amazon-dynamodb


    【解决方案1】:

    您的本地系统时间似乎不正确。我在使用 AWS S3 时遇到了类似的问题,我的系统时钟偏移了 30 分钟。

    如果您正在运行 ubuntu,请尝试更新您的系统时间:

    sudo ntpdate ntp.ubuntu.com
    

    【讨论】:

    • 感谢它完成了这项工作!
    • 在mac上sudo ntpdate -u time.apple.com
    • 我真的浪费了一整天的时间!感谢您的回答,立即解决了我的问题。
    • 这当然可以在大多数其他版本的 Linux 上运行,而不仅仅是 Ubuntu。
    • 你成功了,伙计!谢谢!!
    【解决方案2】:

    如果您已经安装了ntpdate,也可以重新启动日期服务来解决问题。

    sudo service ntpdate stop
    sudo service ntpdate start
    

    【讨论】:

      【解决方案3】:

      如果你在 Mac 上使用docker-machine,你可以用这个命令解决:

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

      【讨论】:

        【解决方案4】:

        vagrant 项目的快速说明:这通常由vagrant reload 解决。

        【讨论】:

          【解决方案5】:

          不完全是 OP 问题,但这是谷歌对“InvalidSignatureException DynamoDB”的最高响应,它有许多潜在原因。

          对我来说,这是因为我的身体包含 100% 可复制的表情符号。通过使用 encodeURIComponent 编码正文(在我的情况下为字符串化 json)来解决。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-27
            • 1970-01-01
            • 2013-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多