各製品の資料を入手。
詳細はこちら →RDS 上の SQLServer リンクテーブルから Salesforce データにアクセス
はじめに
本記事では、AWS RDSに構築しているSQLServerのリンクサーバー機能を用いて、CData ODBC Driver for Salesforce + CData SQL Gateway 経由でSalesforceのデータにアクセスする方法をご紹介します。
前提
- AWS EC2(Windowsインスタンス)
- AWS RDS (SQLServer)
手順
EC2上にCData Salesforce ODBC Driver をインストール
下記サイトからEC2上にCData Salesforce ODBC Driver Windows版をダンロードします。
EC2上にCData Salesforce ODBC Driver をインストールします。SQL Gateway機能は、ODBC Driverのコンポーネントとして含まれているのでインストール時にSQL Gatewayのチェックがオンになっていることを確認してインストールしてください。
インストールが正常に完了したら「ODBCデータソース を構成する」をオフにしてインストーラを終了します。
Salesforceへの接続 ODBC DSN 設定
Windowsの検索機能で「odbc」とキーワードを入力して「ODBCデータソース (64ビット)」を選択します。
ODBC データソース アドミニストレータ(64ビット)が開きます。システムDSNタブを開いて「CData Salesforce Sys」の64ビットを開きます。
Salesforceへの接続プロパティを設定してください。
- User
- Password
- Security Token ※取得方法はこちらの記事をご参照ください
接続のテストを実行して成功することを確認します。
CData SQL Gatewayの設定
次にEC2のマシンにリンクテーブル先となる仮想SQLServerインスタンスを起動するためのCData SQL Gatewayを設定します。Windowsのスタートメニューから「CData SQL Gateway」を起動します。
「サービス」タブに移動して以下の情報をセットします。詳細はこちらの製品ヘルプをご覧ください。
- サービス名:任意(本例では、Salesforce)
- TDS(SQLServer) : ON
- TSL/SSL : チェック済み
- データソース :CData Salesforce Sys
- ポート:1434 (使われていないポートであればOK)
続いてユーザータブに移動します。追加ボタンをクリックして仮想SQLServerにアクセスするためのユーザーおよびパスワードをセットします。
- ユーザ:任意(本例では、cdata)
- パスワード:任意
- 管理者:チェック済み
CData SQL Gatewayメニューバーの「変更を保存」>「開始」をクリックします。サービスタブ内のSalesforceに緑色の丸がつけば仮想SQLServerインスタンスが起動している状態です。
接続ポートの設定
RDSからEC2上の仮想SQLServerに接続するためのポート(上記の設定例だと1434)を公開します。
下記例ではAWS管理コンソールでEC2のインバウンドの1434ポートを全公開にしておりますが、環境に併せて設定ください。
リンクサーバー設定
SQLServerManagementStudio(以下、SSMS)がインストールされているマシンからRDSのSQLServerに接続します。Object ExplorerからServer Objects > Linked Serverを辿って右クリックからリンクサーバーを作成しようとすると下記のようなエラーが発生します。
これは、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
上記ストアドプロシージャを実行したらSSMSのObjectExplorerをリフレッシュして最新情報を表示してください。ObjectExplorerにてServer Objects > Linked Servers > Salesforce > CData Salesforce Sys > Tables と辿っていくとSalesforceのオブジェクトがテーブルリストに表示されることを確認してください。
リンクサーバー上の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のデータが表示されれば成功です。
〜 おしまい 〜