AWS Glue から NetSuite のデータに接続

Jerod Johnson
Jerod Johnson
Senior Technology Evangelist
CData Connect AI を使用して、AWS Glue ジョブからリアルタイムのNetSuite のデータにアクセスできます。

Amazon AWS Glue は、ストレージや分析向けのデータの準備とロードを簡素化するために設計された ETL サービスです。Glue Studio と CData Connect AI を組み合わせることで、コーディング不要、または最小限のコーディングで ETL ジョブを構築できます。これらのジョブは、CData Glue Connector を通じてデータを操作できます。本記事では、CData Connect AI 経由で NetSuite に接続し、CData Glue Connector を使用してリアルタイムのNetSuite のデータを操作する AWS Glue ジョブを作成・実行する方法をステップごとにご紹介します。

CData Connect AI は、NetSuite 向けのシームレスなクラウド間インターフェースを提供し、AWS Glue ジョブ内でリアルタイムのNetSuite のデータに直接アクセスできます。必要な操作は、AWS Glue Connector を使用してテーブルを選択する(またはカスタム SQL クエリを作成する)だけです。最適化されたデータ処理機能を備えた CData Connect AI は、フィルタや JOIN などのサポート対象のクエリ操作を効率的に NetSuite へ直接送信します。サーバーサイド処理を活用することで、ETL ジョブ用のNetSuite のデータを迅速に取得できます。

NetSuite データ連携について

CData は、Oracle NetSuite のライブデータにアクセスし、統合するための最も簡単な方法を提供します。お客様は CData の接続機能を以下の目的で使用しています:

  • Standard、CRM、OneWorld を含む、すべてのエディションの NetSuite にアクセスできます。
  • SuiteTalk API(SOAP ベース)のすべてのバージョンと、SQL のように機能し、より簡単なデータクエリと操作を可能にする SuiteQL に接続できます。
  • Saved Searches のサポートにより、事前定義されたレポートとカスタムレポートにアクセスできます。
  • トークンベースおよび OAuth 2.0 で安全に認証でき、あらゆるユースケースで互換性とセキュリティを確保します。
  • SQL ストアドプロシージャを使用して、ファイルのアップロード・ダウンロード、レコードや関連付けのアタッチ・デタッチ、ロールの取得、追加のテーブルやカラム情報の取得、ジョブ結果の取得などの機能的なアクションを実行できます。

お客様は、Power BI や Excel などのお気に入りの分析ツールからライブ NetSuite データにアクセスするために CData ソリューションを使用しています。また、CData Sync を直接使用するか、Azure Data Factory などの他のアプリケーションとの CData の互換性を活用して、NetSuite データを包括的なデータベースやデータウェアハウスに統合しています。CData は、Oracle NetSuite のお客様が NetSuite からデータを取得し、NetSuite にデータをプッシュするアプリを簡単に作成できるよう支援し、他のソースからのデータを NetSuite と統合することを可能にしています。

当社の Oracle NetSuite ソリューションの詳細については、ブログをご覧ください:Drivers in Focus Part 2: Replicating and Consolidating ... NetSuite Accounting Data


はじめに


このセットアップには CData Connect AI インスタンスと CData AWS Glue Connector が必要です。まずは Connect AI の無料トライアルにサインアップし、Connect AI 用の無料 Glue Connector をサブスクライブしてください。


AWS Glue 用の NetSuite 接続を設定

