AWS Lambda でリアルタイムWooCommerce のデータにアクセス(IntelliJ IDEA を使用)
AWS Lambda は、新しい情報やイベントに素早く応答するアプリケーションを構築できるコンピューティングサービスです。CData JDBC Driver for WooCommerce と組み合わせることで、AWS Lambda 関数からリアルタイムWooCommerce のデータを操作できます。この記事では、IntelliJ で Maven を使用して AWS Lambda 関数を構築し、WooCommerce のデータに接続してクエリを実行する方法を説明します。
最適化されたデータ処理機能を組み込んだ CData JDBC ドライバは、リアルタイムWooCommerce のデータとのインタラクションにおいて卓越したパフォーマンスを発揮します。WooCommerce に対して複雑な SQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされている SQL 操作を直接WooCommerceにプッシュし、サポートされていない操作(主に SQL 関数や JOIN 操作)は組み込みの SQL エンジンを使用してクライアント側で処理します。さらに、動的メタデータクエリ機能により、ネイティブのデータ型を使用してWooCommerce のデータの操作・分析が可能です。
ステップ1:接続プロパティの設定と接続文字列の構築
CData JDBC Driver for WooCommerce のインストーラーをダウンロードし、パッケージを解凍して JAR ファイルを実行してドライバーをインストールします。次に、必要な接続プロパティを収集します。
WooCommerce は、one-legged OAuth1.0 認証と通常のOAuth2.0 認証をサポートします。
one-legged OAuth 1.0 認証を使って接続する
次のプロパティを指定してください(NOTE:次の資格情報はWooCommerce の設定ページで生成されるもので、WordPress OAuth2.0 プラグインで生成されるものとは異なります)。
- ConsumerKey
- ConsumerSecret
WordPress OAuth 2.0 認証を使って接続する
プラグインを設定した後、
次の接続プロパティを指定することでWooCommerce に接続できます。
どちらの場合方法でも、Url プロパティをWooCommerce インスタンスのURL に設定する必要があります。
NOTE: AWS Lambda 関数で JDBC ドライバーを使用するには、ライセンス(製品版または試用版)とランタイムキー(RTK)が必要です。ライセンス(または試用版)の取得については、弊社営業チームまでお問い合わせください。
JDBC URL の構築には、WooCommerce JDBC Driver に組み込まれている接続文字列デザイナーを使用できます。JAR ファイルをダブルクリックするか、コマンドラインから JAR ファイルを実行してください。
接続プロパティ(RTK を含む)を入力し、接続文字列をクリップボードにコピーします。
プロジェクトのルートフォルダから以下の Maven コマンドを実行して、JAR ファイルをプロジェクトにインストールします。 Maven プロジェクトの pom.xml ファイル内で、AWS とCData JDBC Driver for WooCommerceを依存関係として追加します(<dependencies> 要素内に以下の XML を追加)。 このサンプルプロジェクトでは、CDataLambda.java と CDataLambdaTest.java の2つのソースファイルを作成します。
以下の完全な Lambda クラスを使用してください。インポート、クラス定義、handleRequest メソッドが含まれています。DriverManager.getConnection 呼び出し内の接続文字列値は、実際の値に置き換えてください。
IntelliJ で関数をビルドしたら、Maven プロジェクト全体を単一の JAR ファイルとしてデプロイする準備が整います。
Note: Maven Shade Plugin は target フォルダに2つの JAR を生成します。AWS Lambda には常に、すべての必要な依存関係を含むサイズの大きい -shaded.jar ファイルをアップロードしてください。
CData JDBC Driver for WooCommerce の30日間の無償トライアルをダウンロードして、AWS Lambda でリアルタイムWooCommerce のデータを活用してみてください。ご不明な点があれば、サポートチームまでお気軽にお問い合わせください。
組み込みの接続文字列デザイナー
java -jar cdata.jdbc.woocommerce.jar
ステップ2:IntelliJ でプロジェクトを作成
CData JDBC Driver for WooCommerce JAR ファイルのインストール
mvn install:install-file -Dfile="PATH/TO/CData JDBC Driver for WooCommerce 20XX/lib/cdata.jdbc.woocommerce.jar" -DgroupId="org.cdata.connectors" -DartifactId="cdata-woocommerce-connector" -Dversion="23" -Dpackaging=jar
依存関係の追加
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.2</version> <!--Replace with the actual version-->
</dependency>
<dependency>
<groupId>org.cdata.connectors</groupId>
<artifactId>cdata-woocommerce-connector</artifactId>
<version>25</version> <!--Replace with the actual version-->
</dependency>
<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 関数の作成
Lambda 関数の定義
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.woocommerce.WooCommerceDriver");
cdata.jdbc.woocommerce.WooCommerceDriver driver = new cdata.jdbc.woocommerce.WooCommerceDriver();
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:woocommerce:RTK=52465...;Url=https://example.com/; ConsumerKey=ck_ec52c76185c088ecaa3145287c8acba55a6f59ad; ConsumerSecret=cs_9fde14bf57126156701a7563fc87575713c355e5; " + 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 関数のデプロイと実行
無償トライアル・詳細情報