開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. AWS >
  4. Laravel+dynamodbで動かしてみた
no-image

Laravel+dynamodbで動かしてみた

こんにちは
西澤です。

タイトル通りdynamodbをちょっと動かしてみたかったので
ララベラーの私として、laravelでやってみようかと思いやってみました。
結論から言うと、拡張性ないですw

ライブラリは
lumen-dynamodb
laravel-dynamodb
を使いました。
なぜ2つも使ったかというと、lumen-dynamodbのORMが使えなくて、laravel-dynamodbにはmigraitonがないので
・lumen-dynamodbはmigration
・laravel-dynamodbはORM
として使うことにしました。

laravelはlumen-dynamodbが5.2以上対応なんで5.4を使っています。
まずはインストールから
composer require nordsoftware/lumen-dynamodb
composer require baopham/dynamodb

プロバイダの設定

// config/app.php
'providers' => [
    ...
    BaoPham\DynamoDb\DynamoDbServiceProvider::class,
    Nord\Lumen\DynamoDb\DynamoDBServiceProvider::class
    ...
];

接続の設定

// config/service.php
'dynamodb' => [
        'key'      => env('DYNAMODB_KEY', 'dynamodb_local'), //Access key ID
        'secret'   => env('DYNAMODB_SECRET', 'secret'),      //Secret access key
        'region'   => env('DYNAMODB_REGION', 'ap-northeast-1'),
        'version'  => env('DYNAMODB_VERSION', 'latest'),
        'endpoint' => env('DYNAMODB_LOCAL_ENDPOINT', ''),
        'local' => env('DYNAMODB_LOCAL',false),
    ],

テーブルの設定

任意の場所に書きます。(ex.config/dynamodb.php)
return [
    [
        'TableName'             => 'users',
        'AttributeDefinitions'  => [
            [
                'AttributeName' => 'id',
                'AttributeType' => 'S',
            ],
        ],
        'KeySchema'             => [
            [
                'AttributeName' => 'id',
                'KeyType'       => 'HASH',
            ],
        ],
        'ProvisionedThroughput' => [
            'ReadCapacityUnits'  => 10,
            'WriteCapacityUnits' => 20,
            'OnDemand'           => false,
        ],
    ],
    [
        'TableName'             => 'orders',
        'AttributeDefinitions'  => [
            [
                'AttributeName' => 'id',
                'AttributeType' => 'S',
            ],
        ],
        'KeySchema'             => [
            [
                'AttributeName' => 'id',
                'KeyType'       => 'HASH',
            ],
        ],
        'ProvisionedThroughput' => [
            'ReadCapacityUnits'  => 10,
            'WriteCapacityUnits' => 20,
            'OnDemand'           => false,
        ],
    ],
];
では、migrationを実行すると
php artisan dynamodb:create --config=config/dynamoDb.php 
Creating table users
Table "users" created.
Creating table orders
Table "orders" created.
ってなかんじで、dynamodbに設定通りテーブルを作ってくれます。
後は、ORMで簡単に取ってきたり、保存したり、削除したりできます。
ORMはBaoPham\DynamoDb\DynamoDbModelを継承して使います。

まとめ

dynamodbはnosqlなので、webフレームワークでメインに使うものではない。
使えるとしたら、session管理くらい。
軽量なデータ向けなので、わざわざwebサーバー建てて、通信する意味あんまない。
lambda+dynamodbのユースケースが多いのがよくわかった。

ただ、phperのみなさんには、酷ですが、lambdaはPHPに対応していません!!!
どうしても、PHPでやりたいなら、EC2+dynamodbみたいな構成はなくはないですが、正直なはなし
そこまでしてる時間があるなら、lambdaでnode.jsをサクッと書けるようになったほうが早い気がしますねw

では、また。
TOPに戻る