Is there a way to set up DynamoDB Local with the L

2019-08-10 03:06发布

问题:

I have run into problems trying to get DynamoDB Local up and running with my current laravel project.

The Laravel AWS SDK allows for a few keys to be set in the .env file to change the key/secret/region, but does not seem to support changing the endpoint, and that would be needed to use DynamoDB Local (key options are in the readme here: https://github.com/aws/aws-sdk-php-laravel).

The documentation for the regular PHP SDK seems pretty straight-forward about how to set up Dynamo DB Local:

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

With the Laravel AWS SDK I don't have direct access to the DynamoDBClient without hacking up a bunch of stuff that is necessary for the production DynamoDB connection.

For example with the Laravel AWS SDK the DynamoDB is accessed by something like:

$dynamoDB = AWS::get('DynamoDb');

I am really looking for something like an environment variable that can be changed so that I can easily switch between production and my local, but I can't find it.

Is there any easy way to set up DynamoDB Local with the Laravel AWS SDK?

回答1:

The way I ended up getting this to work was to create my own environment variable and then check to see if it was set when I got the DynamoDBClient.

AWS::get('DynamoDb')

The above returns a DynamoDBClient that is automatically using your AWS configuration.

So, I did a check for the env variable, and return a DynamoDBClient with the local configuration if the env variable is set. I had to use the Aws DynamoDBClient class:

use Aws\DynamoDb\DynamoDbClient;

Then I did:

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

It would have been nice if the Laravel AWS SDK came with some kind of easy environment configuration for DynamoDB Local, but this seems to work for my uses.