AWS Lambda でリアルタイムSharePoint Excel Services のデータにアクセス(IntelliJ IDEA を使用)

Dibyendu Datta
Dibyendu Datta
Lead Technology Evangelist
IntelliJ IDEA と CData JDBC Driver を使用して、AWS Lambda からリアルタイムSharePoint Excel Services のデータに接続。

AWS Lambda は、新しい情報やイベントに素早く応答するアプリケーションを構築できるコンピューティングサービスです。CData JDBC Driver for SharePoint Excel Services と組み合わせることで、AWS Lambda 関数からリアルタイムSharePoint Excel Services のデータを操作できます。この記事では、IntelliJ で Maven を使用して AWS Lambda 関数を構築し、SharePoint Excel Services のデータに接続してクエリを実行する方法を説明します。

最適化されたデータ処理機能を組み込んだ CData JDBC ドライバは、リアルタイムSharePoint Excel Services のデータとのインタラクションにおいて卓越したパフォーマンスを発揮します。SharePoint Excel Services に対して複雑な SQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされている SQL 操作を直接SharePoint Excel Servicesにプッシュし、サポートされていない操作(主に SQL 関数や JOIN 操作)は組み込みの SQL エンジンを使用してクライアント側で処理します。さらに、動的メタデータクエリ機能により、ネイティブのデータ型を使用してSharePoint Excel Services のデータの操作・分析が可能です。

ステップ1:接続プロパティの設定と接続文字列の構築

CData JDBC Driver for SharePoint Excel Services のインストーラーをダウンロードし、パッケージを解凍して JAR ファイルを実行してドライバーをインストールします。次に、必要な接続プロパティを収集します。

ワークブックへの接続

どちらのSharePoint エディションをお使いでも、File を Excel ワークブックに設定してください。このパスは以下のプロパティからの相対パスになります。

  • Library:デフォルトではShared Documents ライブラリが使用されます。このプロパティを使って、組織内の別のドキュメントライブラリを指定してみてください。例えば、OneDrive for Business に接続する場合は、このプロパティを"Documents" に設定します。
  • Folder:このプロパティを使って、ライブラリ内のサブフォルダへのパスを指定できます。パスはLibrary で指定されたライブラリ名に関連します。

テーブルとしてのスプレッドシートデータへの接続

CData 製品では、基底API で利用可能なオブジェクトに基づいて、使用可能なテーブルを検出していきます。

API では異なるAPI オブジェクトを表示します。スプレッドシートの構成とSharePoint のバージョンに基づいてAPI を選択しましょう。

  • OData: OData API を使用すると、Excel で[挿入]->[テーブル]をクリックして作成されたExcel テーブルオブジェクト(範囲やスプレッドシートではありません)から定義されたテーブルにアクセスできます。OData API に接続する際、ワークブックにテーブルオブジェクトが定義されていない場合は、CData 製品がテーブルを返さないことがあります。テーブルとしてスプレッドシートまたは範囲に接続するには、UseRESTAPI をtrue に設定してください。
  • REST: REST API を使用すると、Excel テーブルオブジェクト、範囲、およびスプレッドシートから定義されたテーブルへアクセスできます。これがデフォルトの API です。範囲およびスプレッドシートから多数の行をリクエストすることは REST API によって制限されており、CData 製品では返される行数をデフォルトで 100 に制限しています。また CData 製品では、デフォルトで1行目からカラム名を検出します。これを無効にするには、Header を設定してください。

DefineTables を追加設定すると、Excel の範囲の構文を使用して、範囲に基づいてテーブルを定義できます。大きすぎる範囲は、API によって制限されます。

SharePoint オンプレミスへの接続

URL をサーバー名もしくはIP アドレスに設定しましょう。さらに、SharePointVersion と認証値を設定します。

SharePoint OnPremises を認証するには、AuthScheme を認証タイプに設定し、必要に応じてUserPassword を設定してください。

