Snowflake ODBC ドライバーを Amazon Linux 2023 にインストールしてみた
はじめに
EC2 インスタンス(Amazon Linux 2023)に Snowflake の ODBC ドライバーをインストールする機会があったので本記事で手順をまとめてみます。
前提条件
以下の内容で検証しています。
- OS:Amazon Linux 2023
- ドライバー マネージャー:unixODBC
- RPM パッケージを使用してドライバーをインストール
- ODBC ドライバー バージョン:3.5.0
設定手順
手順は以下に記載があるのでこちらに沿って進めます。
パッケージのアップデート
はじめに現在のシステムのパッケージを最新バージョンに更新しておきます。
#パッケージのアップデート
sudo dnf upgrade --releasever=latest
#アップデート後の更新確認
sudo dnf check-upgrade --releasever=latest
ドライバー マネージャーのインストール
以下のコマンドで unixODBC をインストールします。
# unixODBC をインストール
$ sudo dnf install -y unixODBC
Last metadata expiration check: 0:18:43 ago on Wed Dec 18 04:58:57 2024.
Dependencies resolved.
=============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================================================================
Installing:
unixODBC x86_64 2.3.9-3.amzn2023.0.3 amazonlinux 460 k
Installing dependencies:
libtool-ltdl x86_64 2.4.7-1.amzn2023.0.3 amazonlinux 38 k
Transaction Summary
=============================================================================================================================================================================================================================================
Install 2 Packages
Total download size: 498 k
Installed size: 1.5 M
Downloading Packages:
(1/2): libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64.rpm 656 kB/s | 38 kB 00:00
(2/2): unixODBC-2.3.9-3.amzn2023.0.3.x86_64.rpm 4.6 MB/s | 460 kB 00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 3.3 MB/s | 498 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 1/2
Installing : unixODBC-2.3.9-3.amzn2023.0.3.x86_64 2/2
Running scriptlet: unixODBC-2.3.9-3.amzn2023.0.3.x86_64 2/2
Verifying : libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 1/2
Verifying : unixODBC-2.3.9-3.amzn2023.0.3.x86_64 2/2
Installed:
libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 unixODBC-2.3.9-3.amzn2023.0.3.x86_64
Complete!
# 確認
$ odbcinst -j
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/newuser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
パッケージ署名の確認
ドライバー バージョンが 3.5.0 以上なので、以下を実行します。
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 5A125630709DD64B
gpg: directory '/home/newuser/.gnupg' created
gpg: keybox '/home/newuser/.gnupg/pubring.kbx' created
gpg: keyserver receive failed: No dirmngr
gpg
コマンドを実行するために必要なdirmngr
がインストールされていないと表示されたので、ここでは以下を実行し Amazon Linux 2023 にデフォルトでインストールされているgnupg2-minimal
をgnupg2-full
に置き換えます。
$ sudo dnf swap gnupg2-minimal gnupg2-full
Last metadata expiration check: 0:21:43 ago on Wed Dec 18 04:58:57 2024.
Dependencies resolved.
=============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================================================================
Installing:
gnupg2 x86_64 2.3.7-1.amzn2023.0.4 amazonlinux 2.5 M
Installing dependencies:
duktape x86_64 2.7.0-21.amzn2023 amazonlinux 171 k
libksba x86_64 1.6.3-1.amzn2023.0.2 amazonlinux 159 k
libsecret x86_64 0.20.4-2.amzn2023.0.2 amazonlinux 158 k
libusbx x86_64 1.0.24-2.amzn2023.0.2 amazonlinux 73 k
pcsc-lite x86_64 1.9.1-1.amzn2023.0.3 amazonlinux 92 k
pcsc-lite-libs x86_64 1.9.1-1.amzn2023.0.3 amazonlinux 28 k
polkit x86_64 125-1.amzn2023.0.1 amazonlinux 153 k
polkit-libs x86_64 125-1.amzn2023.0.1 amazonlinux 72 k
Installing weak dependencies:
gnupg2-smime x86_64 2.3.7-1.amzn2023.0.4 amazonlinux 249 k
pcsc-lite-ccid x86_64 1.4.34-1.amzn2023.0.3 amazonlinux 300 k
pinentry x86_64 1.2.0-1.amzn2023.0.5 amazonlinux 99 k
polkit-pkla-compat x86_64 0.1-19.amzn2023.0.2 amazonlinux 45 k
Removing:
gnupg2-minimal x86_64 2.3.7-1.amzn2023.0.4 @System 917 k
Transaction Summary
=============================================================================================================================================================================================================================================
Install 13 Packages
Remove 1 Package
Total download size: 4.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/13): duktape-2.7.0-21.amzn2023.x86_64.rpm 2.5 MB/s | 171 kB 00:00
(2/13): libksba-1.6.3-1.amzn2023.0.2.x86_64.rpm 4.4 MB/s | 159 kB 00:00
(3/13): gnupg2-smime-2.3.7-1.amzn2023.0.4.x86_64.rpm 2.1 MB/s | 249 kB 00:00
(4/13): libusbx-1.0.24-2.amzn2023.0.2.x86_64.rpm 3.0 MB/s | 73 kB 00:00
(5/13): libsecret-0.20.4-2.amzn2023.0.2.x86_64.rpm 2.6 MB/s | 158 kB 00:00
(6/13): gnupg2-2.3.7-1.amzn2023.0.4.x86_64.rpm 13 MB/s | 2.5 MB 00:00
(7/13): pcsc-lite-1.9.1-1.amzn2023.0.3.x86_64.rpm 1.5 MB/s | 92 kB 00:00
(8/13): pcsc-lite-ccid-1.4.34-1.amzn2023.0.3.x86_64.rpm 6.7 MB/s | 300 kB 00:00
(9/13): pcsc-lite-libs-1.9.1-1.amzn2023.0.3.x86_64.rpm 1.1 MB/s | 28 kB 00:00
(10/13): pinentry-1.2.0-1.amzn2023.0.5.x86_64.rpm 2.9 MB/s | 99 kB 00:00
(11/13): polkit-pkla-compat-0.1-19.amzn2023.0.2.x86_64.rpm 2.2 MB/s | 45 kB 00:00
(12/13): polkit-125-1.amzn2023.0.1.x86_64.rpm 1.7 MB/s | 153 kB 00:00
(13/13): polkit-libs-125-1.amzn2023.0.1.x86_64.rpm 893 kB/s | 72 kB 00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 12 MB/s | 4.1 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : polkit-libs-125-1.amzn2023.0.1.x86_64 1/14
Installing : libksba-1.6.3-1.amzn2023.0.2.x86_64 2/14
Installing : pcsc-lite-libs-1.9.1-1.amzn2023.0.3.x86_64 3/14
Installing : libusbx-1.0.24-2.amzn2023.0.2.x86_64 4/14
Installing : libsecret-0.20.4-2.amzn2023.0.2.x86_64 5/14
Installing : pinentry-1.2.0-1.amzn2023.0.5.x86_64 6/14
Installing : duktape-2.7.0-21.amzn2023.x86_64 7/14
Running scriptlet: polkit-125-1.amzn2023.0.1.x86_64 8/14
Installing : polkit-125-1.amzn2023.0.1.x86_64 8/14
Running scriptlet: polkit-125-1.amzn2023.0.1.x86_64 8/14
Installing : polkit-pkla-compat-0.1-19.amzn2023.0.2.x86_64 9/14
Installing : pcsc-lite-ccid-1.4.34-1.amzn2023.0.3.x86_64 10/14
Running scriptlet: pcsc-lite-ccid-1.4.34-1.amzn2023.0.3.x86_64 10/14
Installing : pcsc-lite-1.9.1-1.amzn2023.0.3.x86_64 11/14
Running scriptlet: pcsc-lite-1.9.1-1.amzn2023.0.3.x86_64 11/14
Created symlink /etc/systemd/system/sockets.target.wants/pcscd.socket → /usr/lib/systemd/system/pcscd.socket.
Installing : gnupg2-smime-2.3.7-1.amzn2023.0.4.x86_64 12/14
Installing : gnupg2-2.3.7-1.amzn2023.0.4.x86_64 13/14
Erasing : gnupg2-minimal-2.3.7-1.amzn2023.0.4.x86_64 14/14
Running scriptlet: gnupg2-minimal-2.3.7-1.amzn2023.0.4.x86_64 14/14
Verifying : duktape-2.7.0-21.amzn2023.x86_64 1/14
Verifying : gnupg2-2.3.7-1.amzn2023.0.4.x86_64 2/14
Verifying : gnupg2-smime-2.3.7-1.amzn2023.0.4.x86_64 3/14
Verifying : libksba-1.6.3-1.amzn2023.0.2.x86_64 4/14
Verifying : libsecret-0.20.4-2.amzn2023.0.2.x86_64 5/14
Verifying : libusbx-1.0.24-2.amzn2023.0.2.x86_64 6/14
Verifying : pcsc-lite-1.9.1-1.amzn2023.0.3.x86_64 7/14
Verifying : pcsc-lite-ccid-1.4.34-1.amzn2023.0.3.x86_64 8/14
Verifying : pcsc-lite-libs-1.9.1-1.amzn2023.0.3.x86_64 9/14
Verifying : pinentry-1.2.0-1.amzn2023.0.5.x86_64 10/14
Verifying : polkit-125-1.amzn2023.0.1.x86_64 11/14
Verifying : polkit-libs-125-1.amzn2023.0.1.x86_64 12/14
Verifying : polkit-pkla-compat-0.1-19.amzn2023.0.2.x86_64 13/14
Verifying : gnupg2-minimal-2.3.7-1.amzn2023.0.4.x86_64 14/14
Installed:
duktape-2.7.0-21.amzn2023.x86_64 gnupg2-2.3.7-1.amzn2023.0.4.x86_64 gnupg2-smime-2.3.7-1.amzn2023.0.4.x86_64 libksba-1.6.3-1.amzn2023.0.2.x86_64 libsecret-0.20.4-2.amzn2023.0.2.x86_64
libusbx-1.0.24-2.amzn2023.0.2.x86_64 pcsc-lite-1.9.1-1.amzn2023.0.3.x86_64 pcsc-lite-ccid-1.4.34-1.amzn2023.0.3.x86_64 pcsc-lite-libs-1.9.1-1.amzn2023.0.3.x86_64 pinentry-1.2.0-1.amzn2023.0.5.x86_64
polkit-125-1.amzn2023.0.1.x86_64 polkit-libs-125-1.amzn2023.0.1.x86_64 polkit-pkla-compat-0.1-19.amzn2023.0.2.x86_64
Removed:
gnupg2-minimal-2.3.7-1.amzn2023.0.4.x86_64
Complete!
その後、再度以下を実行しました。
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 5A125630709DD64B
gpg: /home/newuser/.gnupg/trustdb.gpg: trustdb created
gpg: key 5A125630709DD64B: public key "Snowflake Computing (Snowflake Computing Gpg key) <snowflake_gpg@snowflake.net>" imported
gpg: Total number processed: 1
gpg: imported: 1
ドライバ パッケージをダウンロード
以下のコマンドで Snowflake ODBC ドライバ パッケージをダウンロードします。
wget https://sfc-repo.snowflakecomputing.com/odbc/linux/3.5.0/snowflake-odbc-3.5.0.x86_64.rpm
RPM ドライバー パッケージの署名を確認します。
# キーが正常にインポートされたことを確認
$ gpg --list-keys
/home/newuser/.gnupg/pubring.kbx
--------------------------------
pub rsa4096 2024-09-16 [SC] [expires: 2026-09-16]
F46822FE012CC3FF371724F75A125630709DD64B
uid [ unknown] Snowflake Computing (Snowflake Computing Gpg key) <snowflake_gpg@snowflake.net>
sub rsa4096 2024-09-16 [E] [expires: 2026-09-16]
# 署名を確認
$ rpm -K snowflake-odbc-3.5.0.x86_64.rpm
snowflake-odbc-3.5.0.x86_64.rpm: digests SIGNATURES NOT OK
ドキュメントにもあるように、rpm
インポートした GPG キーがない場合、上記の出力となるので、ここでは続けて以下を実行しました。
# GPGキーをエクスポート
$ gpg --export -a 5A125630709DD64B > odbc-signing-key.asc
# GPGキーをRPMにインポート
$ sudo rpm --import odbc-signing-key.asc
# RPMファイルの署名を再度検証
$ rpm -K snowflake-odbc-3.5.0.x86_64.rpm
snowflake-odbc-3.5.0.x86_64.rpm: digests signatures OK
ODBCドライバーをインストール
続けて、以下のコマンドでパッケージをインストールします。
$ sudo dnf install -y snowflake-odbc-3.5.0.x86_64.rpm
Last metadata expiration check: 0:26:56 ago on Wed Dec 18 04:58:57 2024.
Dependencies resolved.
=============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================================================================
Installing:
snowflake-odbc x86_64 3.5.0-1 @commandline 62 M
Transaction Summary
=============================================================================================================================================================================================================================================
Install 1 Package
Total size: 62 M
Installed size: 208 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : snowflake-odbc-3.5.0-1.x86_64 1/1
Running scriptlet: snowflake-odbc-3.5.0-1.x86_64 1/1
[WARN] SF_ACCOUNT is not set, please manually update the odbc.ini file after installation
Adding driver info to odbcinst.ini...
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
Adding connect info to odbc.ini...
odbcinst: Sections and Entries from stdin have been added to ODBC.INI
Adding Simba Snowflake ini...
Creating a symlink /usr/lib64/libodbccr.so.1...
Verifying : snowflake-odbc-3.5.0-1.x86_64 1/1
Installed:
snowflake-odbc-3.5.0-1.x86_64
Complete!
ODBCドライバーを構成する
ドライバーをインストール後、後述する手順で構成を行います。この際、構成に必要な各種パスの情報は以下です。
- インストール ディレクトリ:
/usr/lib64/snowflake/odbc/
simba.snowflake.ini
:<path>/lib/simba.snowflake.ini
odbcinst.ini
:/etc/odbcinst.ini
odbc.ini
:/etc/odbc.ini
※<path>:/usr/lib64/snowflake/odbc
simba.snowflake.ini ファイルを変更
simba.snowflake.ini ファイルにドキュメント記載のエントリを追加します。
# ファイルの内容を確認
$ cat /usr/lib64/snowflake/odbc/lib/simba.snowflake.ini
[Driver]
DriverManagerEncoding=UTF-16
DriverLocale=en-US
ErrorMessagesPath=/usr/lib64/snowflake/odbc/ErrorMessages
LogNamespace=
LogPath=/tmp
ODBCInstLib=libodbcinst.so
CURLVerboseMode=false
#LogLevel=6
CABundleFile=/usr/lib64/snowflake/odbc/lib/cacert.pem
ドキュメントを参考に、ここでは以下の内容を追記しました。
ODBCInstLib=/usr/lib64/libodbcinst.so.2
ANSIENCODING=UTF-8
odbcinst.ini ファイルにエントリを変更
こちらはインストールとあわせて[SnowflakeDSIIDriver]
の項目がすでに追加されていました。
# ファイルの内容を確認
$ cat /etc/odbcinst.ini
[PostgreSQL]
Description=ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1
[MySQL]
Description=ODBC for MySQL 8
Driver=/usr/lib/unixODBC/libmyodbc8.so
Driver64=/usr/lib64/unixODBC/libmyodbc8.so
FileUsage=1
[MySQL-5]
Description=ODBC for MySQL 5
Driver=/usr/lib/libmyodbc5.so
Driver64=/usr/lib64/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
[FreeTDS]
Description=Free Sybase & MS SQL Driver
Driver=/usr/lib/libtdsodbc.so
Setup=/usr/lib/libtdsS.so
Driver64=/usr/lib64/libtdsodbc.so
Setup64=/usr/lib64/libtdsS.so
Port=1433
[MariaDB]
Description=ODBC for MariaDB
Driver=/usr/lib/libmaodbc.so
Driver64=/usr/lib64/libmaodbc.so
FileUsage=1
[SnowflakeDSIIDriver]
APILevel=1
ConnectFunctions=YYY
Description=Snowflake DSII
Driver=/usr/lib64/snowflake/odbc/lib/libSnowflake.so
DriverODBCVer=03.52
SQLLevel=1
UsageCount=1
DSN を設定
odbc.ini
ファイルを編集し、DSN を追加します。内容を確認すると、デフォルトで [snowflake]
の名称で DSN が追加されていました。
$ cat /etc/odbc.ini
[snowflake]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=SF_ACCOUNT.snowflakecomputing.com
PORT=443
SSL=on
ACCOUNT=SF_ACCOUNT
ここでは検証なので、既存の DSN を編集しSF_ACCOUNT
を実際の Snowflake アカウントの接続 URL に変更しました(PrivateLink 用に構成していたのでその設定としています)。
# ファイルを編集
$ sudo vi /etc/odbc.ini
# 変更内容を確認
$ cat /etc/odbc.ini
[snowflake]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=<アカウント識別子>.us-east-1.privatelink.snowflakecomputing.com
PORT=443
SSL=on
ACCOUNT=<アカウント識別子>.us-east-1.privatelink
接続テスト
DSN を追加後、ここでは簡単にユーザー名・パスワードを環境変数として設定し、isql
で、Snowflake に接続し、SQL クエリを実行してみます。
# 環境変数を設定
export SNOWSQL_USER="<ユーザー名>"
export SNOWSQL_PWD="<パスワード>"
# Snowflakeに接続
isql -v snowflake $SNOWSQL_USER $SNOWSQL_PWD
SQL クエリを実行できました。
SQL> use warehouse compute_wh;
SQLRowCount returns -1
SQL> SELECT * FROM sample_db.public.ts1;
+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+
| ID | NAME | CREATED_AT |
+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+
| 1 | Alice | 2024-12-13 19:31:27.182000000|
| 2 | Bob | 2024-12-13 19:31:27.182000000|
| 3 | Charlie | 2024-12-13 19:31:27.182000000|
| 4 | Diana | 2024-12-13 19:31:27.182000000|
| 5 | Tom | 2024-12-13 19:46:27.598000000|
| 6 | Sam | 2024-12-13 20:03:05.894000000|
+-----------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+
SQLRowCount returns 6
6 rows fetched
さいごに
Amazon Linux 2023 に Snowflake ODBC ドライバーをインストールし、Snowflake に接続してみました。
こちらの内容が何かの参考になれば幸いです。