ノーコードでクラウド上のデータとの連携を実現。
詳細はこちら →Salesforce Connectの外部オブジェクトからCData Connect Serverを利用して自社データベースに接続
桑島義行はじめに
Salesforceには外部ソースのデータをSalesforceにデータをコピーすることなく、Salesforce アプリケーションや外部オブジェクトにリアルタイム統合するSalesforce Connectという機能があります。本記事ではSalesforce Connectの外部オブジェクトからCData Connect Serverを利用することで自社データベース内のデータに接続する方法をご紹介します。
本記事で実現する内容
本記事では、Salesforceの外部オブジェクトとしてSalesforceの画面からAWSのデータベースサービスRDS(MySQL)内のデータにアクセスする方法をご説明します。
Salesforce Connectは外部データソースの種類としてODataが選択できますので、AWSのEC2上に設置したCData Connect ServerにてMySQLのデータをODataアクセス可能とすることで、Salesforceの外部オブジェクトからCData Connect Server経由でMySQLのデータにアクセスできるようになります。
なお、弊社ではCData Connect Serverの機能をフルマネージドサービスで提供するCData Connect Cloudも提供しております。CData Connect Cloudを利用した同様の手順についてはこちらの記事をご参照ください。
前提となる製品・サービス
- Salesforce(Salesforce Connectの契約、もしくは、開発者アカウント)
- CData Connect Server(30日の無償評価版あり)
- Amazon RDS for MySQL(以下、MySQL)
- Amazon EC2(Amazon Linuxを利用。java11以上が必要)
- Amazon Route 53(ドメイン取得に利用)
- Let's Encrypt(証明書取得に利用)
手順
CData Connect Serverの入手
こちらのページよりCData Connect Cloudをダウンロードします。今回はAmazon Linux上に構築するためCross-Platform版を選択しました。ダウンロードするとCDataConnect.tar.gzファイルを入手することができます。
Amazon Linux上でのCData Connect Serverの構築
以下のステップでAmazon Linux上にCData Connect Serverを配置してサービスを起動します。
- EC2上のAmazon LinuxにSSH接続
- /opt配下にcdataというディレクトリを作成
- 作成したcdataディレクトリに上記ダウンロードしたCDataConnect.tar.gzファイルをwgetコマンドなどで配置
- 「tar -zxvf CDataConnect.tar.gz」コマンドでファイルを解凍
- 「java -jar connect.jar -f service.json」コマンドでCData Connect Serverを起動
CData Connect Serverの管理コンソールへのアクセス
上記Amazon LinuxがインストールされているEC2のセキュリティグループでインバウンド8080ポートをブラウザでアクセスするマシンからのアクセスを許可します。
ブラウザでアクセスするマシンから「http:[EC2の外部IPアドレス]:8080」にアクセスして以下のようなCData Connect Serverの管理コンソールへのユーザ作成画面が表示されれば成功です。
一度、「java -jar connect.jar -f service.json -stop」コマンドでCData Connect Serverのマシンを停止します。
CData Connect ServerのSSL/TLS化
Salesforce Connectを利用したOData接続ではHTTPS(SSL/TLS)が必須となります。そのため、CData Connect Serverの生成するODataエンドポイントに対してHTTPSでアクセス可能とするためにSSL/TLS化の設定を行います。
本手順で使用するドメインはAWSのRoute53、サーバー証明書についてはLet's Encryptを使用して作成しました。本手順ではドメイン、および、サーバ証明書の取得については割愛します。
Route53のHosted ZoneにRecordを追加
- Record name : 例 connect.cdatajp.net
- Record type : A
- Value : EC2の外部IPアドレス


