Open9
DynamoDB 知見まとめ
AWS CLI : DynamoDBコマンド
-
aws dynamodb list-tables --endpoint-url http://<ホスト名>:8000
- テーブル一覧表示
返信もできた
いろんなCRUD方法があるのをまとめてくれてる
これ見ながらいろいろやってるよ
テーブル名:pet
属性 animal-type(key), name(key), sex, weight
のとき
列追加するコマンド
aws dynamodb put-item --table-name pet --item "{\"animal-type\":{\"S\":\"犬\"},\"name\":{\"S\":\"どっぐ\"},\"sex\":{\"S\":\"male\"},\"weight\":{\"N\":\"10\"}}
取得するコマンド
C:\>aws dynamodb get-item --consistent-read --table-name pet --key "{\"animal-type\":{\"S\":\"犬\"},\"name\":{\"S\":\"どっぐ\"}}"
更新するコマンド
C:\>aws dynamodb update-item --table-name pet --key "{\"animal-type\":{\"S\":\"犬\"},\"name\":{\"S\":\"どっぐ\"}}" --update-expression "set weight = :newval" --expression-attribute-values "{\":newval\":{\"N\":\"100\"}}" --return-values ALL_NEW
※注意点
windows環境の実行では特殊なエスケープが必要
'→"
"→\"
DynamoDB SDK for JavaScript
実行環境
- Node.js
- Browser
- AWS Lamda
- AWS Cloud9 IDE
- AWS Amplify
セットアップ
- Node.jsのインストール
- SDKのインストール
- インポート
1. Node.js のインストール
お好きな環境でどうぞ
2. SDK のインストール
各AWSサービスのSDKは@aws-sdk
にまとめられている。
任意のサービスをパッケージマネージャーでインストールするには以下のように行う。
SERVICE_NAME
に任意のサービス名を指定する。
npm install @aws-sdk/client-{SERVICE_NAME}
yarn add @aws-sdk/client-{SERVICE_NAME}
pnpm add @aws-sdk/client-{SERVICE_NAME}
DynamoDB SDK for PHP in Docker + Laravel
SDKインストール
$ composer require aws/aws-sdk-php
サービスクラスの作成
app/Services/DynamoDBService.php
namespace App\Services;
class DynamoDBService
{
protected $dynamoDb;
public function __construct()
{
$this->dynamoDb = new \Aws\DynamoDb\DynamoDbClient([
'region' => env('AWS_DEFAULT_REGION', 'ap-northeast-1'),
'version' => 'latest',
'endpoint' => 'http://dynamodb:8000', // compose.yml のサービス名
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY')
],
]);
}
public function listTables()
{
return $this->dynamoDb->listTables()->get('TableNames');
}
}
サービスコンテナに登録
app/Providers/AppServiceProvider.php
namespace App\Providers;
use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider;
use App\Services\DynamoDBService;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(DynamoDBService::class, function (Application $app) {
return new DynamoDBService();
});
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
//
}
}
DynamoDB キーワード
Table Name
その名の通り、テーブル名のこと
Attribute
RDBのカラムに相当
Item
RDBのレコードに相当
Primary Key
その名の通り、プライマリキーのこと
二種類ある
-
- 普通のプライマリキー
-
- ソートに利用するキー
Secondary Index
-
- Sorted Key 以外で検索条件を追加する
- テーブル定義時に作成する
-
- Partition Key を別途定義できる
- 既存テーブルに追加・削除可能
- コストがかかる
参考文献
気づいたことメモ
-
GetItem
でデータを取得しようとすると、テーブルに Partition Key と Sorted Key が定義されている場合、両方指定しないとエラーになる-
query
を使えば片方のキーのみで取得できる
-