概要
AWS LambdaからTDVをデータソースとして利用する手順を説明します。
検証環境
TDV
製品 | バージョン | 備考 |
---|---|---|
TDV Server |
8.5.4 |
Windows Server 2019環境で実行 |
TDV Studo |
Lambda
ランタイム | アーキテクチャ |
---|---|
Java 11 (Corretto) |
x86_64 |
前提
以下の前提を満たすこととします。
- Lambda実行用のIAMロールがすでに作成済み
jarファイルの作成
Javaはコンパイラ言語のため、Lambda上での編集ができません。
そのため、ソースコードをビルドし、jarファイルをアップロードする必要があります。
jarファイルの作成方法はいくつかありますが、本記事では Maven というツールを使用します。
jarファイルが作成できればツールは問いません。
Javaプログラムの作成
Javaプログラムを作成します。
以下の例では、examples
データベースにcomposite
ドメインのadmin
ユーザで接続します。
TDV Serverのホスト情報やadmin
のパスワードはダミー値としています。
Main.JAVA
(サンプル)
package lambda_tdv;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class Main implements RequestHandler<Map<String, Object>, Map<String, Object>> {
public Map<String, Object> handleRequest(Map<String, Object> input, Context context) {
Map<String, Object> output = new HashMap<>();
Connection conn = null;
try {
//ドライバのクラス名を指定
Class.forName("cs.jdbc.driver.CompositeDriver");
//TDVへの接続情報
conn = DriverManager.getConnection("jdbc:compositesw:dbapi@tf-tdv.tibcoms.com:9401?domain=composite&dataSource=sandbox","admin","tibco123");
Statement statement = conn.createStatement();
//TDVにリクエストするクエリ
ResultSet resultSet = statement.executeQuery("SELECT count(*) FROM sandbox_kubo.cafe_data.orders;");
resultSet.next();
//クエリの結果をLambdaに出力
output.put("output", resultSet.getInt(1));
conn.close();
} catch (Exception e) {
output.put("output", "Exception");
e.printStackTrace();
}
return output;
}
}
pom.xmlの作成
MavenでJavaプログラムをビルドするための設定ファイル pom.xml
を作成します。
以下はMain.JAVA
をコンパイルする場合の例です。
実行環境やJavaプログラムに応じて、ファイルの内容を変更する必要があります。
pom.xml
(サンプル)
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>lambda_tdv_jdbc</artifactId>
<packaging>jar</packaging>
<version>0.0.1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>1.11.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>cs.jdbc</groupId>
<artifactId>cs_jdbc</artifactId>
<version>8.5.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
ディレクトリ構造
作成したファイルを以下のようなディレクトリ構造に配置します。
├── pom.xml
└── src
└── main
└── java
└── <パッケージ名>(本手順ではlambda_tdv)
└── <JAVAプログラム名>(本手順ではMain.java)
リポジトリへjdbcドライバを追加
以下のコマンドを実行し、MavenのリポジトリにTDV接続用JDBCドライバを追加します。
mvn install:install-file -Dfile=<JDBCドライバのファイルパス> -DgroupId=<Group Id> -DartifactId=<Artifact Id> -Dversion=<バージョン> -Dpackaging="jar" -DgeneratePom=true
TDV接続用JDBCドライバはeDelivery Siteにて提供されるTIB_tdv_drivers_8.5.4_all.zip
を展開後の以下のパスに存在するcsjdbc.jar
を指定します。
apps/jdbc/lib
pom.xml
で定義した値を指定します。<dependency>
<groupId>cs.jdbc</groupId>
<artifactId>cs_jdbc</artifactId>
<version>8.5.4</version>
</dependency>
mvn install:install-file -Dfile="C:\Program Files\tdv_driver\cs_jdbc.jar" -DgroupId="cs.jdbc" -DartifactId="cs_jdbc" -Dversion="8.5.4" -Dpackaging="jar" -DgeneratePom=true
ビルド
pom.xml
が存在するディレクトリ上で以下のコマンドを実行します。
mvn package
Lambda関数の設定
Lambda関数の作成
AWS Lambdaのトップから関数を作成をクリックします。
関数の設定を行います。
本記事では、ランタイムをJava 11 (Corretto)、アーキテクチャをx86_64、実行ロールには事前に作成したLambda実行用のIAMロールを設定し、関数を作成します。
ソースコードのアップロード
コードソース > アップロード元 > .zip または .jar ファイル を選択します。
アップロードを選択し、ビルドしたjarファイルを選択します。
保存をクリックします。
ハンドラの設定
ランタイム設定の編集をクリックします。
ハンドラを以下のように変更します。
<パッケージ名>.<クラス名>::handleRequest
本記事の場合は以下のように設定します。
lambda_tdv.Main::handleRequest
関数のテスト
テストタブに移動し、テストをクリックします。
本記事では、イベントJSONの内容は指定しませんが、Javaプログラムの内容によっては設定する必要があります。
テストが成功し、結果が返ってくることを確認します。