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

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

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

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

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

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

ほとんどのクエリでは、ワークスペースを設定する必要があります。唯一の例外は、Workspacesテーブルです。このテーブルはこのプロパティの設定を必要とせず、クエリを実行すると、Workspaceの設定に使用できるワークスペーススラッグのリストが提供されます。このテーブルにクエリを実行するには、スキーマを'Information'に設定し、SELECT * FROM Workspacesクエリを実行する必要があります。

Schemaを'Information'に設定すると、一般的な情報が表示されます。Bitbucketに接続するには、以下のパラメータを設定してください。

  • Schema: ワークスペースのユーザー、リポジトリ、プロジェクトなどの一般的な情報を表示するには、これを'Information'に設定します。それ以外の場合は、クエリを実行するリポジトリまたはプロジェクトのスキーマに設定します。利用可能なスキーマの完全なセットを取得するには、sys_schemasテーブルにクエリを実行してください。
  • Workspace: Workspacesテーブルにクエリを実行する場合を除き、必須です。Workspacesテーブルへのクエリにはこのプロパティは必要ありません。そのクエリはWorkspaceの設定に使用できるワークスペーススラッグのリストのみを返すためです。

Bitbucketでの認証

BitbucketはOAuth認証のみをサポートしています。すべてのOAuthフローからこの認証を有効にするには、カスタムOAuthアプリケーションを作成し、AuthSchemeをOAuthに設定する必要があります。

特定の認証ニーズ(デスクトップアプリケーション、Webアプリケーション、ヘッドレスマシン)に必要な接続プロパティについては、ヘルプドキュメントを必ず確認してください。

カスタムOAuthアプリケーションの作成

Bitbucketアカウントから、以下のステップを実行します。

  1. 設定(歯車アイコン)に移動し、ワークスペース設定を選択します。
  2. アプリと機能セクションで、OAuthコンシューマーを選択します。
  3. コンシューマーを追加をクリックします。
  4. カスタムアプリケーションの名前と説明を入力します。
  5. コールバックURLを設定します。
    • デスクトップアプリケーションとヘッドレスマシンの場合、http://localhost:33333または任意のポート番号を使用します。ここで設定するURIがCallbackURLプロパティになります。
    • Webアプリケーションの場合、信頼できるリダイレクトURLにコールバックURLを設定します。このURLは、ユーザーがアプリケーションにアクセスが許可されたことを確認するトークンを持って戻るWebの場所です。
  6. クライアント認証情報を使用して認証する予定の場合、これはプライベートコンシューマーですを選択する必要があります。ドライバーでは、AuthSchemeをclientに設定する必要があります。
  7. OAuthアプリケーションに与える権限を選択します。これにより、読み取りおよび書き込みできるデータが決まります。
  8. 新しいカスタムアプリケーションを保存するには、保存をクリックします。
  9. アプリケーションが保存された後、それを選択して設定を表示できます。アプリケーションのKeyとSecretが表示されます。これらを将来の使用のために記録してください。Keyを使用してOAuthClientIdを設定し、Secretを使用してOAuthClientSecretを設定します。

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

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

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

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

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

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

依存関係の追加

Maven プロジェクトの pom.xml ファイル内で、AWS とCData JDBC Driver for Bitbucketを依存関係として追加します(<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 Bitbucket
    <dependency>
       <groupId>org.cdata.connectors</groupId>
       <artifactId>cdata-bitbucket-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. OAuth 資格情報を保存するための AWS 資格情報と S3 設定を構成
    3. CData JDBC Driver for Bitbucket を登録
    4. JDBC を使用してBitbucketへの接続を確立
    5. Bitbucket で SQL クエリを実行
    6. 結果をコンソールに出力
    7. 出力メッセージを返す
  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";
        String oauthSettings = "s3://" + bucketName + "/oauth/OAuthSettings.txt";
        String oauthConnection =
          "InitiateOAuth=REFRESH;" +
          "OAuthSettingsLocation=" + oauthSettings + ";";
        try {
          Class.forName("cdata.jdbc.bitbucket.BitbucketDriver");
          cdata.jdbc.bitbucket.BitbucketDriver driver = new cdata.jdbc.bitbucket.BitbucketDriver();
          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:bitbucket:RTK=52465...;Workspace=myworkspaceslug;Schema=Information" + oauthConnection + "");
        } 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 Bitbucket の30日間の無償トライアルをダウンロードして、AWS Lambda でリアルタイムBitbucket のデータを活用してみてください。ご不明な点があれば、サポートチームまでお気軽にお問い合わせください。

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

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

 ダウンロード

詳細:

Bitbucket Icon Bitbucket JDBC Driver お問い合わせ

Bitbucket データと連携するパワフルなJava アプリケーションを短時間・低コストで作成して配布できます。