ノーコードでクラウド上のデータとの連携を実現。
詳細はこちら →CData
こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。
Go はオープンソースのプログラミング言語で、高速かつ信頼性の高いソフトウェアを低コストで作成できるのが魅力です。Go とODBC Driver for AmazonAthena およびunixODBC を組み合わせて使うことで、Amazon Athena データにリアルタイムで 接続するアプリケーションを作成できます。本記事では、ODBC Driver for AmazonAthena のインストール、unixODBC Driver Manager への設定、そしてAmazon Athena に連携するGo アプリケーションの作成までを説明します。
CData ODBC ドライバは、以下のような特徴を持った製品です。
CData ODBC ドライバでは、1.データソースとしてAmazon Athena の接続を設定、2.Go 側でODBC Driver との接続を設定、という2つのステップだけでデータソースに接続できます。以下に具体的な設定手順を説明します。
CData ODBC Drivers はUbuntu、Debian、RHEL、CentOS、およびFedora など多くのRed Hat ベースおよびDebian ベースのシステムでサポートされています。 ほかにもいくつかのライブラリやパッケージのインストールが必要ですが、すでにデフォルトでインストールされている場合もあります。詳細はオンラインおよびインストールされるヘルプドキュメントの「はじめに」のセクションを参照してください。
ドライバーのインストール前にシステムに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
パッケージ形式でドライバーをダウンロードできます。.deb 形式もしくは、.rpm 形式で提供しています。 ファイルをダウンロードしたら、ターミナルからドライバーをインストールします。
ドライバーインストーラーはドライバーを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 AmazonAthena
...
$ odbcinst -q -s
CData AmazonAthena Source
...
unixODBC でCData ODBC Driver for AmazonAthena を使用するには、ドライバーがUTF-8 を使用するように設定する必要があります。それには、通常はインストールフォルダのlib フォルダ(/opt/cdata/cdata-odbc-driver-for-amazonathena)に入っているドライバーのINI ファイル(cdata.odbc.amazonathena.ini)を次のように編集する必要があります:
...
[Driver]
DriverManagerEncoding = UTF-16
ドライバーがインストールされると、システムDSN が事前定義されます。システムDSN はシステムデータソースファイル(/etc/odbc.ini)を編集して必要な接続プロパティを定義します。 ユーザー単位のDSN を作成することも可能で、その際には$HOME/.odbc.ini へのアクセスと変更は必要ありません
Amazon Athena リクエストの認証には、アカウントの管理のクレデンシャルか、IAM ユーザーのカスタムPermission を設定します。 AccessKey にAccess Key Id、SecretKey にはSecret Access Key を設定します。
AWS アカウントアドミニストレータとしてアクセスできる場合でも、AWS サービスへの接続にはIAM ユーザークレデンシャルを使用することが推奨されます。
IAM ユーザーのクレデンシャル取得は以下のとおり:
AWS ルートアカウントのクレデンシャル取得は以下のとおり:
EC2 インスタンスからCData 製品を使用していて、そのインスタンスにIAM ロールが割り当てられている場合は、認証にIAM ロールを使用できます。 これを行うには、UseEC2Roles をtrue に設定しAccessKey とSecretKey を空のままにします。 CData 製品は自動的にIAM ロールの認証情報を取得し、それらを使って認証します。
多くの場合、認証にはAWS ルートユーザーのダイレクトなセキュリティ認証情報ではなく、IAM ロールを使用することをお勧めします。 代わりにRoleARN を指定してAWS ロールを使用できます。これにより、CData 製品は指定されたロールの資格情報を取得しようと試みます。 (すでにEC2 インスタンスなどで接続されているのではなく)AWS に接続している場合は、役割を担うIAM ユーザーのAccessKeyと SecretKey を追加で指定する必要があります。AWS ルートユーザーのAccessKey およびSecretKey を指定する場合、 ロールは使用できません。
多要素認証を必要とするユーザーおよびロールには、MFASerialNumber およびMFAToken 接続プロパティを指定してください。 これにより、CData 製品は一時的な認証資格情報を取得するために、リクエストでMFA 認証情報を送信します。一時的な認証情報の有効期間 (デフォルトは3600秒)は、TemporaryTokenDuration プロパティを介して制御できます。
AccessKey とSecretKey プロパティに加え、Database、S3StagingDirectory、Region を設定します。Region をAmazon Athena データがホストされているリージョンに設定します。S3StagingDirectory をクエリの結果を格納したいS3内のフォルダに設定します。
接続にDatabase が設定されていない場合は、CData 製品はAmazon Athena に設定されているデフォルトデータベースに接続します。
[CData AmazonAthena Source]
Driver = CData ODBC Driver for AmazonAthena
Description = My Description
AccessKey = 'a123'
SecretKey = 's123'
Region = 'IRELAND'
Database = 'sampledb'
S3StagingDirectory = 's3://bucket/staging/'
これらのコンフィギュレーションファイルの使い方についての詳細は、インストールされるヘルプドキュメントを参照してください。
Driver Manager のインストール、DSN 設定を終えたら、Amazon Athena データ に連携するGo アプリケーションを作成します。 まずはODBC データベース向けのGo ドライバーをインストールします。いくつかのオプションがありますが、本記事ではhttps://github.com/alexbrainman/odbc のODBC ドライバーを使います。
Go のODBC ドライバーをインストールするには、GOPATH 環境変数を定義する必要があります:
export GOPATH=$HOME/golang/go
GOPATH が定義されたら、ODBC ドライバー向けのGo ドライバーをインストールすることが可能です:
$ go get github.com/alexbrainman/odbc
これでGo アプリケーションを作って実行する準備ができました。
このサンプルアプリケーションはAmazon Athena データ に対してシンプルなSQL SELECT クエリを発行し、結果を表示します。$GOPATH/src/cdata-odbc-athena ディレクトリを作成し、次のソースコードをコピーして新しいGo ファイルを作成します。
package main
import (
_ "github.com/alexbrainman/odbc"
"database/sql"
"log"
"fmt"
)
func main() {
db, err := sql.Open("odbc",
"DSN=CData AmazonAthena Source")
if err != nil {
log.Fatal(err)
}
var (
name string
totaldue string
)
rows, err := db.Query("SELECT Name, TotalDue FROM Customers WHERE CustomerId = ?", "12345")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
err := rows.Scan(&name, &totaldue)
if err != nil {
log.Fatal(err)
}
fmt.Println(name, totaldue)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
ターミナルでGo アプリケーションディレクトリに移動して、アプリケーションをビルドします。
$ go build
アプリケーションのビルド後、アプリケーションを実行してAmazon Athena のデータを表示することができます。
$ ./cdata-odbc-athena
このようにCData ODBC ドライバと併用することで、270を超えるSaaS、NoSQL データをGo から扱うことができます。30日の無償評価版が利用できますので、ぜひ自社で使っているクラウドサービスやNoSQL と合わせて活用してみてください。
日本のユーザー向けにCData ODBC ドライバは、UI の日本語化、ドキュメントの日本語化、日本語でのテクニカルサポートを提供しています。