RDS 上の SQLServer リンクテーブルから Salesforce データにアクセス

by 桑島義行 | 2020年09月18日

はじめに

本記事では、AWS RDSに構築しているSQLServerのリンクサーバー機能を用いて、CData ODBC Driver for Salesforce + CData SQL Gateway 経由でSalesforceのデータにアクセスする方法をご紹介します。

f:id:kuwazzy:20200918141424p:plain

前提

  • AWS EC2(Windowsインスタンス)
  • AWS RDS (SQLServer)

手順

EC2上にCData Salesforce ODBC Driver をインストール

下記サイトからEC2上にCData Salesforce ODBC Driver Windows版をダンロードします。

f:id:kuwazzy:20200918062722p:plain

www.cdata.com

EC2上にCData Salesforce ODBC Driver をインストールします。SQL Gateway機能は、ODBC Driverのコンポーネントとして含まれているのでインストール時にSQL Gatewayのチェックがオンになっていることを確認してインストールしてください。

f:id:kuwazzy:20200918062919p:plain

インストールが正常に完了したら「ODBCデータソース を構成する」をオフにしてインストーラを終了します。

f:id:kuwazzy:20200918143729p:plain

Salesforceへの接続 ODBC DSN 設定

Windowsの検索機能で「odbc」とキーワードを入力して「ODBCデータソース (64ビット)」を選択します。

f:id:kuwazzy:20200918143633p:plain

ODBC データソース アドミニストレータ(64ビット)が開きます。システムDSNタブを開いて「CData Salesforce Sys」の64ビットを開きます。

f:id:kuwazzy:20200918153024p:plain

Salesforceへの接続プロパティを設定してください。

  • User
  • Password
  • Security Token ※取得方法はこちらの記事をご参照ください

cdn.cdata.com

接続のテストを実行して成功することを確認します。

f:id:kuwazzy:20200918063413p:plain

CData SQL Gatewayの設定

次にEC2のマシンにリンクテーブル先となる仮想SQLServerインスタンスを起動するためのCData SQL Gatewayを設定します。Windowsのスタートメニューから「CData SQL Gateway」を起動します。

f:id:kuwazzy:20200918063553p:plain

「サービス」タブに移動して以下の情報をセットします。詳細はこちらの製品ヘルプをご覧ください。

f:id:kuwazzy:20200918063654p:plain

  • サービス名:任意(本例では、Salesforce)
  • TDS(SQLServer) : ON
  • TSL/SSL : チェック済み
  • データソース :CData Salesforce Sys
  • ポート:1434 (使われていないポートであればOK)

続いてユーザータブに移動します。追加ボタンをクリックして仮想SQLServerにアクセスするためのユーザーおよびパスワードをセットします。

f:id:kuwazzy:20200918063801p:plain

  • ユーザ:任意(本例では、cdata)
  • パスワード:任意
  • 管理者:チェック済み

CData SQL Gatewayメニューバーの「変更を保存」>「開始」をクリックします。サービスタブ内のSalesforceに緑色の丸がつけば仮想SQLServerインスタンスが起動している状態です。

f:id:kuwazzy:20200918063857p:plain

接続ポートの設定

RDSからEC2上の仮想SQLServerに接続するためのポート(上記の設定例だと1434)を公開します。

f:id:kuwazzy:20200918151058p:plain

下記例ではAWS管理コンソールでEC2のインバウンドの1434ポートを全公開にしておりますが、環境に併せて設定ください。

f:id:kuwazzy:20200918064418p:plain

リンクサーバー設定

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

f:id:kuwazzy:20200918065729p:plain

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

クエリからリンクサーバーを作成する方法はこちらのCData社のマニュアルをご参照ください。SSMSの新規クエリーから以下クエリーを実行します。「sp_addlinkedserver」ストアド内の「datasrc」は、EC2のDSN名(もしくはIPアドレス)を指定ください。また、「sp_addlinkedsrvlogin」ストアドの「rmtuser」および「rmtpassword」は、SQLGatewayで設定したユーザのパスワードを設定ください。

EXEC sp_addlinkedserver @server='Salesforce',
  @srvproduct = '',
  @provider='SQLNCLI',
  @datasrc='ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com,1434',
  @catalog='CData Salesforce Sys';
GO
EXEC sp_addlinkedsrvlogin @rmtsrvname='Salesforce',
  @rmtuser='cdata',
  @rmtpassword='*****',
  @useself='FALSE',
  @locallogin=NULL;
GO

f:id:kuwazzy:20200918070038p:plain

上記ストアドプロシージャを実行したらSSMSのObjectExplorerをリフレッシュして最新情報を表示してください。ObjectExplorerにてServer Objects > Linked Servers > Salesforce > CData Salesforce Sys > Tables と辿っていくとSalesforceのオブジェクトがテーブルリストに表示されることを確認してください。

f:id:kuwazzy:20200918152310p:plain

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

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

SELECT [Id]
      ,[IsDeleted]
      ,[MasterRecordId]
      ,[Name]
      ,[Type]
      ,[ParentId]
      ,[BillingStreet]
      ,[BillingCity]
      ,[BillingState]
      ,[BillingPostalCode]
      ,[BillingCountry]
      ,[BillingLatitude]
      ,[BillingLongitude]
      ,[BillingGeocodeAccuracy]
      ,[ShippingStreet]
      ,[ShippingCity]
      ,[ShippingState]
      ,[ShippingPostalCode]
      ,[ShippingCountry]
      ,[ShippingLatitude]
      ,[ShippingLongitude]
      ,[ShippingGeocodeAccuracy]
      ,[Phone]
      ,[Fax]
      ,[AccountNumber]
      ,[Website]
      ,[PhotoUrl]
      ,[Sic]
      ,[Industry]
      ,[AnnualRevenue]
      ,[NumberOfEmployees]
      ,[Ownership]
      ,[TickerSymbol]
      ,[Description]
      ,[Rating]
      ,[Site]
      ,[OwnerId]
      ,[CreatedDate]
      ,[CreatedById]
      ,[LastModifiedDate]
      ,[LastModifiedById]
      ,[SystemModstamp]
      ,[LastActivityDate]
      ,[LastViewedDate]
      ,[LastReferencedDate]
      ,[Jigsaw]
      ,[JigsawCompanyId]
      ,[CleanStatus]
      ,[AccountSource]
      ,[DunsNumber]
      ,[Tradestyle]
      ,[NaicsCode]
      ,[NaicsDesc]
      ,[YearStarted]
      ,[SicDesc]
      ,[DandbCompanyId]
      ,[CustomerPriority__c]
      ,[SLA__c]
      ,[Active__c]
      ,[NumberofLocations__c]
      ,[UpsellOpportunity__c]
      ,[SLASerialNumber__c]
      ,[SLAExpirationDate__c]
      ,[RichText__c]
      ,[aaaaaa__c]
  FROM [Salesforce].[CData Salesforce Sys].[Salesforce].[Account]
GO

右下のデータ表示エリアにSalesforceのAccountのデータが表示されれば成功です。

f:id:kuwazzy:20200918070449p:plain

〜 おしまい 〜

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。