RetoolでDynamoDBのデータ表示をドラッグ&ドロップで作成する

Retoolを使えば、管理画面などを簡単に作れます。
2021.08.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いろんなPoCをやっていると、同じような管理画面を作ることがあります。 そんなとき、Retoolを使えば、管理画面を楽に作れるのでは?となったので、まずはデータ取得と表示を試してみました。

おすすめの方

  • Retoolの雰囲気を知りたい方
  • Retoolに興味がある方
  • RetoolでDynamoDBテーブルの内容を表示するサンプルを見たい方

Retool用のIAMユーザとDynamoDBテーブルを作成する

CloudFormationテンプレート

DynamoDB Integrationを参考に作成します。

aws.yaml

AWSTemplateFormatVersion: 2010-09-09
Description: IAM and DynamoDB for Retool

Resources:
  # Retool用のIAMユーザ
  RetoolUser:
    Type: AWS::IAM::User
    Properties:
      UserName: retool-user

  # Retool用のIAMユーザに付与するIAMポリシー(AssumeRoleできる)
  RetoolUserPoricy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: retool-user-policy
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Action:
              - "dynamodb:ListTables"
              - "dynamodb:DeleteItem"
              - "dynamodb:ListTagsOfResource"
              - "dynamodb:DescribeReservedCapacityOfferings"
              - "dynamodb:DescribeTable"
              - "dynamodb:GetItem"
              - "dynamodb:DescribeContinuousBackups"
              - "dynamodb:DescribeLimits"
              - "dynamodb:BatchGetItem"
              - "dynamodb:BatchWriteItem"
              - "dynamodb:PutItem"
              - "dynamodb:ListBackups"
              - "dynamodb:Scan"
              - "dynamodb:Query"
              - "dynamodb:DescribeStream"
              - "dynamodb:UpdateItem"
              - "dynamodb:DescribeTimeToLive"
              - "dynamodb:ListStreams"
              - "dynamodb:DescribeGlobalTableSettings"
              - "dynamodb:ListGlobalTables"
              - "dynamodb:GetShardIterator"
              - "dynamodb:DescribeGlobalTable"
              - "dynamodb:DescribeReservedCapacity"
              - "dynamodb:DescribeBackup"
              - "dynamodb:GetRecords"
            Resource: "*"
      Users:
        - !Ref RetoolUser

  # DynamoDBテーブル
  DeviceTable:
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: retool-device-table
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: deviceId
          AttributeType: S
      KeySchema:
        - AttributeName: deviceId
          KeyType: HASH

Retool側で「DynamoDBテーブルの一覧が取得できないエラー」が発生するため、Resource: "*"を指定しています。

デプロイ

aws cloudformation deploy \
    --template-file aws.yaml \
    --stack-name IAM-and-Retool-Stack \
    --capabilities CAPABILITY_NAMED_IAM

テスト用のデータを準備する

適当にテスト用のデータをDynamoDBテーブルに格納しました。

DynamoDBテーブルの様子

アクセスキー取得

Retoolに渡すアクセスキーを取得します。

aws iam create-access-key \
    --user-name retool-user

Retoolを使う

ResourcesにDynamoDBテーブルを追加する

DynamoDBテーブルを選択します。

リソースとしてDynamoDBテーブルを選択する

アクセスキーなどを入力します。

DynamoDBと接続する(アクセスキー入力)

作成完了しました。

リソースの作成が完了した

Appを作成する

いろいろなテンプレートがありますが、DynamoDBを扱うテンプレートは無いので、イチから作成していきます。

Black Appを作成する

Black Appを作成します。

アプリを新規作成する

アプリ名を決める

初期のアプリができました。サンプル用のテーブルが表示されています。

アプリの初期状態の様子

query1をDynamoDBに変更する

デフォルトで用意されているquery1は、PostgreSQLなので、DynamoDBテーブルに変更します。

query1のリソースをDynamoDBに変更する

さきほど作成したDynamoDBテーブルを選択し、Methodをscanにします。

DynamoDBのクエリ情報を入力する

Save & Runするとデータ取得が確認できました。

Save and Run

tableの設定を変更し、DynamoDBテーブルの内容を表示させる

さきほど、query1をDynamoDBテーブルに変更したので、データが表示されなくなりました。 そのため、table1のデータソースを「{{ query1.data.Items }}」に変更します。

table1のデータソースをDynamoDBに変更する

変更後、テーブルにデータが表示されました。

テーブルにDynamoDBの内容が表示された

ドラッグ&ドロップでカラムの順番も変更できます。

テーブルのカラムの順番を変更した

ほかにも、テーブルにフィルタ追加したり、ページネーション設定などができます。

動作を確認してみる

右上のPreviewボタンを押すと、動作確認ができます。

Share and Preview

プレビュー画面

他ユーザに共有できる

右上のShareボタンを押すと、第三者に共有できます。

Share and Preview

Share画面

さいごに

簡単にDynamoDBなどの外部サービスと連携し、UIを作れるRetoolをまずは試してみました。他にも色々と実験してみます。

参考