目次
はじめに
こんにちは、半田(@handy)です。
AWSでは様々なSaaSサービスのデータをAWS上に連携するためにAppFlowというサービスが提供されています。
AppFlowを使用する場合、データを提供するSaaSサービス側の知識とAWS側の知識の両方が必要になるため、若干採用ハードルとしては少し高くなります。
今回は普段AWSをメインで担当している私が、AppFlowを使ってSalesforceと連携する際に詰まったことがあったので、その対応方法について説明します。
構成
実際に検証した構成は以下になります。
SalesforceのデータをAppFlowを使って取得し、S3に出力するシンプルな構成です。
発生事象
まず大まかに説明しますとSalesforceとAppFlowのデータ連携を行う場合、AppFlow上でSalesforceオブジェクトを指定する方法とSalesforceイベントを指定する方法があります。
Salesforceオブジェクトを指定する場合は、指定したオブジェクトに関連するレコードを全件または差分で取得することができます。オブジェクトというとわかりづらいですが、RDBのテーブルのようなものとイメージするとわかりやすいと思います。
次にSalesforceイベントを指定する場合は、オブジェクトに対しての変更イベント(CDC)を取得することができます。イメージとしてはEventBridgeでAWSのイベントを取得するのが近いと思います。
今回発生した事象としては、Salesforceイベントを指定した場合に何故かAppFlowで作成したフローが実行されなかった、というものになります。
フロー構築
AppFlowのフロー構築手順としてはシンプルで、以下の5つの手順で構築可能です。
- フロー名と暗号化設定
- 送信元と送信先設定
- データフィールドマッピング
- フィルター追加
- 確認・作成
1.フロー名と暗号化設定
フロー名のみ設定して次へを押下します。
2.送信元と送信先設定
送信元のSalesforceの作成とAppFlowで利用するSalesforceへの接続設定は事前に作成していたので、Salesforceイベントを選択して今回は「取引先変更イベント」を選択します。
送信元には本記事用に作成したS3を指定して、それ以外の項目はデフォルトのまま次へを押下します。
3.データフィールドマッピング
データフィールドマッピングでは送信元と送信先のフィールドをマッピングします。
今回は全フィールドをそのままマッピングして次へを押下します。
4.フィルター追加
フィルターは特に設定しないのでそのまま次へを押下します。
5.確認・作成
最後に確認して問題なければフローを作成を押下します。
すぐにフローが作成されますが、この時点ではまだフローが有効化されていません。
実際にフローを動かすには右上にあるフローをアクティブ化を押下して、フローを有効化します。
問題なければ有効化されます。
作成してすぐであれば特に問題ないように見えますが、
数分放置していると勝手にステータスが「中断しました」となり、実行されていないのに実行ステータスがエラーとなってしまいました。
一応ステータスからエラーメッセージを確認できましたが、特に参考になるような情報は書いてませんでした。
対応方法
色々調べてみた結果、以下のリンクに記載の内容を参考に、Salesforce側の設定を修正する必要がありました。
- Invalid replayId when Appflow is triggered by ChangeEvent in Salesforce [closed]
- Cannot subscribe to Capture Data Changes (CDC) channel using EMP Connector
具体的にはSalesforceの設定から変更データキャプチャの項目に移動し、AppFlowで使用したいエンティティを画面右側の選択されたエンティティに移動して保存することでエラーは解消されました 。
上記の変更後、もう一度フローをアクティブ化して、対象のSalesforceのパラメータを更新するとフローは成功し、S3上に更新イベントが出力されるところまで確認できました。
おわりに
Salesforce側の設定だったからかどのAWSドキュメントを探しても設定方法が載っておらず、AppFlowのCloudTrailログにも何も出力されていなかったので、原因を見つけるのに時間がかかりました。
AppFlowでイベント情報を取得できるとEventBridgeやLambda等と組み合わせて動的に処理できるようにもなるので、是非AppFlowを使ってみていただけたらと思います。
この記事がどなたかの役に立てば幸いです。
- カテゴリー
- タグ