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

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

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

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

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

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

Server およびPort プロパティがMySQL への接続には必須です。IntegratedSecurity をFALSE に設定した場合、User、Password も必須になります。 オプションで、Database を設定することもできます。Database は設定がない場合すべてのデータベースを使えるようになります。

パスワード方式によるSSH 接続

パスワード方式によるSSH接続時に必要なプロパティ一覧を以下に示します。

  • User: MySQL のユーザ
  • Password: MySQL のパスワード
  • Database: MySQL の接続先データベース
  • Server: MySQL のサーバー
  • Port: MySQL のポート
  • UserSSH: "true"
  • SSHAuthMode: "Password"
  • SSHPort: SSH のポート
  • SSHServer: SSH サーバー
  • SSHUser: SSH ユーザー
  • SSHPassword: SSH パスワード

接続文字列形式では以下のようになります。

User=admin;Password=adminpassword;Database=test;Server=mysql-server;Port=3306;UseSSH=true;SSHAuthMode=Password;SSHPort=22;SSHServer=ssh-server;SSHUser=root;SSHPassword=sshpasswd;

公開鍵認証方式方式によるSSH 接続

公開鍵認証によるSSH接続時に必要なプロパティ一覧を以下に示します。

  • User: MySQL のユーザ
  • Password: MySQL のパスワード
  • Database: MySQL の接続先データベース
  • Server: MySQL のサーバー
  • Port: MySQL のポート
  • UserSSH: "true"
  • SSHAuthMode: "Public_Key"
  • SSHClientCertType: キーストアの種類
  • SSHPort: SSH のポート
  • SSHServer: SSH サーバー
  • SSHUser: SSH ユーザー
  • SSHClientCert: 秘密鍵ファイルのパス

接続文字列形式では以下のようになります。

User=admin;Password=adminpassword;Database=test;Server=mysql-server;Port=3306;UseSSH=true;SSHAuthMode=Public_Key;SSHClientCertType=PUBLIC_KEY_FILE;SSHPort=22;SSHServer=ssh-server;SSHUser=root;SSHClientCert=C:\Keys\key.pem;

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

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

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

java -jar cdata.jdbc.mysql.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 MySQL JAR ファイルのインストール

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

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

依存関係の追加

Maven プロジェクトの pom.xml ファイル内で、AWS とCData JDBC Driver for MySQLを依存関係として追加します(<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 MySQL
    <dependency>
       <groupId>org.cdata.connectors</groupId>
       <artifactId>cdata-mysql-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 MySQL を登録
    3. JDBC を使用してMySQLへの接続を確立
    4. MySQL で 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.mysql.MySQLDriver");
          cdata.jdbc.mysql.MySQLDriver driver = new cdata.jdbc.mysql.MySQLDriver();
          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:mysql:RTK=52465...;User=myUser;Password=myPassword;Database=NorthWind;Server=myServer;Port=3306;");
        } 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 MySQL の30日間の無償トライアルをダウンロードして、AWS Lambda でリアルタイムMySQL のデータを活用してみてください。ご不明な点があれば、サポートチームまでお気軽にお問い合わせください。

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

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

 ダウンロード

詳細:

MySQL Icon MySQL JDBC Driver お問い合わせ

MySQL 互換データベースエンジンを組み込んだパワフルなJava アプリケーションを短時間・低コストで作成して配布できます。