OutSystemsとNoSQLデータベース「DynamoDB」を連携してみた

Pocket

はじめに

近年、多種多様なデータから構成される膨大なデータの集合体であるビッグデータを分析することで、事業に役立つ価値が生み出されると考えられるようになりました。

ローコード開発基盤「OutSystems」で構築したアプリケーションにより蓄積されたデータも、ビッグデータのデータ群の一つとなる可能性もあります。例えば、ECサイトを顧客が操作した検索履歴や、購入情報を蓄積・分析することにより、エンドユーザの傾向を知ることができます。

今回の記事では、ビッグデータを蓄積することに適したNoSQLデータベースの一つであるDynamoDBとOutSystemsの連携方法についてご紹介いたします。

DynamoDBとは

DynamoDB(正式名称:Amazon DynamoDB)は、AWSで利用可能なサービスの一つで、フルマネージド型のNoSQLデータベースクラウドサービスです。データの格納と取得に特化しており、自動的にスケールアップ・スケールダウンされ、常に処理が高速で、ストレージに上限がないため実質無限に使うことができます。

DynamoDBについての詳細は以下URLにてご確認ください。

Amazon DynamoDBサイト

OutSystemsとDynamoDBを連携してみた

OutSystemsでは、Forgeと呼ばれるアプリケーションの構築期間を短縮することを目的に、再利用可能なオープンソースのモジュール、コネクター、UIコンポーネントのリポジトリが技術者向けに提供されています。今回の連携では、Forgeで提供されている「Amazon DynamoDB Connector」を使用しDynamoDBを外部のデータベースとして利用できるようにします。

公開されている記事の中にOutSystemsのForgeについての紹介があります。詳しくは以下の記事からご覧ください。
 超高速開発基盤「OutSystems」のForgeの使い方

では、Forge「Amazon DynamoDB Connector」を使用してOutSystemsとDynamoDBを連携する手順についてご紹介いたします。今回の手順は、連携手順にフォーカスし、DynamoDBの構築手順については省略しています。

作成の手順は、Forge「Amazon DynamoDB Connector」を使用し、DynamoDBのデータ操作を行うロジックを持つライブラリーモジュール「DynamoDB_Lib」を作成します。次に、作成したライブラリーモジュールをアプリケーションモジュールで利用し、OutSystemsのアプリケーションとDynamoDBの連携を実現します。