AWS Glue から NetSuite への接続は、CData Connect AI を通じて実現できます。AWS Glue からNetSuite のデータを操作するには、まず NetSuite への接続を作成・設定します。

  1. Connect AI にログインして「Sources」をクリック、次に「 Add Connection」をクリック
  2. 接続を追加パネルから「NetSuite」を選択
  3. NetSuite に接続するために必要な認証プロパティを入力します。

    NetSuiteへの接続

    NetSuite では、2種類のAPI でデータにアクセスできます。どちらのAPI を使用するかは、Schema 接続プロパティで以下のいずれかを選択して指定してください。

    • SuiteTalk は、NetSuite との通信に使用されるSOAP ベースの従来から提供されているサービスです。幅広いエンティティをサポートし、INSERT / UPDATE / DELETE の操作も対応しています。ただし、SuiteQL API と比べるとデータの取得速度が劣ります。また、サーバーサイドでのJOIN に対応していないため、これらの処理はCData 製品がクライアントサイドで実行します。
    • SuiteQL は、より新しいAPI です。JOIN、GROUP BY、集計、カラムフィルタリングをサーバーサイドで処理できるため、SuiteTalk よりもはるかに高速にデータを取得できます。ただし、NetSuite データへのアクセスは読み取り専用となります。

    データの取得のみが目的でしたらSuiteQL をお勧めします。データの取得と変更の両方が必要な場合は、SuiteTalk をお選びください。

    NetSuite への認証

    CData 製品では、以下の認証方式がご利用いただけます。

    • トークンベース認証(TBA)はOAuth1.0に似た仕組みです。2020.2以降のSuiteTalk とSuiteQL の両方で利用できます。
    • OAuth 2.0 認証(OAuth 2.0 認可コードグラントフロー)は、SuiteQL でのみご利用いただけます。
    • OAuth JWT 認証は、OAuth2.0 クライアント認証フローの一つで、クライアント認証情報を含むJWT を使用してNetSuite データへのアクセスを要求します。

    トークンベース認証(OAuth1.0)

    トークンベース認証(TBA)は、基本的にOAuth 1.0 の仕組みです。この認証方式はSuiteTalk とSuiteQL の両方でサポートされています。管理者権限をお持ちの方がNetSuite UI 内でOAuthClientId、OAuthClientSecret、OAuthAccessToken、OAuthAccessTokenSecret を直接作成することで設定できます。 NetSuite UI でのトークン作成手順については、ヘルプドキュメントの「はじめに」セクションをご参照ください。

    アクセストークンを作成したら、以下の接続プロパティを設定して接続してみましょう。

    • AuthScheme = Token
    • AccountId = 接続先のアカウント
    • OAuthClientId = アプリケーション作成時に表示されるコンシューマーキー
    • OAuthClientSecret = アプリケーション作成時に表示されるコンシューマーシークレット
    • OAuthAccessToken = アクセストークン作成時のトークンID
    • OAuthAccessTokenSecret = アクセストークン作成時のトークンシークレット

    その他の認証方法については、ヘルプドキュメントの「はじめに」をご確認ください。

  4. 「Save & Test」をクリック
  5. NetSuite 接続の追加ページで「Permissions」タブに移動し、ユーザーベースの権限を更新します。

パーソナルアクセストークンの追加

REST API、OData API、または仮想 SQL Server を通じて Connect AI に接続する場合、パーソナルアクセストークン(PAT)を使用して Connect AI への接続を認証します。アクセスを細かく管理するため、サービスごとに個別の PAT を作成することをお勧めします。

  1. Connect AI アプリの右上にある歯車アイコン()をクリックして設定ページを開きます。
  2. 設定ページで「Access Tokens」セクションに移動し、「 Create PAT」をクリックします。
  3. PAT に名前を付けて「Create」をクリックします。
  4. パーソナルアクセストークンは作成時にのみ表示されるため、必ずコピーして今後の使用に備えて安全に保管してください。

接続が設定され PAT が生成されたので、AWS Glue からNetSuite のデータに接続する準備が整いました。

IAM ロールの権限を更新

AWS Glue ジョブを作成する際、ジョブで使用する AWS Identity and Access Management(IAM)ロールを指定します。このロールは、Amazon S3(ソース、ターゲット、スクリプト、一時ディレクトリ用)、AWS Glue Data Catalog オブジェクトなど、ジョブで使用するすべてのリソースへのアクセスを許可する必要があります。また、AWS Glue Marketplace の NetSuite 用 CData Glue Connector へのアクセスも許可する必要があります。

AWS Glue ジョブの IAM ロールには、少なくとも以下のポリシーを追加する必要があります:

  • AWSGlueServiceRole(Glue Studio と Glue Jobs へのアクセス用)
  • AmazonEC2ContainerRegistryReadOnly(NetSuite 用 CData AWS Glue Connector へのアクセス用)

Amazon S3 のデータにアクセスする場合は、以下を追加してください:

  • AmazonS3FullAccess(Amazon S3 への読み書き用)

また、AWS Secrets Manager を使用して機密性の高い接続プロパティを保存する場合(詳細は後述)、以下のようなインラインポリシーを追加し、Glue Job に必要な特定のシークレットへのアクセスを許可する必要があります:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes128-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes192-4D5e6F",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes256-7g8H9i"
            ]
        }
    ]
}

AWS Glue Studio および Glue Jobs へのアクセス許可の設定について詳しくは、AWS Glue ドキュメントの「AWS Glue の IAM アクセス権限の設定」を参照してください。

Amazon S3 バケットへのアクセス許可について詳しくは、Amazon Simple Storage Service 開発者ガイドの「ID およびアクセス管理」を参照してください。

