前提
- DynamoDB のテーブル管理のために特別なオペレーションを増やしたくない
- baopham/dynamodb を利用している
- テスト実行時は DynamoDB を使わない
やったこと
いつもの migration の中で DynamoDB のテーブル作成・削除も行うようにする。
<?php
use Illuminate\Database\Migrations\Migration;
use BaoPham\DynamoDb\DynamoDbClientService;
class CrateDynamoDbMoviesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// テスト時には DynamoDB を利用しない
if (app()->environment('testing')) {
return;
}
$dynamoDbClientService = resolve(DynamoDbClientService::class);
$client = $dynamoDbClientService->getClient();
$params = [
'TableName' => 'Movies',
'KeySchema' => [
[
'AttributeName' => 'year',
'KeyType' => 'HASH',
],
[
'AttributeName' => 'title',
'KeyType' => 'RANGE',
],
],
'AttributeDefinitions' => [
[
'AttributeName' => 'year',
'AttributeType' => 'N'
],
[
'AttributeName' => 'title',
'AttributeType' => 'S'
],
],
'ProvisionedThroughput' => [
'ReadCapacityUnits' => 10,
'WriteCapacityUnits' => 10,
],
];
$client->createTable($params);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// テスト時には DynamoDB を利用しない
if (app()->environment('testing')) {
return;
}
$dynamoDbClientService = resolve(DynamoDbClientService::class);
$client = $dynamoDbClientService->getClient();
$params = [
'TableName' => 'Movies',
];
$client->deleteTable($params);
}
}
その他検討したこと
- nordsoftware/lumen-dynamodb はテーブル作成のための仕組みを提供しているが、migration の機能は提供してなさそう
-
quankim/laravel-dynamodb-migrations というものも存在しているが、ドキュメントが少ないのと、利用実績があまりなさそう(Github の
Star, packagist の Installs)なので今回は見送り