クライアントサイドJavaScriptでAWS DynamoDBのアイテムを更新する方法

昨日の記事 https://usefuledge.com/clientside-js-call-aws-service.html に引き続いて、クライアントサイドJavaScriptからAWSを使う方法シリーズです。

クライアントサイド JavaScript から AWS サービス Amazon Polly を使って音声データを生成する
AWSにはいろいろなサービスがあります。いままでサーバーサイドが必要であった機能の実装もAWSだけで構築できるようになりました。サーバーサイドがあったほうがセキュリティは向上しますが、クライアントサイドだけで構築できるとかなり効率化につなが...

今回は、DynamoDBのアイテムを追加・更新する処理を実装してみたいと思います。

0 前提

以下の記事の「1 Amazon Cognito から IDプールを作成する」と「2 AWS認証情報を取得する」まで完了していることを前提とします。

クライアントサイド JavaScript から AWS サービス Amazon Polly を使って音声データを生成する
AWSにはいろいろなサービスがあります。いままでサーバーサイドが必要であった機能の実装もAWSだけで構築できるようになりました。サーバーサイドがあったほうがセキュリティは向上しますが、クライアントサイドだけで構築できるとかなり効率化につなが...

1 UnauthロールにDynamoDBアクセスポリシーを設定する

今回もUnAuthロールを使用して実装します。以下のポリシーをアタッチします。

  • AmazonDynamoDBFullAccess

※DynamoDBへの書き込み権限があれば、FullAccessでなくても問題ありません。

2 DynamoDBテーブルの作成

DynamoDBのテーブルを作成します。

  • テーブル名:TestDDBTable
  • パーティションキー:Pkey(文字列)
  • ソートキー:Skey(数値)

読み込み/書き込みキャパシティモードについて、無料利用枠がない方は「オンデマンド」を選択することを推奨します。プロビジョンドにすると、使ってなくても費用が発生します。

テーブル作成が完了すると、以下のように表示されます。

3 コーディング

以下のように書いてみました。

// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'XXXXXXXXXX'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'XXXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',
});

function UpdateTestDDBTable() {
    var ddb = new AWS.DynamoDB({ apiVersion: '2012-08-10' });

    var params = {
        TableName: 'TestDDBTable',
        Item: {
            'Pkey': { S: 'PKeyValue1' },
            'Skey': { N: '1' },
            'Value': { S: 'DBValue' }
        }
    };

    // Call DynamoDB to add the item to the table
    ddb.putItem(params, function (err, data) {
        if (err) {
            console.log("Error", err);
            return 4;
        } else {
            console.log("Success", data);
            return 0;
        }
    });
}

AWS認証情報は以下のとおりコピペでOKです。

// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'XXXXXXXXXX'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'XXXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',
});

以下のように、DynamoDBオブジェクトとパラメタオブジェクトを作成します。

パラメタオブジェクトは見てわかるとおり、テーブル名と項目名・値を記載します。

    var ddb = new AWS.DynamoDB({ apiVersion: '2012-08-10' });

    var params = {
        TableName: 'TestDDBTable',
        Item: {
            'Pkey': { S: 'PKeyValue1' },
            'Skey': { N: '1' },
            'Value': { S: 'DBValue' }
        }
    };

「S」は文字列型、「N」は数値型です。DynamoDBのデータ型は以下の公式ドキュメントに記載されています。

ERROR: The request could not be satisfied

このコードでは、以下の値をセットします。

  • Pkey = "PKeyValue1"
  • Skey = 1
  • Value = "DBValue"

実行後、以下のようにデータが登録されれば成功です。

今度は以下のようにコードを変更して、既存のアイテムを更新したいと思います。

PkeyとSkeyは同じ値で、Valueが「DBValueUpdated」に更新されます。

function UpdateTestDDBTable() {
    var ddb = new AWS.DynamoDB({ apiVersion: '2012-08-10' });

    var params = {
        TableName: 'TestDDBTable',
        Item: {
            'Pkey': { S: 'PKeyValue1' },
            'Skey': { N: '1' },
            'Value': { S: 'DBValueUpdated' }
        }
    };

    // Call DynamoDB to add the item to the table
    ddb.putItem(params, function (err, data) {
        if (err) {
            console.log("Error", err);
            return 4;
        } else {
            console.log("Success", data);
            return 0;
        }
    });
}

実行後、以下のようにアイテムが更新されれば成功です。

4 おわりに

ブラウザだけで簡単にDynamoDBを操作できるようになりました。サーバーサイドが不要ですが、セキュリティが問題になりそうなので、使うときは慎重に使いましょう。

コメント

タイトルとURLをコピーしました