AWS Glue ジョブからAdobe Target のデータにJDBC 経由で接続

加藤龍彦
加藤龍彦
デジタルマーケティング
Amazon S3 でホストされているCData JDBC ドライバーを使用してAWS Glue ジョブからAdobe Target にデータ連携。

AWS Glue はAmazon のETL サービスであり、簡単にデータプレパレーションを実行してストレージおよび分析用に読み込むことができます。AWS Glue と一緒にPySpark モジュールを使用すると、JDBC 接続経由でデータを処理するジョブを作成し、そのデータをAWS データストアに直接読み込むことができます。ここでは、CData JDBC Driver for AdobeTarget をAmazon S3 バケットにアップロードし、Adobe Target からデータを抽出してCSV ファイルとしてS3 に保存するためのAWS Glue ジョブを作成・実行する方法について説明します。

CData JDBC Driver for AdobeTarget をAmazon S3 バケットにアップロード

CData JDBC Driver for AdobeTarget をAWS Glue から使用するには、ドライバーの.jar ファイル(および必要なライセンスファイル)をAmazon S3 のバケットに配置する必要があります。

  1. Amazon S3 コンソールを開きます。
  2. バケットを選択、もしくは作成します。
  3. [アップロード]をクリックします。
  4. JDBC Driver の.jar ファイル(cdata.jdbc.adobetarget.jar) をインストールディレクトリのlib フォルダから選択してアップロードします。

Amazon Glue Job を設定

  1. [分析]->[AWS Glue]をクリックします。
  2. AWS Glue コンソールで、[ETL]->[ジョブ]をクリックします。
  3. [ジョブの追加]をクリックして新しいGlue ジョブを作成します。
  4. ジョブのプロパティを設定します:
    • 名前: AdobeTargetGlueJob など任意のジョブ名
    • IAM ロール: AWSGlueServiceRole もしくは AmazonS3FullAccessSelect の権限があるIAM ロールを設定(JDBC Driver がAmazon S3 バケットにあるため)。
    • Type: [Spark]を選択。
    • Glue version: ドロップダウンからバージョンを選択。
    • このジョブ実行: [ユーザーが作成する新しいスクリプト]を選択。
      スクリプトプロパティの設定:
      • スクリプトファイル名: GlueAdobeTargetJDBC などのスクリプトファイル名。
      • スクリプトが保存されているS3 パス: S3 バケットを入力もしくは選択。
      • 一時ディレクトリ: S3 バケットを入力もしくは選択
    • ETL 言語: [Python]を選択
    • セキュリティ設定、スクリプトライブラリおよびジョブパラメータを展開。依存JARS パスは、JDBC の.jar ファイルをアップロードしたS3 バケットに設定。.jar ファイル名 s3://mybucket/cdata.jdbc.adobetarget.jar も含めます。
  5. [次へ]をクリックすると、ほかのAWS エンドポイントへの接続オプション追加ができます。Redshift、MySQL などに接続する際にはここで接続を作成できます。
  6. [ジョブの保存とスクリプトの編集]をクリックします。
  7. 開いたエディタで、Python スクリプトを記述します。サンプルは以下です。

サンプルGlue スクリプト

CData JDBC driver でAdobe Target に接続するには、JDBC URL を作成します。さらにライセンスとしてJDBC URL にRTK プロパティを設定する必要があります。RTK は通常のライセンスと異なりますので、CData まで直接ご連絡をください。

Adobe Target に接続するには、以下に記載されているOAuth 接続プロパティとともにTenant プロパティを指定する必要があります。他の接続プロパティは処理動作に影響を与える可能性がありますが、接続には影響しません。

以下のステップでTenant 名を確認できます。

  1. Adobe Experience にログインします。URL は「https://experience.adobe.com/#/@mycompanyname/preferences/general-section」です。
  2. 「/#/@」の後の値を抽出します。この例では「mycompanyname」です。
  3. Tenant 接続プロパティをその値に設定します。

ユーザーアカウント(OAuth)

すべてのユーザーアカウントフローでAuthSchemeOAuthClient に設定する必要があります。

注意:OAuth を介したAdobe 認証では、2週間ごとにトークンを更新する必要があります。

すべてのアプリケーション

CData では、OAuth 認証を簡素化する組み込みOAuth アプリケーションを提供しています。または、カスタムOAuth アプリケーションを作成することもできます。詳細については、ヘルプドキュメントの「カスタムOAuthアプリの作成」をご確認ください。

OAuth アクセストークンの取得

接続するには以下のプロパティを設定します:

  • InitiateOAuthGETANDREFRESH に設定して、OAuth 交換を自動的に実行し、必要に応じてOAuthAccessToken を更新します。
  • OAuthClientId:アプリを登録した際に割り当てられたクライアントID に設定します。
  • OAuthClientSecret:アプリを登録した際に割り当てられたクライアントシークレットに設定します。
  • CallbackURL:アプリを登録した際に定義されたリダイレクトURI に設定します。例:https://localhost:3333

これらの設定により、プロバイダーはAdobe Target からアクセストークンを取得し、それを使用してデータを要求します。OAuth値はOAuthSettingsLocation で指定された場所に保存され、接続間で確実に保持されます。

ビルトイン接続文字列デザイナー

JDBC URL の作成をサポートするビルトインの接続文字列デザイナーがあります。ドライバーの.jar ファイルをダブルクリックするか、コマンドラインで.jar ファイルを実行するとデザイナーが開きます。

java -jar cdata.jdbc.adobetarget.jar

必要項目を入力すると、デザインs-下部に接続文字列が生成されますのでクリップボードにコピーして使います。

Using the built-in connection string designer to generate a JDBC URL (Salesforce is shown.)

CData JDBC driver をPySpark で使用して、AWS Glue モジュールでAdobe Target のデータを取得して、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 readAdobe Target のデータfrom the Activities table into a DataFrame
##Note the populated JDBC URL and driver class name
source_df = sparkSession.read.format("jdbc").option("url","jdbc:adobetarget:RTK=5246...;Tenant=mycompanyname;").option("dbtable","Activities").option("driver","cdata.jdbc.adobetarget.AdobeTargetDriver").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 バケットにAdobe Target のデータのCSV ファイルが生成されています。

このようにCData JDBC Driver for AdobeTarget をAWS Glue で使用することで、Adobe Target のデータをAWS Glue で自在に扱うことができます。Glue の外部データへの接続性を拡張するJDBC Driver を是非お試しください。

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

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

 ダウンロード

詳細:

Adobe Target Icon Adobe Target JDBC Driver お問い合わせ

Java アプリケーションをAdobe からのリアルタイムデータと簡単に接続します。