TypeScript で AWS DynamoDB のテーブル作成からデータ登録までを行う

1. AWS に登録する

まずは AWS に登録しましょう。無料枠が結構ありますので試しに使ってみるというのもいいと思います。

https://aws.amazon.com/jp/

2. IAM でDynamoDB にアクセスできるユーザーを作成する

IAM は Identity and Access Management の略で、AWS のサービスに接続するためのユーザーやアクセス権限を設定するためのものです。

今回は dynamouser というユーザーを作成します。SDKからのアクセスが必要なので、「プログラムによるアクセス」にチェックを入れます。また、コンソールのアクセスは不要なので、こちらはチェックを外しています。

権限は AmazonDynamoDBFullAccess にしました。実際の運用でフルアクセス権限を付与するのはあまりよくないと思いますが、今回は動作確認ですのでフルアクセス権限のユーザーを作成します。

ユーザーの作成が完了したら、アクセスキーIDとシークレットアクセスキーが表示されます。SDKからの接続時に使用するので、メモしておくか、CSVファイルをダウンロードしておきます。

3. node モジュールの aws-sdk をインストールする

サクッとDynamoDB を使いたいので、Javascript の aws-sdk をインストールします。このコマンドでインストールもサクサク終わります。

npm i aws-sdk

AWS Javascript SDK の公式ドキュメントは以下にあります。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/

4. DynamoDB にテーブルを作成する

    // create_dynamo_db.ts
    import * as AWS from "aws-sdk"
    AWS.config.update({
        region: "ap-northeast-1",
        accessKeyId: "アクセスキーID",
        secretAccessKey: "シークレットアクセスキー"
    })
    let dynamodb = new AWS.DynamoDB();
    let params : any = {
        TableName: "SampleTable1",
        KeySchema: [
            { AttributeName: "id", KeyType: "HASH" }
        ],
        AttributeDefinitions: [
            { AttributeName: "id", AttributeType: "N" }
        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 5,
            WriteCapacityUnits: 5
        }
    };
    dynamodb.createTable(params, (err, data) => {
        if(err) {
            console.log(Unable to create table: ${JSON.stringify(err, undefined, 2)})
        }else {
            console.log(Created table: ${JSON.stringify(data, undefined, 2)})
        }
    })
  • AWS.config.update に入力する情報はさきほどIAMでユーザー登録した情報です。このユーザーでDynamoDBにアクセスしていきます。regionは基本的に東京(ap-northeast-1)だと思いますが、違う場所に作成している場合は以下からregisonを調べることができます。

https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html

  • TableName に今回作成するDynamoDB のテーブル名を入力します。
  • KeySchema は、DynamoDBのパーティションキーやソートキーを定義するものです。今回はキー項目はidだけですので、AttributeNameidだけになります。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html

  • AttributeDefinitions は属性定義です。idという項目が数値なのか文字列なのか、などを定義します。N は数値型です。詳しくは以下のページに記載されています。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.DataTypes.html

AWSのDynamoDBのページを開いて、以下のように表示されていたら成功です。

5. DynamoDB にデータを登録する

    import * as AWS from "aws-sdk"
    AWS.config.update({
        region: "ap-northeast-1",
        accessKeyId: "アクセスキーID",
        secretAccessKey: "シークレットアクセスキー"
    })
    var docClient = new AWS.DynamoDB.DocumentClient();
    let params : any = {
        TableName: "SampleTable1",
        Item: {
            "id": 1,
            "info": {
                "data": "This is test data",
                "created": "2019-04-08",
                "JP": "これはテストデータです。"
            }
        }
    };
    docClient.put(params, (err, data) => {
        if(err) {
            console.log(Unable to add item: ${JSON.stringify(err, undefined, 2)})
        }else {
            console.log(PutItem succeeded: ${JSON.stringify(data, undefined, 2)})
        }
    })
  • インサートは、DocumentClient.put を使用します。
  • TableName にさきほど作成したテーブル名をセットします。
  • Info は、キー項目である id に紐づいて格納するデータになります。今回は3項目 data, created, JP を格納しています。

AWSのDynamoDBのページを開いて、以下のように表示されていたら成功です。

info の項目をコピーすると、さきほど登録した情報が取得できます。

{ “created” : { “S” : “2019-04-08” }, “data” : { “S” : “This is test data” }, “JP” : { “S” : “これはテストデータです。” }}

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)

[

楽天で購入

](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)

コメント

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