有没有办法使用 Laravel AWS SDK 设置 DynamoDB Local?
Is there a way to set up DynamoDB Local with the Laravel AWS SDK?
我在尝试启动 DynamoDB Local 和 运行 我当前的 laravel 项目时遇到了问题。
Laravel AWS SDK 允许在 .env 文件中设置一些键来更改 key/secret/region,但似乎不支持更改端点,而这将是必需的使用 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 SDK,我无法直接访问 DynamoDBClient,而无需破解生产 DynamoDB 连接所需的一堆东西。
例如,使用 Laravel AWS SDK,DynamoDB 可通过类似以下方式访问:
$dynamoDB = AWS::get('DynamoDb');
我真的很想找一个可以更改的环境变量之类的东西,这样我就可以轻松地在生产环境和本地环境之间切换,但是我找不到。
是否有使用 Laravel AWS SDK 设置 DynamoDB Local 的简单方法?
我最终让它工作的方法是创建我自己的环境变量,然后检查它是否在我获得 DynamoDBClient 时设置。
AWS::get('DynamoDb')
以上 return 是一个自动使用您的 AWS 配置的 DynamoDBClient。
因此,我检查了 env 变量,并且 return 如果设置了 env 变量,则使用本地配置的 DynamoDBClient。我不得不使用 Aws DynamoDBClient class:
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 提供某种简单的环境配置就好了,但这似乎适合我的使用。
这在 V3 of the Laravel AWS SDK 中是可能的。我在我的服务提供商 class.
中做了类似以下的事情
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。
我在尝试启动 DynamoDB Local 和 运行 我当前的 laravel 项目时遇到了问题。
Laravel AWS SDK 允许在 .env 文件中设置一些键来更改 key/secret/region,但似乎不支持更改端点,而这将是必需的使用 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 SDK,我无法直接访问 DynamoDBClient,而无需破解生产 DynamoDB 连接所需的一堆东西。
例如,使用 Laravel AWS SDK,DynamoDB 可通过类似以下方式访问:
$dynamoDB = AWS::get('DynamoDb');
我真的很想找一个可以更改的环境变量之类的东西,这样我就可以轻松地在生产环境和本地环境之间切换,但是我找不到。
是否有使用 Laravel AWS SDK 设置 DynamoDB Local 的简单方法?
我最终让它工作的方法是创建我自己的环境变量,然后检查它是否在我获得 DynamoDBClient 时设置。
AWS::get('DynamoDb')
以上 return 是一个自动使用您的 AWS 配置的 DynamoDBClient。
因此,我检查了 env 变量,并且 return 如果设置了 env 变量,则使用本地配置的 DynamoDBClient。我不得不使用 Aws DynamoDBClient class:
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 提供某种简单的环境配置就好了,但这似乎适合我的使用。
这在 V3 of the Laravel AWS SDK 中是可能的。我在我的服务提供商 class.
中做了类似以下的事情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。