DynamoDB 本地基本 PHP 设置

问题描述 投票:0回答:1

我在连接到本地 DynamoDB 实例时遇到一些问题。我通过在命令提示符下运行以下命令来启动服务器:

C:\Program Files\Java\jre8\bin>java -Djava.library.path=D:\DynamoDB\DynamoDBLoca
l_lib -jar D:\DynamoDB\DynamoDBLocal.jar

我的 PHP 代码如下所示:

<?

require './aws-autoloader.php';
use \Aws\DynamoDb\DynamoDbClient;

$client = \Aws\DynamoDb\DynamoDbClient::factory(array(
    'profile' => 'default',
    'region' => 'us-east-1',
    'base_url' => 'http://localhost:8000'
));


// create test table    
$client->createTable(array(
    'TableName' => 'errors',
    'AttributeDefinitions' => array(
        array(
            'AttributeName' => 'id',
            'AttributeType' => 'N'
        ),
        array(
            'AttributeName' => 'time',
            'AttributeType' => 'N'
        )
    ),
    'KeySchema' => array(
        array(
            'AttributeName' => 'id',
            'KeyType'       => 'HASH'
        ),
        array(
            'AttributeName' => 'time',
            'KeyType'       => 'RANGE'
        )
    ),
    'ProvisionedThroughput' => array(
        'ReadCapacityUnits'  => 10,
        'WriteCapacityUnits' => 20
    )
));

当我执行 createTable() 命令时,我在服务器运行的命令提示符窗口中看不到任何活动,并且收到以下错误:

Fatal error:  Uncaught exception 'Aws\Common\Exception\InstanceProfileCredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. When you are not running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in the "key" and "secret" options when creating a client or provide an instantiated Aws\Common\Credentials\CredentialsInterface object. ([curl] 28: Connection timed out after 5008 milliseconds [url] http://169.254.169.254/latest/meta-data/iam/security-credentials/)' in C:\xampp\htdocs\AWS\Aws\Common\InstanceMetadata\InstanceMetadataClient.php:85 Stack trace:
#0 C:\xampp\htdocs\AWS\Aws\Common\Credentials\RefreshableInstanceProfileCredentials.php(52): Aws\Common\InstanceMetadata\InstanceMetadataClient->getInstanceProfileCredentials()
#1 C:\xampp\htdocs\AWS\Aws\Common\Credentials\AbstractRefreshableCredentials.php(54): Aws\Common\Credentials\RefreshableInstanceProfileCredentials->refresh()
#2 C:\xampp\htdocs\AWS\Aws\Common\Signature\SignatureV4 in C:\xampp\htdocs\AWS\Aws\Common\InstanceMetadata\InstanceMetadataClient.php on line 85

我有点困惑,因为代码似乎没有到达本地服务器,这显然会阻止其他任何东西工作。任何意见/想法将不胜感激。

php windows amazon-dynamodb
1个回答
5
投票

我不想这么快回答这个问题,但事实证明,即使对于本地 DynamoDB 使用,也需要密钥/秘密。奇怪的是,AWS 网站上没有提到这一点,但这里是连接的工作代码,之后所有其他示例都已工作:

$client = \Aws\DynamoDb\DynamoDbClient::factory(array(
    'credentials' => [
        'key' => 'YOUR_KEY',
        'secret' => 'YOUR_SECRET',
    ],
    'region' => 'us-west-2',
    'endpoint' => 'http://localhost:8000'
));
© www.soinside.com 2019 - 2024. All rights reserved.