【问题标题】:Is there a way to set up DynamoDB Local with the Laravel AWS SDK?有没有办法使用 Laravel AWS 开发工具包设置 DynamoDB Local?
【发布时间】:2015-09-15 18:49:42
【问题描述】:

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

Laravel AWS 开发工具包允许在 .env 文件中设置一些密钥来更改密钥/秘密/区域,但似乎不支持更改端点,而使用 DynamoDB Local(密钥选项在此处的自述文件中:https://github.com/aws/aws-sdk-php-laravel)。

常规 PHP SDK 的 documentation 似乎非常直接地说明了如何设置 Dynamo DB Local:

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

使用 Laravel AWS 开发工具包,我无法直接访问 DynamoDBClient,而无需破解生产 DynamoDB 连接所需的大量内容。

例如,使用 Laravel AWS 开发工具包,DynamoDB 可以通过以下方式访问:

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

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

是否有任何简单的方法可以使用 Laravel AWS 开发工具包设置 DynamoDB Local?

【问题讨论】:

    标签: php laravel amazon-web-services amazon-dynamodb dynamo-local


    【解决方案1】:

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

    AWS::get('DynamoDb')
    

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

    所以,我检查了 env 变量,如果设置了 env 变量,则返回带有本地配置的 DynamoDBClient。我不得不使用 Aws DynamoDBClient 类:

    use Aws\DynamoDb\DynamoDbClient;
    

    然后我做了:

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

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

    【讨论】:

      【解决方案2】:

      这在V3 of the Laravel AWS SDK 中是可能的。我在我的服务提供者类中做了类似以下的事情。

      use Aws\DynamoDb\DynamoDbClient;
      use Aws\Laravel\AwsFacade;
      
      // This would be http://localhost:8000 or whatever your local is configured to be
      $endpoint = getYourLocalEndpointFromConfig();
      
      $args = [
        'key' => 'anything',
        'secret' => 'anything',
        'region' => 'us-east-1',
      ];
      
      if ($endpoint !== null) {
        $args['endpoint'] = $endpoint;
      }
      
      /** @var DynamoDbClient $client */
      $client = AwsFacade::createClient('dynamodb', $args);
      

      您的$endpoint 以及$args 数组中的所有值都可以从您的配置或.env 文件或其他任何地方读取。在非本地环境中,$endpoint 变量将为 null,因此在创建 $client 对象时不会包含它,因此您将连接到真正的 DynamoDB Web 服务(假设密钥有效)。

      在此之后,$client 对象可以进行in the documentation 列出的任何调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-22
        • 2015-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        • 2014-12-05
        相关资源
        最近更新 更多