CData ODBC Driver for IBM Cloud Object Storage とunixODBC を使って、IBM Cloud Object Storage に連携するGo アプリケーションを作成。
Go はオープンソースのプログラミング言語でLInux/Unix マシンに簡単にソフトウェアを構築することを可能にします。 Go とODBC Driver for IBM Cloud Object Storage およびunixODBC を組み合わせて使うことで、IBM Cloud Object Storage データにリアルタイム連携するアプリケーションを書くことができます。 本記事では、ODBC Driver for IBM Cloud Object Storage のインストール、unixODBC Driver Manager への設定、そしてIBM Cloud Object Storage に連携するGo アプリケーションの作成までを説明します。
Linux マシンで CData ODBC Drivers を使用する
CData ODBC Drivers はUbuntu、Debian、RHEL、CentOS、およびFedora など多くのRed Hat-based およびDebian-based のシステムでサポートされています。 ほかにもいくつかのライブラリやパッケージのインストールが必要ですが、すでにデフォルトでインストールされている場合もあります。詳細はオンラインおよびインストールされるヘルプドキュメントの「はじめに」のセクションを参照してください。
Driver Manager のインストール
ドライバーのインストール前にシステムにDriver Manager が入っているかを確認してください。本記事では無償のオープンソースDriver Manager であるunixODBC を使います
Ubuntu のようなDebian ベースのシステムでは、APT パッケージマネージャからunixODBC をインストールできます:
$ apt-get install unixODBC unixODBC-dev
Red Hat Linux ベースのシステムでは、yum もしくはdnf からunixODBC をインストールできます:
$ yum install unixODBC unixODBC-devel
unixODBC Driver Manager はDriver の情報をodbcinst.ini ファイルから読み、odbc.ini からからデータソースの情報を読みます。 次のコマンドをターミナルに入力して、コンフィギュレーションのロケーションを決めることができます:
$ odbcinst -j
コマンドのアウトプットでODBC データソースのコンフィギュレーションファイルと登録されたODBC Drver のロケーションを表示します。 ユーザーデータソースはodbc.ini ホームフォルダが位置するユーザーアカウントのみからアクセス可能です。システムデータソースはすべてのユーザーからアクセスできます。 このコマンドのアウトプット例は以下です:
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/myuser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
ドライバーのインストール
標準パッケージ形式でドライバーをダウンロードできます:Debian .deb package format もしくは、.rpm file format です。 ファイルをダウンロードしたら、ターミナルからドライバーをインストールします。
ドライバーインストーラーはドライバーをunixODBC に登録し、ODBC 接続をサポートするツールやアプリケーションから利用できるシステムDSN を作成します。T
Ubuntu のようなDebian ベースのシステムでは、sudo とともに次のコマンドを実行します:
$ dpkg -i /path/to/package.deb
.rpms をサポートするシステムでは、sudo とともに次のコマンドを実行します:
$ rpm -i /path/to/package.rpm
ドライバーのインストール後、unixODBC Driver Manager を使って、登録されたドライバーを表示し、データソースを定義することができます:
$ odbcinst -q -d
CData ODBC Driver for IBM Cloud Object Storage
...
定義されたData Source の表示
$ odbcinst -q -s
CData IBMCloudObjectStorage Source
...
unixODBC でCData ODBC Driver for IBM Cloud Object Storage を使用するには、ドライバーがUTF-8 を使用するように設定する必要があります。それには、通常はインストールフォルダのlib フォルダ(/opt/cdata/cdata-odbc-driver-for-ibmcloudobjectstorage)に入っているドライバーのINI ファイル(cdata.odbc.ibmcloudobjectstorage.ini)を次のように編集する必要があります:
cdata.odbc.ibmcloudobjectstorage.ini
...
[Driver]
DriverManagerEncoding = UTF-16
DSN の変更
ドライバーがインストールされると、システムDSN が事前定義されます。システムDSN はシステムデータソースファイル(/etc/odbc.ini)を編集して必要な接続プロパティを定義します。 ユーザー単位のDSN を作成することも可能で、その際には$HOME/.odbc.ini へのアクセスと変更は必要ではありません。
Register a New Instance of Cloud Object Storage
If you do not already have Cloud Object Storage in your IBM Cloud account, follow the procedure below to install an instance of SQL Query in your account:
- Log in to your IBM Cloud account.
- Navigate to the page, choose a name for your instance and click Create. You will be redirected to the instance of Cloud Object Storage you just created.
Connecting using OAuth Authentication
There are certain connection properties you need to set before you can connect. You can obtain these as follows:
API Key
To connect with IBM Cloud Object Storage, you need an API Key. You can obtain this as follows:
- Log in to your IBM Cloud account.
- Navigate to the Platform API Keys page.
- On the middle-right corner click "Create an IBM Cloud API Key" to create a new API Key.
- In the pop-up window, specify the API Key name and click "Create". Note the API Key as you can never access it again from the dashboard.
Cloud Object Storage CRN
If you have multiple accounts, you will need to specify the CloudObjectStorageCRN explicitly. To find the appropriate value, you can:
- Query the Services view. This will list your IBM Cloud Object Storage instances along with the CRN for each.
- Locate the CRN directly in IBM Cloud. To do so, navigate to your IBM Cloud Dashboard. In the Resource List, Under Storage, select your Cloud Object Storage resource to get its CRN.
Connecting to Data
You can now set the following to connect to data:
- InitiateOAuth: Set this to GETANDREFRESH. You can use InitiateOAuth to avoid repeating the OAuth exchange and manually setting the OAuthAccessToken.
- ApiKey: Set this to your API key which was noted during setup.
- CloudObjectStorageCRN (Optional): Set this to the cloud object storage CRN you want to work with. While the connector attempts to retrieve this automatically, specifying this explicitly is recommended if you have more than Cloud Object Storage account.
When you connect, the connector completes the OAuth process.
- Extracts the access token and authenticates requests.
- Saves OAuth values in OAuthSettingsLocation to be persisted across connections.
/etc/odbc.ini or $HOME/.odbc.ini
[CData IBMCloudObjectStorage Source]
Driver = CData ODBC Driver for IBM Cloud Object Storage
Description = My Description
ApiKey = myApiKey
CloudObjectStorageCRN = MyInstanceCRN
Region = myRegion
OAuthClientId = MyOAuthClientId
OAuthClientSecret = myOAuthClientSecret
これらのコンフィギュレーションファイルの使い方についての詳細は、インストールされるヘルプドキュメントを参照してください。
IBM Cloud Object Storage データに連携するGo アプリケーションサンプルの作成
Driver Manager のインストール、DSN 設定を終えたら、IBM Cloud Object Storage data に連携するGo アプリケーションを作成します。 まずはODBC データベース向けのGo ドライバーをインストールします。いくつかのオプションがありますが、本記事ではhttps://github.com/alexbrainman/odbc のODBC ドライバーを使います。
Linux へのODBC のインストール
Go のODBC ドライバーをインストールするには、GOPATH 環境変数を定義する必要があります:
export GOPATH=$HOME/golang/go
GOPATH が定義されたら、ODBC ドライバー向けのGo ドライバーをインストールすることが可能です:
$ go get github.com/alexbrainman/odbc
これでGo アプリケーションを作って実行する準備ができました。
Go アプリケーションサンプル
このサンプルアプリケーションはIBM Cloud Object Storage data に対してシンプルなSQL SELECT クエリを発行し、結果を表示します。$GOPATH/src/cdata-odbc-ibmcloudobjectstorage ディレクトリを作成し、次のソースコードをコピーして新しいGo ファイルを作成します。
cdata-odbc-ibmcloudobjectstorage.go
package main
import (
_ "github.com/alexbrainman/odbc"
"database/sql"
"log"
"fmt"
)
func main() {
db, err := sql.Open("odbc",
"DSN=CData IBMCloudObjectStorage Source")
if err != nil {
log.Fatal(err)
}
var (
key string
etag string
)
rows, err := db.Query("SELECT Key, Etag FROM Objects WHERE Bucket = ?", "someBucket")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
err := rows.Scan(&key, &etag)
if err != nil {
log.Fatal(err)
}
fmt.Println(key, etag)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
ターミナルで、Go アプリケーションディレクトリにナビゲートし、アプリケーションをビルドします:
$ go build
アプリケーションのビルド後、アプリケーションを実行し、IBM Cloud Object Storage のデータを表示することができます:
$ ./cdata-odbc-ibmcloudobjectstorage
これでIBM Cloud Object Storage と連携するシンプルなGo アプリケーションができました。ここに、より複雑なread 機能を使い慣れたSQL 文で足してみてください。