各製品の資料を入手。
詳細はこちら →AWS Glue ジョブからNetSuite のデータにJDBC 経由で接続
Amazon S3 でホストされているCData JDBC ドライバーを使用してAWS Glue ジョブからNetSuite にデータ連携。
最終更新日:2023-09-07
この記事で実現できるNetSuite 連携のシナリオ
こんにちは!ウェブ担当の加藤です。マーケ関連のデータ分析や整備もやっています。
AWS Glue はAmazon のETL サービスであり、簡単にデータプレパレーションを実行してストレージおよび分析用に読み込むことができます。AWS Glue と一緒にPySpark モジュールを使用すると、JDBC 接続経由でデータを処理するジョブを作成し、そのデータをAWS データストアに直接読み込むことができます。ここでは、CData JDBC Driver for NetSuite をAmazon S3 バケットにアップロードし、NetSuite からデータを抽出してCSV ファイルとしてS3 に保存するためのAWS Glue ジョブを作成・実行する方法について説明します。
CData JDBC Driver for NetSuite をAmazon S3 バケットにアップロード
CData JDBC Driver for NetSuite をAWS Glue から使用するには、ドライバーの.jar ファイル(および必要なライセンスファイル)をAmazon S3 のバケットに配置する必要があります。
- Amazon S3 コンソールを開きます。
- バケットを選択、もしくは作成します。
- [アップロード]をクリックします。
- JDBC Driver の.jar ファイル(cdata.jdbc.netsuite.jar) をインストールディレクトリのlib フォルダから選択してアップロードします。
Amazon Glue Job を設定
- [分析]->[AWS Glue]をクリックします。
- AWS Glue コンソールで、[ETL]->[ジョブ]をクリックします。
- [ジョブの追加]をクリックして新しいGlue ジョブを作成します。
- ジョブのプロパティを設定します:
- 名前: NetSuiteGlueJob など任意のジョブ名
- IAM ロール: AWSGlueServiceRole もしくは AmazonS3FullAccessSelect の権限があるIAM ロールを設定(JDBC Driver がAmazon S3 バケットにあるため)。
- Type: [Spark]を選択。
- Glue version: ドロップダウンからバージョンを選択。
- このジョブ実行: [ユーザーが作成する新しいスクリプト]を選択。
スクリプトプロパティの設定: - スクリプトファイル名: GlueNetSuiteJDBC などのスクリプトファイル名。
- スクリプトが保存されているS3 パス: S3 バケットを入力もしくは選択。
- 一時ディレクトリ: S3 バケットを入力もしくは選択
- ETL 言語: [Python]を選択
- セキュリティ設定、スクリプトライブラリおよびジョブパラメータを展開。依存JARS パスは、JDBC の.jar ファイルをアップロードしたS3 バケットに設定。.jar ファイル名 s3://mybucket/cdata.jdbc.netsuite.jar も含めます。
- [次へ]をクリックすると、ほかのAWS エンドポイントへの接続オプション追加ができます。Redshift、MySQL などに接続する際にはここで接続を作成できます。
- [ジョブの保存とスクリプトの編集]をクリックします。
- 開いたエディタで、Python スクリプトを記述します。サンプルは以下です。
サンプルGlue スクリプト
CData JDBC driver でNetSuite に接続するには、JDBC URL を作成します。さらにライセンスとしてJDBC URL にRTK プロパティを設定する必要があります。RTK は通常のライセンスと異なりますので、CData まで直接ご連絡をください。
Netsuite への接続
NetSuite は現在、2つの異なるAPI を提供しています。
- SuiteTalk はNetSuite との通信に使用する、SOAP ベースのより古いサービスです。多くのエンティティを幅広くサポートし、INSERT / UPDATE / DELETE を完全にサポートします。 しかしデータの抽出用ツールは低機能で、SELECT 時のパフォーマンスは極めて低いです。テーブルを結合するよい方法もありません。データのグループ化および集計はこのAPI からは利用できず、 そのためこれらの操作をサポートするには、すべてをクライアントサイドで実行しなければなりません。
- SuiteQL は新しいAPI です。サービスとのSQL ライクな通信方法を実現するため、JOIN の機能はより豊富になり、GROUP BY や集計機能もサポートします。 加えて、抽出したいカラムだけを取得する機能も完全にサポートします。そのため、データを抽出する際のパフォーマンスがSuiteTalk より大幅に向上しています。ただし、サポートされるのはデータの抽出のみです。
NetSuite に接続するには、以下を行う必要があります。
- Schema を設定して、接続に使用するAPI を指定。データを取得するだけの場合は、SuiteQL の使用をお勧めします。データの取得および変更が必要な場合は、SuiteTalk の使用をお勧めします。
- 使用するAPI に適した接続オプションを設定します。(それぞれのAPI で利用可能な接続オプションが異なります。ヘルプドキュメントの「許可の設定」を参照してください。)
Netsuite への認証
SuiteTalk またはSuiteQL
NetSuite は3つの形式のOAuth 認証を提供します。
- トークンベース認証(TBA)は、基本的にOAuth 1.0 で、OAuthAccessToken とOAuthAccessTokenSecret を実行時ではなくNetSuite UI 内で作成します。 TBA は、2020.2 以降のSuiteTalk およびSuiteQL の両方で利用可能です。
- OAuth 2.0 認証は、SuiteQL でのみ利用できます。OAuth 2.0 認証を強制するには、次のいずれかを実行します。
- OAuthVersion を使用するAPI に明示的に設定、または
- Schema をSuiteQL に設定
- OAuth JWT 認証は、OAuth 2.0 クライアント認証フローであり、クライアント認証情報を含むJWT を使用してNetSuite データへのアクセスを要求します。この認証方法は、Schema がSuiteQL に設定されている場合にのみ使用できます。
認証方法の詳細はヘルプドキュメントの「はじめに」を参照してください。
ビルトイン接続文字列デザイナー
JDBC URL の作成をサポートするビルトインの接続文字列デザイナーがあります。ドライバーの.jar ファイルをダブルクリックするか、コマンドラインで.jar ファイルを実行するとデザイナーが開きます。
java -jar cdata.jdbc.netsuite.jar
必要項目を入力すると、デザインs-下部に接続文字列が生成されますのでクリップボードにコピーして使います。