Note:SharePoint On-Premises 2010 に接続する場合は、 UseRESTAPI をtrue に設定する必要があります。

    Windows(NTLM)

    最も一般的な認証タイプです。CData 製品では NTLM をデフォルトとして使用するよう事前設定されています。Windows のUserPassword を設定して接続してください。

    その他の認証方法については、ヘルプドキュメントの「はじめに」をご覧ください。

    NOTE: AWS Lambda 関数で JDBC ドライバーを使用するには、ライセンス(製品版または試用版)とランタイムキー(RTK)が必要です。ライセンス(または試用版)の取得については、弊社営業チームまでお問い合わせください

    組み込みの接続文字列デザイナー

    JDBC URL の構築には、SharePoint Excel Services JDBC Driver に組み込まれている接続文字列デザイナーを使用できます。JAR ファイルをダブルクリックするか、コマンドラインから JAR ファイルを実行してください。

    java -jar cdata.jdbc.excelservices.jar
    

    接続プロパティ(RTK を含む)を入力し、接続文字列をクリップボードにコピーします。

    ステップ2:IntelliJ でプロジェクトを作成

    1. IntelliJ IDEA で「New Project」をクリックします。
    2. Generators から「Maven Archetype」を選択します。
    3. プロジェクトに名前を付け、Archetype として「maven.archetypes:maven-archetype-quickstart」を選択します。
    4. 「Create」をクリックします。

    CData JDBC Driver for SharePoint Excel Services JAR ファイルのインストール

    プロジェクトのルートフォルダから以下の Maven コマンドを実行して、JAR ファイルをプロジェクトにインストールします。

    mvn install:install-file -Dfile="PATH/TO/CData JDBC Driver for SharePoint Excel Services 20XX/lib/cdata.jdbc.excelservices.jar" -DgroupId="org.cdata.connectors" -DartifactId="cdata-excelservices-connector" -Dversion="23" -Dpackaging=jar

    依存関係の追加

    Maven プロジェクトの pom.xml ファイル内で、AWS とCData JDBC Driver for SharePoint Excel Servicesを依存関係として追加します(<dependencies> 要素内に以下の XML を追加)。

    • AWS
      <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-lambda-java-core</artifactId>
         <version>1.2.2</version> <!--Replace with the actual version-->
      </dependency>
    • CData JDBC Driver for SharePoint Excel Services
      <dependency>
         <groupId>org.cdata.connectors</groupId>
         <artifactId>cdata-excelservices-connector</artifactId>
         <version>25</version> <!--Replace with the actual version-->
      </dependency>
    • Fat JAR 作成用の Maven Shade Plugin
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <createDependencyReducedPom>false</createDependencyReducedPom>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>com.example.CDataLambda</mainClass>
                        <!-- Change to your actual Lambda handler class -->
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

    AWS Lambda 関数の作成

    このサンプルプロジェクトでは、CDataLambda.java と CDataLambdaTest.java の2つのソースファイルを作成します。

    Lambda 関数の定義

    1. CDataLambda クラスを AWS Lambda SDK の RequestHandler インターフェースを実装するように更新します。handleRequest メソッドを追加する必要があります。このメソッドは、Lambda 関数がトリガーされたときに以下のタスクを実行します:
      1. 入力を使用して SQL クエリを構築
      2. CData JDBC Driver for SharePoint Excel Services を登録
      3. JDBC を使用してSharePoint Excel Servicesへの接続を確立
      4. SharePoint Excel Services で SQL クエリを実行
      5. 結果をコンソールに出力
      6. 出力メッセージを返す
    2. 以下の完全な Lambda クラスを使用してください。インポート、クラス定義、handleRequest メソッドが含まれています。DriverManager.getConnection 呼び出し内の接続文字列値は、実際の値に置き換えてください。

      package com.example;
      
      import com.amazonaws.services.lambda.runtime.Context;
      import com.amazonaws.services.lambda.runtime.RequestHandler;
      
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.ResultSet;
      import java.sql.ResultSetMetaData;
      import java.sql.SQLException;
      import java.sql.Statement;
      public class CDataLambda implements RequestHandler < Object, String > {
      
        @Override
        public String handleRequest(Object input, Context context) {
          String query = "SELECT * FROM " + input;
      
          String bucketName = "MY_AWS_BUCKET";
          try {
            Class.forName("cdata.jdbc.excelservices.ExcelServicesDriver");
            cdata.jdbc.excelservices.ExcelServicesDriver driver = new cdata.jdbc.excelservices.ExcelServicesDriver();
            DriverManager.registerDriver(driver);
          } catch (SQLException ex) {
            // Registering the driver failed
            throw new RuntimeException("Failed to register JDBC driver", ex);
          } catch (ClassNotFoundException e) {
            // The driver class was not found in the classpath
            throw new RuntimeException("JDBC Driver class not found", e);
      
          }
          Connection connection = null;
          try {
            connection = DriverManager.getConnection("jdbc:cdata:excelservices:RTK=52465...;URL=https://myorg.sharepoint.com;[email protected];Password=password;File=Book1.xlsx;");
          } catch (SQLException ex) {
            context.getLogger().log("Error getting connection: " + ex.getMessage());
          } catch (Exception ex) {
            context.getLogger().log("Error: " + ex.getMessage());
          }
      
          if (connection != null) {
            context.getLogger().log("Connected Successfully!
      ");
          }
      
          ResultSet resultSet = null;
          try {
            //executing query
            Statement stmt = connection.createStatement();
            resultSet = stmt.executeQuery(query);
      
            ResultSetMetaData metaData = resultSet.getMetaData();
            int numCols = metaData.getColumnCount();
      
            //printing the results
            while (resultSet.next()) {
              for (int i = 1; i <= numCols; i++) {
                System.out.printf("%-25s", (resultSet.getObject(i) != null) ? resultSet.getObject(i).toString().replaceAll("
      ", "") : null);
              }
              System.out.print("
      ");
            }
          } catch (SQLException ex) {
            System.out.println("SQL Exception: " + ex.getMessage());
          } catch (Exception ex) {
            System.out.println("General exception: " + ex.getMessage());
          }
          return "v24 query: " + query + " complete";
        }
      }
      
      

    ステップ3:Lambda 関数のデプロイと実行

    IntelliJ で関数をビルドしたら、Maven プロジェクト全体を単一の JAR ファイルとしてデプロイする準備が整います。

    1. IntelliJ で mvn install コマンドを使用して SNAPSHOT JAR ファイルをビルドします。

      Note: Maven Shade Plugin は target フォルダに2つの JAR を生成します。AWS Lambda には常に、すべての必要な依存関係を含むサイズの大きい -shaded.jar ファイルをアップロードしてください。

    2. AWS Lambda で新しい関数を作成します(または既存の関数を開きます)。
    3. 関数に名前を付け、IAM ロールを選択し、タイムアウト値を関数が完了するのに十分な値に設定します(クエリの結果サイズによって異なります)。
    4. 「Upload from」->「.zip file」をクリックし、SNAPSHOT JAR ファイルを選択します。
    5. 「Runtime settings」セクションで「Edit」をクリックし、Handler を handleRequest メソッドに設定します(例:package.class::handleRequest)。
    6. これで関数をテストできます。「Event JSON」フィールドにテーブル名を設定し、「Test」をクリックします。

    無償トライアル・詳細情報

    CData JDBC Driver for SharePoint Excel Services の30日間の無償トライアルをダウンロードして、AWS Lambda でリアルタイムSharePoint Excel Services のデータを活用してみてください。ご不明な点があれば、サポートチームまでお気軽にお問い合わせください。

はじめる準備はできましたか?

SharePoint Excel Services Driver の無料トライアルをダウンロードしてお試しください:

 ダウンロード

詳細:

SharePoint Excel Services Icon SharePoint Excel Services JDBC Driver お問い合わせ

SharePoint サーバーでホストされているリアルタイムなExcel スプレッドシートコンテンツを組み込んだパワフルなJava アプリケーションを短時間・低コストで作成して配布できます。