SalesforceのCDCとMuleSoft Anypoint Platformを組み合わせたイベント駆動型のシステム連携

この記事では「 [Event-Driven Architecture with Salesforce and MuleSoft Anypoint Platform](https://developer.salesforce.com/blogs/2019/03/event-driven-architecture-with-salesforce-and-mulesoft-anypoint-platform.html)」の内容を参考に、SalesforceのCDC(Change Data Capture)とMulesoftのAnypoint Platformを組み合わせて、イベント駆動アーキテクチャによる外部システムとの（ほぼ）リアルタイムな同期機能を試作します。

## 前提
* Salesforceの[Developer Edtion](https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/quickstart_dev_org.htm)環境を持っていること
* Mulesoft Anypoint Platformの[Free Trialアカウント](https://anypoint.mulesoft.com/login/signup?apintent=generic)を持っていること  
  ※ Design Centerで開発を行うため、ローカル環境へのAnypoint Studioのインストールの必要はありません。

## SalesforceでCDC(Change Data Capture)を設定する
まずはSalesforceのDeveloper EdtionでCDC(Change Data Capture)の設定を行います。

1. 設定画面で「キャプチャ」で検索して「変更データキャプチャ」を選択します。
![設定画面検索.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/89c8b678-94cb-f0dc-a547-7a311dc5e04c.jpeg)

2. 変更データキャプチャ画面で、「取引先(Account)」を追加して保存します。
![変更データキャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/132e9e6e-bdef-1707-dbe5-013979b4ec18.jpeg)

SalesforceでのCDCの設定はこれだけです。これで取引先(Account)オブジェクトのCRUDの変更が公開された状態となります。

## 通知を受け取るAnypoint Platformのアプリケーションを作成する
次にMulesoftのAnypoint Platformに先ほど設定したSalesforceのCDC通知を受け付けるアプリケーションを作成します。

1. Anypoint Platformで「Design Center」→「Create」→「Create New Application」を選択します。
![アプリ作成JPG.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/17c95d25-7840-f1e0-106c-360b3b9a9391.jpeg)

2. 適当なアプリケーション名を入力して「Create」ボタンを押下。アプリケーションを作成してください。
　　※ 初期設定は行わず「Go straight to canvas」リンクでキャンバスを表示してください。
![キャンバス.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/542520dd-112f-7058-85ba-9c2dc65157a7.jpeg)

3. Triggerを選択し、以下を設定します。
  * Trigger：Salesforce Connector
  * Operation：Replay Channel

4. 次にConfigurationで以下の設定を行ってください。
  * Streaming Channel：/data/AccountChangeEvent  ※ [参考](https://developer.salesforce.com/docs/atlas.en-us.change_data_capture.meta/change_data_capture/cdc_subscribe_channels.htm)
  * Replay Option：From Replay Id
  * Reply Id：-1  
![Config.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/23d4f847-1283-c511-99cf-f2c03d20e0fb.jpeg)

5. 「Click here to set it up」リンクを押下して、Salesforceの共通設定を行います。  
Connection → Connection typeで「Basic Username Password」を選択したのち、Developer EditionのUsername、Password、Security Tokenを設定してください。
![Selesfroce共通設定.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/af146dc1-784a-2d97-c430-96d1ecc6bf20.jpeg)

6. Salesforce Connectionの右横の「＋」ボタンを押下してLoggerを追加します。
![Logger.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/90da4e32-56a1-ee6a-e1e1-fa1e9de77088.jpeg)

これでMuleのアプリケーションの作成が完了しました。最後に右上の「Run」ボタンを押下してアプリケーションを起動します。

## 動作確認
では、動作確認をしてみましょう。Salesforceで取引先を更新してみてください。
![Account Update.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/aa579f29-2368-6070-a821-479c5cf8595e.jpeg)

Anypoint PlatfromのDesign Centerに戻ってください。フローにグリーンのラインが入れば正常に動作しています。
※ 多少タイムラグが発生する場合があります。
![green.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/181ffc8a-d973-c76d-3c0e-6e11fa77bde0.jpeg)

SalesforceコネクタのOutputを確認してみましょう。変更されたデータが連携されていることが確認できます。
![output.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/8fb45316-ff7f-dc70-c2ba-03892e5ca568.jpeg)


## まとめ
SalesforceのCDC(Change Data Capture)とMulesoftのAnypoint Platformを組み合わせた簡単なイベント駆動型のデータ連携の方法を説明しました。今回のサンプルはとても簡単なサンプルになっていますが、Anypoint PlatformのExchangeで提供する様々なモジュールを利用することで、Salesforceと外部システムとのイベント駆動型の（ほぼ）リアルタイム連携を、コーディングを最小限に抑えた形で実現できることが想像できるかと思います。

おしまい