CData JDBC driver をPySpark で使用して、AWS Glue モジュールでNetSuite のデータを取得して、S3 にCSV 形式で保存するシンプルなスクリプト例は以下です。
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sparkContext = SparkContext()
glueContext = GlueContext(sparkContext)
sparkSession = glueContext.spark_session
##Use the CData JDBC driver to read NetSuite データ from the SalesOrder table into a DataFrame
##Note the populated JDBC URL and driver class name
source_df = sparkSession.read.format("jdbc").option("url","jdbc:netsuite:RTK=5246...;Account Id=XABC123456;Password=password;User=user;Role Id=3;Version=2013_1;").option("dbtable","SalesOrder").option("driver","cdata.jdbc.netsuite.NetSuiteDriver").load()
glueJob = Job(glueContext)
glueJob.init(args['JOB_NAME'], args)
##Convert DataFrames to AWS Glue's DynamicFrames Object
dynamic_dframe = DynamicFrame.fromDF(source_df, glueContext, "dynamic_df")
##Write the DynamicFrame as a file in CSV format to a folder in an S3 bucket.
##It is possible to write to any Amazon data store (SQL Server, Redshift, etc) by using any previously defined connections.
retDatasink4 = glueContext.write_dynamic_frame.from_options(frame = dynamic_dframe, connection_type = "s3", connection_options = {"path": "s3://mybucket/outfiles"}, format = "csv", transformation_ctx = "datasink4")
glueJob.commit()
Glueジョブを実行する
スクリプト記述後、Glue ジョブを実行します。実行した取得/ロードのジョブが完了するとAWS Glue コンソールのジョブページでステータスが確認できます。成功するとS3 バケットにNetSuite のデータのCSV ファイルが生成されています。
このようにCData JDBC Driver for NetSuite をAWS Glue で使用することで、NetSuite のデータをAWS Glue で自在に扱うことができます。Glue の外部データへの接続性を拡張するJDBC Driver を是非お試しください。