シークレットへのアクセス制御の設定について詳しくは、AWS Secrets Manager ドキュメントの「AWS Secrets Manager の認証とアクセスコントロール」および AWS Secrets Manager ユーザーガイドの「特定のシークレットへのアクセスを制限する」を参照してください。AWS Secrets Manager から取得した認証情報(キーと値のペアの文字列)は、上記のように CData Glue Connector がデータソースに接続する際に使用する JDBC URL で使用されます。

(オプション)NetSuite 接続プロパティを AWS Secrets Manager に保存

接続プロパティを安全に保存・使用するために、AWS Secrets Manager に保存できます。

注意: AWS Glue ETL ジョブとシークレットは同じリージョンでホストする必要があります。現在、リージョン間でのシークレット取得はサポートされていません。

  1. AWS Secrets Manager コンソールにサインインします。
  2. サービス紹介ページまたはシークレット一覧ページで「新しいシークレットを保存」を選択します。
  3. 「新しいシークレットを保存」ページで「その他のタイプのシークレット」を選択します。このオプションでは、シークレットの構造と詳細を自分で指定します。
  4. NetSuite への接続に必要なプロパティについては、以下の「アクティベート」セクションをご確認ください。保存するプロパティが決まったら、各プロパティに対してキーと値のペアを作成します。例:
    • Username: CData Connect AI ユーザー(例:[email protected]
    • Password: CData Connect AI ユーザーの PAT

    シークレットの作成について詳しくは、AWS Secrets Manager ユーザーガイドの AWS Secrets Manager でのシークレットの作成と管理を参照してください。

  5. シークレット名を記録しておきます。これは AWS Glue Studio で接続を設定する際に使用します。

CData Glue Connector for NetSuite をサブスクライブ

AWS Glue Studio で NetSuite 用の CData Glue Connector を使用するには、AWS Marketplace から Connector をサブスクライブする必要があります。すでに NetSuite 用の CData Glue Connector をサブスクライブしている場合は、次のセクションに進んでください。

  1. CData AWS Glue Connector for Connect AI の AWS Marketplace リストに移動します
  2. 「Continue to Subscribe」をクリックします
  3. Connector の規約に同意し、リクエストが処理されるまで待ちます
  4. 「Continue to Configuration」をクリックします

Glue Studio で CData Glue Connector for Connect AI をアクティベート

AWS Glue で NetSuite 用の CData Glue Connector を使用するには、AWS Glue Studio でサブスクライブした Connector をアクティベートする必要があります。アクティベート処理により、AWS アカウントにコネクタオブジェクトと接続が作成されます。

  1. Connector をサブスクライブすると、AWS Marketplace のコネクタページに新しい「Configure」タブが表示されます。
  2. 配信オプションを選択し、「Continue to Launch」ボタンをクリックします。
  3. Launch タブで「Usage Instructions」をクリックし、表示されるリンクをクリックして接続を作成・設定します。
  4. Connection access で JDBC URL フォーマットを選択し、接続を設定します。以下に、NetSuite で使用可能な JDBC URL フォーマットのサンプル接続文字列を示します。NetSuite での認証について詳しくは、Connector のヘルプドキュメントをご参照ください。

    AWS Secrets Manager にプロパティを保存する場合は、プレースホルダー値(例:${Property1})をそのままにしておきます。そうでない場合、AWS Glue 接続インターフェースで入力した値は、プロパティの下の(読み取り専用の)JDBC URL に表示されます。

    Connect AI

    jdbc:cdata:Connect:AuthScheme=Basic;User=${Username};Password=${Password};defaultCatalog=${defaultCatalog}
    1. ${Username}: Connect AI ユーザーを指定します
    2. ${Password}: Connect AI の PAT を指定します
    3. ${defaultCatalog}: 設定した接続名を指定します(例:NetSuite1)
  5. (オプション): Connector のロギングを有効にします。

    NetSuite 用の CData Glue Connector の機能をログに記録する場合は、JDBC URL に 2 つのプロパティを追加する必要があります:

    • Logfile: 「STDOUT://」に設定します
    • Verbosity: 整数(1-5)に設定します。1 がデフォルトで、ほとんどのデバッグシナリオでは 3 を推奨します。
  6. ネットワークオプションを設定し、「Create Connection」をクリックします。

Amazon Glue ジョブの設定

接続を設定したら、Glue ジョブを構築できます。

接続を使用するジョブを作成

  1. Glue Studio で「Your connections」から作成した接続を選択します
  2. 「Create job」をクリックします

    ビジュアルジョブエディタが表示されます。接続から派生した新しい Source ノードがジョブグラフに表示されます。右側のノード詳細パネルでは、ユーザー入力用に「Source Properties」タブが選択されています。

Source ノードプロパティの設定:

「Source properties」タブで、データソースへの接続のアクセスオプションを設定できます。詳細については、AWS Glue Studio ドキュメントを参照してください。ここでは簡単な手順をご紹介します。

  1. ビジュアルジョブエディタで、コネクタの Source ノードが選択されていることを確認します。まだ選択されていない場合は、右側のノード詳細パネルで「Source properties」タブを選択します。
  2. Connection フィールドには、マーケットプレイスコネクタに関連付けられた接続名が自動的に入力されます。
  3. データソース内のデータの場所に関する情報を入力します。データソースからデータを取得するためのソーステーブル名またはクエリを指定します。例:
    SELECT CustomerName, SalesOrderTotal FROM NetSuite1.NetSuite.SalesOrder WHERE Class_Name = Furniture : Office

    注意: ソーステーブルには完全修飾ドメイン名を使用します。CData Connect AI での接続名がカタログ名、データソース名がスキーマとなります。例:NetSuite1.NetSuite.SalesOrder

  4. データソースから変換ノードに情報を渡すには、AWS Glue Studio がデータのスキーマを把握する必要があります。「Use Schema Builder」を選択して、スキーマをインタラクティブに指定します。
  5. 必要に応じて残りのオプションフィールドを設定します。以下を設定できます:
    • パーティショニング情報 - データソースからの読み取り操作を並列化するため
    • データ型マッピング - ソースデータで使用されるデータ型を AWS Glue でサポートされるデータ型に変換するため
    • フィルター述語 - データソースからデータのサブセットを選択するため

    これらのオプションについて詳しくは、「Use the Connection in a Glue job using Glue Studio」を参照してください。

  6. ノードプロパティパネルの「Output schema」タブを選択すると、このノードで生成されるスキーマを確認できます。

ジョブの編集、保存、実行

ジョブグラフでノードを追加・編集してジョブを編集します。詳細については、「AWS Glue Studio での ETL ジョブの編集」を参照してください。

ジョブの編集が完了したら、ジョブプロパティを入力します。

  1. ビジュアルグラフエディタの上にある「Job properties」タブを選択します。
  2. カスタムコネクタを使用する場合は、以下のジョブプロパティを設定します:
    • Name: ジョブ名を入力します。
    • IAM Role: 前述の必要な権限を持つ IAM ロールを選択(または作成)します。
    • Type: 「Spark」を選択します。
    • Glue version: 「Glue 3.0 - Supports spark 3.1, Scala 2, Python 3」を選択します。
    • Language: 「Python 3」を選択します。
    • その他のパラメータにはデフォルト値を使用します。ジョブパラメータについて詳しくは、AWS Glue 開発者ガイドの「ジョブプロパティの定義」を参照してください。
  3. ページ上部の「Save」を選択します。
  4. 「Successfully created Job」というメッセージが緑色のバナーで表示されます。
  5. ジョブの保存に成功したら、「Run」を選択してジョブを実行できます。
  6. ジョブの生成されたスクリプトを表示するには、ビジュアルエディタ上部の「Script」タブを選択します。「Job runs」タブにはジョブの実行履歴が表示されます。ジョブ実行の詳細については、「最近のジョブ実行の情報を表示」を参照してください。

生成されたスクリプトの確認

ジョブ作成の任意の時点で、「Script」タブをクリックして Glue Studio が作成しているスクリプトを確認できます。NetSuite のデータを Amazon S3 バケットに書き込む単純なジョブを作成した場合、スクリプトは以下のようになります:

サンプルスクリプト

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args)

# Script generated for node CData AWS Glue Connector for CData Connect
CDataAWSGlueConnectorforCDataConnect_node1 = (
    glueContext.create_dynamic_frame.from_options(
        connection_type="marketplace.jdbc",
        connection_options={
            "tableName": "NetSuite1.NetSuite.SalesOrder",
            "dbTable": "NetSuite1.NetSuite.SalesOrder",
            "connectionName": "cdata-cloud-connector",
        },
        transformation_ctx="CDataAWSGlueConnectorforCDataConnect_node1",
    )
)

job.commit()

CData Connect AI と AWS Glue Studio の AWS Glue Connector for Connect AI を使用すると、NetSuite のデータを S3 バケットやその他の宛先にロードする ETL ジョブを簡単に作成できます。また、Glue Connector を使用して、Glue Jobs でNetSuite のデータを追加、更新、削除することもできます。

300 以上の SaaS、ビッグデータ、NoSQL ソースへのリアルタイムデータアクセスをクラウドアプリケーションから直接取得するには、CData Connect AI を今すぐお試しください!

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

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル お問い合わせ