有没有办法使用 Laravel AWS SDK 设置 DynamoDB Local?

Eri*_*rik 5 php amazon-web-services laravel amazon-dynamodb dynamo-local

我在尝试使用当前的 Laravel 项目启动并运行 DynamoDB Local 时遇到了问题。

Laravel AWS SDK 允许在 .env 文件中设置一些密钥来更改密钥/秘密/区域,但似乎不支持更改端点,而这是使用 DynamoDB Local 所需要的(关键选项位于自述文件在这里: https: //github.com/aws/aws-sdk-php-laravel)。

常规 PHP SDK的文档似乎非常简单地介绍了如何设置 Dynamo DB Local:

$client = DynamoDbClient::factory(array(
    'profile' => 'default',
    'region' => 'us-west-2', #replace with your desired region
    'endpoint' => 'http://localhost:8000'
));
Run Code Online (Sandbox Code Playgroud)

使用 Laravel AWS SDK,如果不修改生产 DynamoDB 连接所需的一堆内容,我就无法直接访问 DynamoDBClient。

例如,使用 Laravel AWS SDK,可以通过以下方式访问 DynamoDB:

$dynamoDB = AWS::get('DynamoDb');
Run Code Online (Sandbox Code Playgroud)

我真的在寻找诸如可以更改的环境变量之类的东西,以便我可以轻松地在生产环境和本地环境之间切换,但我找不到它。

有没有简单的方法可以使用 Laravel AWS SDK 设置 DynamoDB Local?

Eri*_*rik 2

我最终让它工作的方法是创建我自己的环境变量,然后检查它是否在我获得 DynamoDBClient 时设置。

AWS::get('DynamoDb')
Run Code Online (Sandbox Code Playgroud)

上面返回一个自动使用您的 AWS 配置的 DynamoDBClient。

因此,我检查了 env 变量,如果设置了 env 变量,则返回具有本地配置的 DynamoDBClient。我必须使用 Aws DynamoDBClient 类:

use Aws\DynamoDb\DynamoDbClient;
Run Code Online (Sandbox Code Playgroud)

然后我做了:

if( env("DYNAMODB_LOCAL")) {
    $this->client = DynamoDbClient::factory(array(
        'key' => 'YOUR_KEY', // Doesn't actually matter what it is since it won't be verified
        'secret' => 'YOUR_SECRET', // Doesn't actually matter what it is since it won't be verified
        'profile' => 'default',
        'region' => 'us-west-2', #replace with your desired region
        'endpoint' => 'http://localhost:8000' // Replace if your local endpoint is different than default
    ));
}
else {
    $this->client = AWS::get('DynamoDb');
}
Run Code Online (Sandbox Code Playgroud)

如果 Laravel AWS SDK 能够为 DynamoDB Local 提供某种简单的环境配置,那就太好了,但这似乎适合我的使用。