DynamoDB連携イメージ図  

  1. Amazon DynamoDB Connector を利用するための事前準備

    1. 「Amazon DynamoDB Connector」のインストール

      OutSystemsのServiceStudioのForgeから「Amazon DynamoDB Connector」を検索し、インストールをします。

      DynamoDBConnectorインストール

    2. DynamoDBの操作権限を持つIAMユーザの用意

      OutSystems側でDynamoDBを操作するためにはDynamoDBのアクセス権限を持ったIAMユーザが必要となります。そのため、条件を満たす既存のIAMユーザを用意するか、DynamoDB Connector用に新しくIAMユーザを作成する必要があります。 

      ■今回使用するIAMユーザの条件
       ・対象のIAMユーザーに対して、アクセスキーが作成されている必要があります。アクセスキーが存在しない場合は、作成する必要があります。
        IAMユーザー_アクセスキー

       
        ・対象のIAMユーザーに対して、「AmazonDynamoDBFullAccess」のアクセス権限がアタッチされている必要があります。アクセス権限がアタッチされていない場合は、アクセス権限を追加する必要があります。
        IAMユーザー_DynamoDBの権限のアタッチ

      ■IAMユーザの新規作成手順
       ・AWSマネジメントコンソールにログインし、IAM → ユーザー → ユーザーを追加 の順に選択します。


       ・任意のユーザー名を記載し、「アクセスキー・プログラムによるアクセス」をチェックし、次のステップへ進みます。


       ・「既存のポリシーを直接アタッチ」を選択肢、「AmazonDynamoDBFullAccess」を検索・チェックし、次のステップに進みます。

       ・任意でタグを追加し、次のステップに進みます。下図は例としてNameタグをつけております。

       ・最後に設定内容を確認し、「ユーザーの作成」を選択します。

       ・以上の作業でIAMユーザが新規作成されました。

    3. 「Amazon DynamoDB Connector」の設定

      ServiceCenterにアクセスし、モジュール「AmazonDynamoDB」を検索し、選択します。

      DynamoDBConnector設定_1

      選択後に画面が遷移するので、画面下部にあるSitePropatiesタブを選択します。

      選択後に表示される項目を設定します。

      ・Amazon_AccessKeyId
       →前述の手順で用意したIAMユーザのアクセスキーIDを設定します。
        アクセスキーIDの設定画面

      ・AmazonDynamoDB
       →連携対象となるDynamoDBが存在するリージョンを指定します。
        指定する値はRegionEndpointのField値になります。
        リージョンの設定画面

      ・Amazon_SecretAccessKey
       →前述の手順で用意したIAMユーザのシークレットアクセスキーを設定します。
        シークレットキーIDの設定

    4. アプリ用のテーブルをDynamoDB内に作成(AWS作業)

      連携対象のDynamoDBに、OutSystemsで使用するテーブルを作成している必要があります。
      この手順紹介では、以下のような「User」・「Hobby」・「Prefectures」を列として持つ簡単なテーブルを作成しています。

      DynamoDBConnectorテーブルイメージ
      ※画像ではレコードが追加されておりますが、レコードの追加は不要です。

       

  2. DynamoDB と連携するライブラリーモジュールの作成

    1. 作成したテーブルと連携するライブラリーモジュールの作成

      DynamoDB のテーブルと連携するために、新しくライブラリーモジュールを作成します。
      モジュール名は任意で問題ありませんが、OutSystemsではライブラリーとして使用するモジュールの末尾に「_Lib」を付けることが推奨されております。モジュール名に「_Lib」を付けることで、ライブラリーを取り扱うモジュールであることが明確になるため、開発者間の可読性が向上します。

      今回の手順紹介では、以下のようにモジュールを作成しています。

      https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/wp-content/uploads/2022/09/b1c55d9e672bffc78a790fdc217fbe6d.png

       

    2. Manage Dependenciesで依存関係を結ぶ

      作成したモジュールを開き、Manage Dependencies にて、Amazon DynamoDB Connector のモジュールである”AmazonDynamoDB”と依存関係を結びます。

      ManageDependenciess操作画面

      Forge「Amazon DynamoDB Connector」で利用できるDynamoDBとの操作アクションが以下の7種類あるので、その中から必要なアクションを選びます。

            DynamoDBConnectorアクション一覧
      DynamoDBConnector_アクション表

      また、DynamoDBのデータ型を扱えるように、Structuresの配下をすべて選択します。

          DynamoDBConnectorStructures一覧

      例えば、データを登録するロジックを作成する必要があれば下図のように「Item_Put」をチェックし、データを取得するロジックを作成する必要があれば、下図のように「Scan」をチェックします。

      DynamoDBConnector依存関係追加

       

    3. DynamoDB のテーブルに対応するStructureを作成

      連携対象のDynamoDBのテーブルに対応するStructureを作成します。名前は任意で問題ありません。

          DynamoDBライブラリーモジュール_ストラクチャー追加

       テーブルのカラムに対応するアトリビュートを追加し、AmazonDynamoDB のフォルダ「DataType_Helpers」の中のStructureを設定します。
      用意されているStructureは以下の4種類あるので、対応するStructureを設定します。

          DynamoDBConnectorストラクチャー一覧
      DynamoDBConnector_Structure表

  3. ライブラリーモジュールのアクション作成

    ライブラリーモジュールに対してDynamoDBとデータのやり取りを行うためのアクションを作成していきます。今回は例として、対象テーブルに対してレコードを登録するアクションの作成をご紹介いたします。

    Logicタブのフォルダ「ServerAction」内にアクションを作成します。
    他のモジュールで参照できるようにするためにPublic を”Yes”にし、DynamoDBに登録したいデータをこのロジックで受け取るために対応する入力パラメータを追加します。

    DynamoDBライブラリーモジュール_アクション追加_AddUser

    DynamoDBに対して受け取ったデータを登録するために、登録先であるDynamoDBのテーブルに沿った型を持つローカル変数を作成します。前述の手順でテーブルに沿ったStructure型を作成しているので、ローカル変数を新規作成し、データ型に対して対象のStructure型を設定します。

    DynamoDBライブラリーモジュール_変数追加_AddUser

    アクションフローに対して、入力パラメータで受け取った値をローカル変数に代入する処理、ローカル変数をDynamoDBに登録するためにJSONデータ形式に変換(シリアル化)する処理を設定します。
    ※Forge「Amazon DynamoDB Connector」のアクションはAmazon Dynamo DB .NET SDKを利用して作成されているため、JSON 形式でデータを渡す必要があります。

    DynamoDBライブラリーモジュール_ロジック追加_AddUser

    最後に、DynamoDB の対象のテーブルにレコードを追加するため、アクション「Item_Put」をフローに追加し、項目「TableName」に対しては、DynamoDB の対象テーブル名を設定し、項目「Item」に対しては、上記手順でシリアル化したデータを設定します。

    DynamoDBライブラリーモジュール_ロジック追加_AddUser_2

    アクションが作成できたので、1-ClickPublishを行います。以上でライブラリーモジュールの作成が完了しました。

  4. ライブラリーモジュールのアクションの使用手順

    作成したライブラリーモジュールを別のモジュールで使用できるように設定します。ライブラリーモジュールを使用したい別のモジュールを開き、Manage Dependencies にて、ライブラリーモジュールと依存関係を結びます。

    DynamoDBライブラリーモジュール_使用

    Amazon DynamoDB Connector のモジュールである”AmazonDynamoDB”のStructuresの中から、ライブラリーモジュール使用する際に必要なデータ型と依存関係を結びます。

    DynamoDBライブラリーモジュール_使用_2

     ライブラリーモジュールのアクションが使用できるようになったので、任意の実装を行います。

      DynamoDBライブラリーモジュール_使用_3

    以上でOutSystemsとDynamoDBが連携することができました。

おわりに

いかがでしたでしょうか。この記事でOutSystemsとDynamoDBが連携方法についてお判りいただけたかと思います。今回は、OutSystemsでDynamoDBを外部DBとして連携する方法についてご紹介しましたが、OutSystemsは他にも様々なNoSQLと連携することができます。OutSystemsの環境やビッグデータを蓄積する目的などにより、最適なNoSQL選択し、ビッグデータを活用していきましょう。

お問い合わせ先

執筆者プロフィール

Maruo Shuhei
Maruo Shuheitdi OutSystems推進室
以前から最新の技術に興味があり、独学でOutSystemsを勉強しておりました。
2021年からOutSystemsを専門に扱う部署に配属となり、日々奮闘中!
Pocket

関連記事