こんにちは、テクニカルサポートの宮本です。
今回は Amazon Linux 上の Go から、 CData Salesforce ODBC Driver を使って、Salesforce からデータを取得する方法をご紹介します。
手順
それでは Salesforce ODBC Driver をインストールしていきますが、本記事では既にEC2 で Amazon Linux のVM が作成されていることとして進んでいきます。
CData Salesforce ODBC Driver ダウンロード
まずは以下リンクより CData Salesforce ODBC Driver をダウンロードします。
https://www.cdata.com/jp/drivers/salesforce/odbc/
Unix タブを選択してから評価版をダウンロードします。
ダウンロードが完了したら、対象のEC2マシンに先ほどダウンロードした rpm をアップロードします。
Amazon Linux に Go をインストール
Amazon Linux で利用できる Go のバージョンを確認してみます。
cdata # amazon-linux-extras list | grep golang 29 golang1.11=latest enabled \ cdata #
つぎに、Go をインストールします。
cdata # amazon-linux-extras install golang1.11 Installing golang Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-golang1.11 12 metadata files removed ・・・ ・・・
GOPATHを設定します。
~ # export GOPATH="$HOME/go" ~ # export PATH=$PATH:$GOPATH/bin ~ #
CData Salesforce ODBC Driver インストール&アクティベート
以下のように既にインストールされていることもありますが、最初に下記コマンドで依存関係をインストールしておきます。
~ # yum install glibc libstdc++ zlib libgcc Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Package glibc-2.26-48.amzn2.x86_64 already installed and latest version Package libstdc++-7.3.1-13.amzn2.x86_64 already installed and latest version Package zlib-1.2.7-18.amzn2.x86_64 already installed and latest version Package libgcc-7.3.1-13.amzn2.x86_64 already installed and latest version Nothing to do ~ #
この状態で Driver をインストールしようとすると、
Error:
Cannot find the 64bit iODBC or unixODBC Driver Manager installed on this machine.
のように iODBC か unixODBC がないと怒られますので、こちらも先にインストールします。
cdata # yum install unixODBC unixODBC-devel Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Resolving Dependencies --> Running transaction ・・・ Complete! cdata #
これで CData ODBC Driver のインストール準備が整いました。
それでは Amazon Linux 上に格納したrpmを実行してインストールしていきます。
cdata # rpm -ivh SalesforceODBCDriverforUnix.rpm
インストールが完了しましたら、install-license.x64 を実行してアクティベートを行います。製品版のアクティベートを行う場合は、半角スペース+プロダクトキーを末尾にセットして実行してください。
cdata # cd cdata-odbc-driver-for-salesforce/bin/ bin # ./install-license.x64 Name: miyamotok Email: miyamotok@cdata.com Installing TRIAL license... Downloading license data... Verifying license data... License installation succeeded. bin #
Linux DSN の設定
Driver のインストール&アクティベートが完了したので、次は DSN の設定をしていきます。
現在のDSN設定はこのようになっています。
cdata # odbcinst -j unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 cdata #
Driver 情報を登録します。
cdata # vim /etc/odbcinst.ini cdata #
odbcinst.ini には下記内容を追記します。
登録内容は下記ヘルプをご参照下さい。
https://cdn.cdata.com/help/RFG/jp/odbc/pg_linuxdatadirectmgr.htm
登録されているDriver リストを確認してみる。
cdata # odbcinst -q -d [PostgreSQL] [MySQL] [CData ODBC Driver for Salesforce] cdata #
次に DSN を定義します。
cdata # vim /etc/odbc.ini
DSN 設定が完了しましたら、isql コマンドでDSN 指定によるSalesforce への接続ができるか確認します。
bin # isql -v "CData Salesforce Source" +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select name from Lead limit 1 +--------------------------------------------------------------------------------------------------------------------------+ | name | +--------------------------------------------------------------------------------------------------------------------------+ | Boxer Bertha | +--------------------------------------------------------------------------------------------------------------------------+ SQLRowCount returns -1 1 rows fetched SQL>
isql より DSN の指定でSalesforce に接続できるのが確認できました。
Go からSalesforce のデータを取得
Go で ODBC を使用する場合は、GO ODBC というものをインストールしておく必要があります。※git がない場合は、併せてインストールしておきます
bin # go get github.com/alexbrainman/odbc bin #
これで Go から ODBC が利用できる準備が整いました。
今回は Salesforce に登録されている Lead オブジェクトから Name を 10 件取得してみます。
package main import ( "database/sql" "fmt" "log" _ "github.com/alexbrainman/odbc" ) func main() { // 接続 DSN の指定 conn, err := sql.Open("odbc", "DSN=CData Salesforce Source;") fmt.Println("Connect to CData ODBC Driver by Salesforce") if err != nil { log.Fatal(err) } if err := conn.Ping(); err != nil { log.Fatal(err) } // 切断 defer func() { err := conn.Close() fmt.Println("CONN CLOSE with", err) }() // select(複数行) rows, err := conn.Query(`select name from Lead limit 10`) if err != nil { log.Fatal(err) } for rows.Next() { var a string if err := rows.Scan(&a); err != nil { fmt.Println(err) } fmt.Println(a) } defer rows.Close() }
それでは実行してみます。
~ # go run odbc-sf-go.go Connect to CData ODBC Driver by Salesforce Boxer Bertha Cotton Phyllis Glimpse Jeff Braund Mike Feager Patricia Mcclure Brenda Maccleod Violet SnyderTest Kathy James Tom Brownell Shelly ~ #
このように Go から DSN 指定で Salesforce のデータを取得することができました。
おわりに
いかがでしたでしょうか。今回は Salesforce を使ってみましたが、Marketo や kintone などの ODBC Driver でも同じように利用可能です。 CData ODBC Driver の一覧は以下より確認できます。
CData Software Japan - ODBC Drivers
また、CData ODBC Driver は 30 日間のトライアル利用が可能です。気になるDriver がありましたら、是非お試しください!