Laravel-dynamodbで使ってdynamoDBに接続してみる

2617 ワード

前提

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を操作できることは非常にわかりやすいと感じました。

参考文献