IAMロールの作成
AWS管理コンソール上で任意の名称のIAMロールを作成してPolicyを追加します。リソースのHosted Zone(xxxxxxx部分)については特定のホストゾーンIDをセットします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "route53:GetChange", "route53:ChangeResourceRecordSets", "route53:ListResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/xxxxxxx", "arn:aws:route53:::change/*" ] }, { "Sid": "", "Effect": "Allow", "Action": "route53:ListHostedZonesByName", "Resource": "*" } ] }
作成したIAMロールはCData Connect ServerのEC2マシンに紐つけます。
CData Connect Serverの設定ファイルの変更
Let's Encyptで作成されたcrtファイル、およびkeyファイルを使用してOpenSSLの「openssl pkcs12 -export -out cdataconnect.pfx -inkey private.key -in certificate.crt」コマンドでpfxファイルを作成してAmazon LinuxのEC2マシンの任意の場所にセットします。次にCData Connect Serverで上記サーバー証明書を読み込むための設定を行います。CData Connect Serverを配置したパス(本例では /opt/cdata)に移動してservice.jsonを開きます。
- "service.ssl.cert": "/opt/cdata/cdataconnect.pfx"
- "service.ssl.certtype": "PFXFILE"
- "service.ssl.password": "pfxファイルのパスワード"
- "odata.port": 443
- "odata.ssl.enabled": true
{ "service": { "service.data.rootfolder": "", "service.log.folder": "", "service.log.level": "Info", "service.log.rotation": "Daily", "service.encryption.key": "", "service.ssl.cert": "/opt/cdata/cdataconnect.pfx", "service.ssl.certtype": "PFXFILE", "service.ssl.subject": "", "service.ssl.password": "****", "service.stop.key": "Connect", "service.stop.port": 19723, "odata.port": 443, "odata.context.persist.tempdir": false, "odata.base.url": "", "odata.session.timeout": 30, "odata.ssl.enabled": true, "rest.service.enabled": true, "sql.idle.tcp.timeout": 10, "sql.session.timeout": 30, "sql.keepalive.timeout": 30, "sql.ssl.enabled": false, "sql.ssl.required": false, "sql.tds.port": 8033, "sql.mysql.port": 8006, "sql.max.threads": 8, "sql.variables": { "character_set_client": "utf8", "character_set_connection": "utf8" } } }
service.jsonファイルを保存したら、再度、「java -jar connect.jar -f service.json」コマンドでCData Connect Serverを起動します。
上記Amazon LinuxがインストールされているEC2のセキュリティグループでインバウンド443ポートをブラウザでアクセスするマシンからのアクセスを許可します。
ブラウザでアクセスするマシンから「https:ドメイン名」にアクセスして以下のようなCData Connect Serverの管理コンソールへのユーザ作成画面が表示されれば成功です。
ブラウザの証明書ビューア(Edgeの場合)でLet's Encryptで発行した証明書であることを確認します。
これでCData Connect ServerのSSL/TLS化は完了です。
CData Connect Serverを利用したAPIエンドポイントの作成
管理コンソールへのログイン、および、ライセンスアクティベーション
管理コンソールのCreate User画面で管理者ユーザ(admin)のパスワードを設定します。
パスワードが設定されるとログイン画面が表示されます。User=admin, Password=上記で指定したパスワードを入力して「Sign in」ボタンをクリックします。
Licensing画面が表示されるので既に製品ライセンスをお持ちの場合は「Install New License」、評価版でのご利用の場合は「Activate 30-Day Trial」ボタンをクリックします。
Name、Emailの入力ボックスが表示されるのでTermsを確認してActivate Trialボタンをクリックします。
プロキシサーバの設置などでCDataのライセンスサーバーにアクセスできない場合はオフラインでのアクティベーションも可能です。 その場合はこちらよりお問い合わせください。
Product Keyの欄にキー値、もしくは、評価版の残り日数が表示されれば成功です。
MySQLへの接続設定
CONNECTIONSタブを開き、「+Add Connection」ボタンをクリックします。
Databaseカテゴリー内のMySQLを選択します。
コネクタの入手についてのダイアログが表示されるのでDownloadを選択して「Download and Install」ボタンをクリックします。なお、プロキシサーバの設置などでCDataのサーバーにアクセスできない場合はオフラインでの入手も可能です。 その場合はこちらよりお問い合わせください。
ダウンロードが成功すると自動でCData Connect Serverサービスが再起動します。再度管理コンソールにログインしてCONNECTIONSタブを開きます。再び「+Add Connection」ボタンをクリックします。
「Show installed sources」ボタンをONにすると既にインストール済みのコネクタに絞り込むことが可能です。MySQLが含まれていることを確認してクリックして開きます。
MySQLへの接続に必要な以下の情報をセットして「Test Connection」で接続テストを行います。
- Name : 任意(本例ではデフォルトのMySQL1)
- Server : MySQLのサーバ名、もしくはIPアドレス(RDSの場合はEndpoint)
- Port:MySQLへの接続ポート(デフォルト:3306)
- User: MySQLへの接続ユーザ
- Paswword : MySQLへの接続ユーザのパスワード
- Database : 接続するMySQLのDatabas
Test Connection successful!とConnection was saved. メッセージが表示されればCData Connect ServerからMySQLへの接続は成功です。
CONNECTIONSのConfigured Connection画面に戻りMySQLへの接続が追加されていることを確認します。
APIエンドポイントの作成
Salesforceの外部オブジェクトとして参照したいMySQL内のテーブルを選択してAPIエンドポイントとして公開します。
ODATA > Tables タブを開き「+Add Tables」ボタンをクリックします。
Add Tablesダイアログが開くのでMySQLへのConnectionを選択して次に進みます。
MySQL内のテーブル一覧が表示されます。Salesforceの外部オブジェクトとしてアクセスするMySQL内のテーブルを選択します。本例ではMySQLのサンプルデータベースsakila内のcustomerテーブルを選択しました。
選択したテーブル内のフィールドリストが表示されます。公開するAPIエンドポイント毎にOperations(GET/POST/PUT/DELETE)の範囲とフィールドを指定することが可能です。本手順ではOperationsをGET(参照のみ)のみに指定して全フィールド公開する設定で保存します。
Tablesに上記手順で追加したMySQLのテーブルが追加されたことを確認します。
ODATA > API タブを開くとAPIリファレンスの画面が表示されます。左側のTables内のリンク(例:/data.rsc/MySQL1_customer)をクリックします。
MySQL内のテーブル(本例ではcustomer)にアクセス可能なAPIエンドポイントのドキュメントが開きます。GETメソッドでのAPIへのリクエストの方法などが記載されています。GETメソッドの場合はブラウザでもAPIリクエスト可能ですのでURLリンク(本例では odata.rsc/MySQL1_customer/)をクリックしてみましょう。
別タブでMySQLの指定したテーブルのデータがJSON形式のレスポンスで取得できることを確認できれば成功です。
次に本APIにアクセスするための認証情報を作成します。管理コンソールに戻りUSERSタブを開き「+Add User」ボタンをクリックします。
Userに任意の名称(本例ではSalesforceConnect)、Passwordをセットします。自動で文字列が生成されるAuthtokenがAPIでアクセスする際に必要な情報となりますので手元に保管しておいてください。あとはデフォルト設定のままSave Changesをクリックします。
作成したユーザが追加されたことを確認します。
作成したユーザを開きます。ユーザに対して接続(本例ではMySQL1)の権限を付与します。本例では参照だけに制限するためにSELECTのみを付与しました。
上記手順でCData Connect Serverを利用したAPIエンドポイントの作成は完了です。
Salesforceの外部オブジェクトの作成
画面をCData Connect Serverの管理コンソールからSalesforceに切り替えます。設定を開き、クイック検索から「外部」と入力して「外部データソース」を選択します。新規外部データソースボタンをクリックします。
外部データソース画面が開くので以下のプロパティ値をセットします。
- 外部データソース:任意(本例では MySQL_Customer)
- 名前:任意(本例では MySQL_Customer)
- 種別:Salesforce Connect:OData 4.0
- URL: https://[ドメイン名]/odata.rsc
- ID種別:ユーザ
- 認証プロトコル:パスワード認証
- 管理者ユーザ名:CData Connect Server側で作成したユーザ
- 管理者パスワード:CData Connect Server側で作成したユーザのパスワード
設定値の確認画面が表示されるので「検証して同期」ボタンをクリックします。
外部オブジェクトとして定義するCData Connect Serverが生成したAPIエンドポイントのリストが表示されるので選択にチェックを入れて同期ボタンをクリックします。
外部データソースの画面に戻り、下の方にスクロールして外部オブジェクトが追加されていることを確認します。
外部オブジェクトのデータをリスト表示するためのタブを作成します。設定のクイック検索で「タブ」と入力して「タブ」を開きカスタムオブジェクトタブの「新規」ボタンをクリックします。
新規カスタムタブの画面が開きます。オブジェクトには上記手順で作成した外部オブジェクト(本例では、MySQL1_customer)を選択、タブスタイルは任意のものを選択して次へ進みます。
ステップ2. プロファイルに追加、ステップ3. カスタムアプリケーションに追加についてはデフォルトのままで保存します。カスタムオブジェクトタブが追加されたことを確認します。
Salesforceの任意のアプリケーション(本例ではサービス)を開きます。タブに先の手順で追加したカスタムオブジェクトタブ(本例ではMySQL_customer)が追加されていることを確認して開きます。
リストビューの表示を「最近参照したデータ」から「すべて選択」に切り替えます。
以下のエラーメッセージが表示されます。
EXTERNAL_OBJECT_AUTHENTICATION_EXCEPTION: このレコードを表示するには、ここで個人設定内の外部データソースのログイン情報を入力してください: https://cdatajapantest-dev-ed.my.salesforce.com/lightning/settings/personal/ExternalObjectUserSettings/home。または、Salesforce システム管理者にお問い合わせください。
上記エラーメッセージ内のリンクをクリックすると「私の個人情報 > 外部システムの認証設定」画面が開きます。新規ボタンをクリックします。
以下のプロパティ値をセットして保存します。
- 外部システム定義:外部データソース
- 外部データソース:作成済みの外部データソース(本例ではMySQL _Cusotomer)
- ユーザ:Salesforceのログイン
- 認証プロトコル:パスワード認証
- ユーザ名:CData Connect Server側で作成したユーザ
- パスワード:CData Connect Server側で作成したユーザのパスワード
外部システムの認証設定が追加されたことを確認します。
再度、カスタムオブジェクトタブ(本例ではMySQL_customer)を開き、リストビューの表示を「最近参照したデータ」から「すべて選択」に切り替えます。レコードデータが表示されれば成功です。
デフォルトでは外部IDと表示URLがフィールドとして表示されますので表示項目を変更するためリストビューコントロールから「表示する項目を選択」をクリックします。
表示する項目を参照可能項目にセットして保存します。
タブ内にMySQLのテーブルデータが表示されれば成功です。これでSalesforceの画面からMySQLデータへの接続ができるようになりました。
まとめ
本手順では、Salesforce Connectの外部オブジェクトからCData Connect Serverを利用してMySQLのデータに接続する手順をご紹介しました。CData Connect ServerはMySQLだけではなく、RDBMSは勿論、NoSQLやアプリケーションなど200種類を超えるデータソースに対応しています。CData Connect Serverは30日の無償トライアルがございますので是非、実機にてお試しください