#はじめに
SQL ServerのRDSインスタンスにlambdaから接続する方法です。
Webでは情報が欠落してたり、手順が複雑であったりするので、これをもう少し簡単にセットアップできる手順です。
#前提条件
lambdaファンクションは、pythonで書きます。
ライブラリには、pymssql を使います。
#レシピ
環境作り
1. LinuxのEC2インスタンスを作る
無料利用枠の分でOKです。
私が使ったのは下のインスタンスです。
Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type - ami-374db956
lambdaのベースはご存知の通り、Amazon Linux です。 EC2上で環境をセットアップして必要なファイルを収集します。
2. 必要なライブラリをインストールする
MSSQLには、つまるところODBCで接続します。
linuxでODBCを利用するために1.で作成したインスタンスに以下のライブラリをインストールします。
- unixODBC
- unixODBC-devel
- freetds
- freetds-devel
- pymssql
利用したいpymssqlがfreetdsに依存しています。
freetdsはunixODBCに依存してるので、これらが必要になります。
以下の要領でインストールします。
$> sudo yum install unixODBC, unixODBC-devel, freetds, freetds-devel
$> pip install pymssql
3. pymssql で接続を確認する
インストールが済んだので、一旦接続を確認します。
コンソールで確認する場合の例を示します。
$> python
$> import pymssql
$> server = "hostname of SQL Server(RDS)"
$> user = "your username"
$> password = "your password"
$> dbname = "your dbname"
$> connection = pymssql.connect(server, user, password, dbname)
$> cursor = cunnection.cursor()
$> cursor.execute("select @@VERSION")
$> cursor.fetchone()
接続したRDSのバージョンが表示されればOKです。
必要なファイルを抽出する
lambdaにアップロードするファイルを抽出します。
ディレクトリ 1
/usr/local/lib64/python2.7/site-packages
ファイル
_mssql.so pymssql-2.1.3.egg-info pymssql.so
pymssqlをビルドしたときにできるファイル群です。
ディレクトリ 2
/usr/lib64
ファイル 2
libsybdb.so.5.0.0
[重要] libsybdb.so.5.0.0は、libsybdb.so.5 にリネームします。
これらのファイルとlambdaファンクションをzipに固めて、lambdaにアップすればOKです。
#mac os(Sierra)のpymssql インストール(ローカル環境の構築)
brew install homebrew/versions/freetds091
pip install pymssql
ローカルの環境変数をwrapしてくれるので、pytestの時に重宝する。
pytest-env
これで、lambdaからMS SQLServerインスタンスへの接続も怖く無いですねw