CData Software Blog

クラウド連携のCData Software の技術ブログです。

AWS RDS for SQL Server のリンクサーバーに Salesforce データを連携:CData Connect

こんにちは、CData Softwatre Japan エンジニアの宮本です。

今回は AWS RDS に構築している SQLServer のリンクサーバー機能を用いて、データハブサービスの CData Connect 経由で Salesforce のデータにアクセスする方法をご紹介します。

CData Connect とは?

さまざまなクラウドサービスのデータをOData、MySQLTDS(SQLServer) の3つの規格で接続できるインタフェースが提供されるSaaS 型のサービスです。 例えば SQLServer でしか外部との連携ができないサービスがある場合、CData Connect がデータソースと利用ツール・サービスの間に入ってデータソースへの接続用に TDS エンドポイントを作成し、色々なデータソースを SQLServer インタフェースでアクセスすることが可能になります。
https://www.cdata.com/jp/connect/ f:id:sennanvolar44:20210317161612p:plain

OData、MySQLSQLServer 3つの規格があるとお伝えしましたが、本内容では SalesforceTDS(SQLServer) プロトコルで通信できるように CData Connect で設定していきます。
f:id:sennanvolar44:20210317233605p:plain

手順

CData Connect で Salesforce への接続設定

CData Connect のアカウントでログイン後、「DATABASE」→ Salesforce のアイコンをクリックします。※CData Connect のアカウントがない場合は、以下のリンクよりトライアル申請を行ってください。

https://www.cdata.com/jp/connect/cloud/

f:id:sennanvolar44:20210317162724p:plain

Salesforce への接続設定を行います。
f:id:sennanvolar44:20210317163338p:plain

CData Connect のユーザー作成
CData Connect 上のユーザーを作成することができます。ここで作成したユーザーは他のサービスから CData Connect へ接続する際に使用します。 「USERS」→「Add」でユーザーを作成します。
f:id:sennanvolar44:20210317163530p:plain

CData Connect で TDS Endpoint の作成と仮想データベース名の確認

まずは、「ENDPOINTS」をクリックしてください。そこにはOData、MySQLTDS(SQLServer) のエンドポイントが表示されています。リンクサーバからの接続には TDS のエンドポイントを使用します。
f:id:sennanvolar44:20210317163803p:plain

次に CData Connect 上で定義したデータベース名を確認します。「DATABASES」をクリックして、Name 列にあるデータベース名を確認します。
f:id:sennanvolar44:20210317174300p:plain

作成したデータベースをクリック後、「Privilrgrs」タブより使用するユーザーに権限を付与します。 f:id:sennanvolar44:20201020215804p:plain

これで、CData Connect へ TDS プロトコルで接続できる準備が整いました。

リンクサーバー設定

SQLServer Management Studio (以下、SSMS) がインストールされているマシンから RDS の SQLServer に接続します。Object Explorer から Server Objects > Linked Server を辿って右クリックからリンクサーバーを作成しようとすると下記のようなエラーが発生します。
f:id:sennanvolar44:20210317180007p:plain

これは、AWS の下記ドキュメントに記載のあるように権限が付与されていないためのようです。代替案としてクエリーからストアドプロシージャでリンクサーバーを作成する手段が紹介されています。

aws.amazon.com

クエリからリンクサーバーを作成する方法はこちらの CData 社のマニュアルをご参照ください。SSMS の新規クエリーから以下クエリーを実行します。
「sp_addlinkedserver」ストアド内の「datasrc」は、CData Connect で生成した TDS Endpoint を指定ください。ただし、注意点としてはポート指定の部分を「:1433」→「,1433」に変更して指定してください。

「catalog」には CData Connect で確認したデータベース名を指定します。

EXEC sp_addlinkedserver @server='Salesforce',
  @srvproduct = '',
  @provider='SQLNCLI',
  @datasrc='xxxx.xxxxxx.xxxxxx,1433',
  @catalog='Salesforce_Test';
GO

「sp_addlinkedsrvlogin」ストアドの「rmtuser」および「rmtpassword」は、CData Connect で作成したユーザ名・パスワードを設定ください。

EXEC sp_addlinkedsrvlogin @rmtsrvname='Salesforce',
  @rmtuser='SalesforceTest',
  @rmtpassword='xxxxxxx',
  @useself='FALSE',
  @locallogin=NULL;
GO

f:id:sennanvolar44:20210317181332p:plain

上記ストアドプロシージャを実行したら SSMS の オブジェクトエクスプローラ― をリフレッシュして最新情報を表示してください。オブジェクトエクスプローラ― にて サーバーオブジェクト > リンクサーバー > Salesforce > Salesforce_Test > テーブルと辿っていくと Salesforce のオブジェクトがテーブルリストに表示されることを確認してください。

f:id:sennanvolar44:20210317184236p:plain

リンクサーバー上の Salesforce リンクサーバーにクエリでアクセス

それでは、SSMSのクエリーから以下のSalesforceのAccount(取引先)へのアクセスするSQLを実行してみましょう。

SELECT *
  FROM [Salesforce].[Salesforce_Test].[Salesforce].[Account]
GO

右下のデータ表示エリアに Salesforce の Account のデータが表示されれば成功です。 f:id:sennanvolar44:20210317184541p:plain

おわりに

いかがでしたでしょうか。CData Connect を利用することで AWS RDS for SQL Server のリンクサーバーに Salesforce の取引先データを連携することができました。
同じ構成で「Dynamics 365 → SQLServer(リンクサーバー)」、「kintone → SQLServer(リンクサーバー)」の連携なども簡単に構築することができます。
現時点で対応しているデータソースはこちらから確認できます。

CData Software Japan - CData Connect Connectors

CData Connect はトライアルが可能です。ぜひお試しください。