Laravel-dynamodbで使ってdynamoDBに接続してみる
前提
NoSQLの概念自体もRDMSしか触ってこなかった自分にとっては全く知らなかったので
ひとまず触りながら理解していこうということでLaravelでDynamoDBを操作できるLaravel-dynamodbライブラリについて解説していこうと思います。
インストール
$ composer require baopham/dynamodb
インストールができたらconfig/app.phpに以下を追加。
'providers' => [
...
BaoPham\DynamoDb\DynamoDbServiceProvider::class,
...
];
続いて、config/dynamo.phpファイルを作成
$ php artisan vendor:publish --provider 'BaoPham\DynamoDb\DynamoDbServiceProvider'
config/dynamodb.phpで必要になるdynamoDBに接続するためのAWSの認証情報を.envで設定していきます。
※認証情報はAWS management consoleにIAMユーザーでログインし、security credentialで確認できます。
.envファイルにてトークンを設定。Regionが東京の場合はap-northeast-1
DYNAMODB_KEY={token}
DYNAMODB_SECRET={token}
DYNAMODB_REGION=ap-northeast-1
DynamoDBに接続するためのModelを作成します。
これはいつも通りのLaravelのartisanコマンドを使ってmodelを作成します。
$ php artisan make:model User
生成時に書かれているeloquentのModelを削除し、ライブラリからincludeするために
use BaoPham\DynamoDb\DynamoDbModel;
を記述します。
DynamoDbModelからextendsするためにclassのModelをDynamoDbModelに書き換えます。
App/Models/User.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use BaoPham\DynamoDb\DynamoDbModel;
class Users extends DynamoDbModel⇦ここ
{
use HasFactory;
protected $table = 'Users';
}
DynamoDbModelから継承することでDynamoDBに接続できるようになります。
そして、今回はモデルを取得するためにコントローラを作成します。
$ php artisan make:controller HomeController
DynamoDBから継承したUserモデルから値を取得してみるといつも通りのEloquentのメソッドでデータを取得できました。
use App\Models\Users;
$result = Users::all();
まとめ
DynamoDBについての知識が全くなかった自分からするとModelで継承することによって
いつも通りのクエリビルダを使ってCRUD操作できることでハードルを感じることなくDynamoDBを操作できることは非常にわかりやすいと感じました。
参考文献
Discussion