Amazon AppFlowについて
Amazon AppFlowはSalesforceやSAPなどのSaaSアプリケーションとAmazon S3やAmazon Redshiftなどのサービス間をコーディングなしでデータ転送できるサービスです。
AWSでSaaSからデータをS3に取り込む方法としてはファーストチョイスとなるサービスになります。
データ連携のトリガについて
Amazon AppFlowではSaaSアプリケーションとデータ連携を行うトリガについて3種類のモードが用意されています。
- オンデマンド
- ユーザが手動でデータ連携を実行する方法
- イベント
- SaaSアプリケーションでのイベントをトリガとしてデータ連携を実行する方法
- イベントが利用できるかどうかはSaaSアプリケーションの機能に依存。Salesforceであれば、Change Data Captureの設定を行うことでイベントが利用できる
- スケジュール
- 設定したスケジュールでデータ連携を行う方法
- 全データを連携する方法かIncremental Transferと呼ばれる増分データだけを連携する方法かを選択できる
ここでは大量データがある場合に有効な設定となる、スケジュールでのIncremental Transferの設定方法、動作内容について見ていきます。
Incremental Transferの設定方法
AppFlowの設定を行います。ここではSalesforceのデータをS3に取り込む設定を行います。
-
手順2ではまずは送信元としてSalesforceを選択し、Salesforce接続を選択します。Salesforce接続は初回セットアップ時は存在しないので、接続名とSalesforceへのログイン情報等を入力して接続を作成する必要があります。今回はSalesforceオブジェクトのOpportunityのデータを取得する設定にします。
-
手順2の続きとして送信先の設定を行います。Amazon S3を送信先として設定し送信先バケットを選択します。また、その他の設定の部分で今回は保存されるデータの形式としてParquetを選択しました。
-
また手順2の続きとして、ここでフロートリガーの設定を行います。スケジュール通りにフローを実行を選択し、開始日、開始時刻を設定します。繰り返しのタイミングはデフォルトの5分毎としています。
-
手順3では取り込むデータのフィールドをマッピングします。ここでは、すべてのフィールドを直接マッピングを選択してそのままデータを取り込む設定とします
-
手順4, 手順5については特に設定変更はせずにそのまま進みフロー作成を完了します
-
開始時刻になるとフローが実行され、その後は指定した間隔ごとにフローが実行されます
Incremental Transferの動作
Incremental Transferがどのようにデータ連携を行うかを解説します。
- 初回実行は指定したオブジェクトの全データを連携する
- 連携されたデータは指定したS3の位置にランダムな文字列のフォルダが作成され、その配下に連携されたデータファイルが配置される
- スケジュール実行ごとにデータの更新がある場合は、新しいフォルダが作成されデータファイルが配置される。データの更新がない場合はフォルダは作成されない
- データの更新はレコードの追加、既存レコードの更新、既存レコードの削除があり、それぞれのIncremental Transferの時のデータ連携内容
- レコードの追加については、追加されたレコードと同じ内容がS3のデータファイル内の1レコードとして追加される
- 既存レコードの更新については、更新後のレコードと同じ内容がS3のデータファイル内の1レコードとして追加される
- 既存レコードの削除については、上記に記載の通り削除されたレコードのインポートにチェックを入れるか入れないかで、S3のデータファイル内に追加されるかされないかが決定される
ここで重要なのは、Salesforce上での既存レコードの更新、削除でもS3のデータファイルには更新内容、削除内容がレコード追加されるということです。
そのため、S3に連携されるデータについてはデータの履歴のようになっているため、Salesforce上でのデータと全く同一の状態で保持されているわけではありません。
そのため、同一の状態にしたい場合は、連携されたデータの更新内容、削除内容に応じてデータ加工をする必要があることに注意が必要です。