CData Software Blog

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

AmazonLinux 上の Golangで CData Salesforce ODBC Driver を使う方法

f:id:sennanvolar44:20210726183327p:plain こんにちは、テクニカルサポートの宮本です。

今回は Amazon Linux 上の Go から、 CData Salesforce ODBC Driver を使って、Salesforce からデータを取得する方法をご紹介します。

手順

それでは Salesforce ODBC Driver をインストールしていきますが、本記事では既にEC2 で Amazon LinuxVM が作成されていることとして進んでいきます。

CData Salesforce ODBC Driver ダウンロード

まずは以下リンクより CData Salesforce ODBC Driver をダウンロードします。
https://www.cdata.com/jp/drivers/salesforce/odbc/ f:id:sennanvolar44:20210726155423p:plain

Unix タブを選択してから評価版をダウンロードします。 f:id:sennanvolar44:20210726160009p:plain

ダウンロードが完了したら、対象の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 には下記内容を追記します。
f:id:sennanvolar44:20210726170426p:plain

登録内容は下記ヘルプをご参照下さい。
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

f:id:sennanvolar44:20210726171430p:plain

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 がありましたら、是非お試しください!