LoginSignup
7
5

More than 5 years have passed since last update.

AWS LambdaでSQLServerに接続するための環境を作ってみる

Posted at

AWS LambdaでRDBMSに繋ぐのはアンチパターンなんですが、頻度の少ない定期バッチ処理やパフォーマンスを必要としない非同期処理ではそのデメリットを受けません。
LambdaからSQLServerに接続する情報は割と少なく、かつ、最新の情報が少ないと思ったため書いてみました。

ほしいもの

  • SQLServerに接続に接続できるLambda環境

この場合、SQLServerはRDSでもそうでなくてもどちらでも構わないとします。

特徴

  • Python環境でLambdaを作ります(2系でも3系でもOK)
  • Dockerは利用しません
  • Microsoft SQLServer 2017まで対応(Microsoft ODBC Driver 17 for SQL Server)
  • freetdsは不要です。freetdsで同様な環境を作るのならこちらに記事がありました。

構築に必要な環境

  • MacOS High Sierra
  • Virtualbox
  • Vagrant
  • Homebrew
  • pyenv

Lambda環境の構築に必要なものを入手します

入手するもの

  1. Microsoft ODBC Driver
  2. pyodbc共有ライブラリ

1. Microsoft ODBC Driver

LambdaはAmazonLinux(CentOSベース)で動作するため、必要なライブラリはAmazonLinux上で入手します。

VagrantでAmazon Linuxを起動する

参考サイト:https://techblog.recochoku.jp/5048

  • Mac環境下で任意のディレクトリを作成します。
mkdir ~/amznlinux
cd ~/amznlinux
  • AmazonLinuxのboxをダウンロードしてVMを起動します。
vagrant init mvbcoding/awslinux
vagrant up
  • VMにSSHでログインします。
vagrant ssh
  • パッケージを最新にします。
sudo yum update
  • Microsoft ODBC Driverを入手します。

参考サイト: https://docs.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

AmazonLinuxの標準パッケージのunixODBCのドライバのバージョンは古く、MicrosoftのODBCドライバのインストールができません。
バージョン2.3以上であればビルドできます。

# root
sudo su
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo

# ユーザーで実行
exit

# ※公式にはありません。
# AmazonLinuxのODBCドライバが古くてmsodbcsqlのインストールに失敗しますので、下記で新しいunixODBCを手に入れてください。

sudo yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/unixODBC-2.3.1-11.el7.x86_64.rpm
sudo yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/unixODBC-devel-2.3.1-11.el7.x86_64.rpm

sudo yum install -y unixODBC unixODBC-devel
sudo ACCEPT_EULA=Y yum install -y msodbcsql17
  • インストールしたパッケージをすべてMacOSXのホスト側にコピーする
# ファイルのコピー先を作成します
mkdir /vagrant/unixODBC
mkdir /vagrant/unixODBC-devel
mkdir /vagrant/msodbcsql

# 取得したパッケージをコピー
rpm -ql unixODBC | xargs -i cp -r -p {} /vagrant/unixODBC
rpm -ql unixODBC-devel | xargs -i cp -r -p {} /vagrant/unixODBC-devel
rpm -ql msodbcsql | xargs -i cp -r -p {} /vagrant/msodbcsql

これでAmazonLinuxの役割は終わりです。

2. pyodbc共有ライブラリ

参考サイト: https://github.com/Miserlou/lambda-packages/tree/master/lambda_packages/pyodbc

上記の参考サイトから取得してください。必要なのは pyodbc.soのみです。(libodbc.so.2は不要)

Python Lambdaのローカル環境作成

参考サイト: https://www.reddit.com/r/aws/comments/8yanz1/aws_lambda_python_36_pyodbc_and_sql_server_driver/

先程ダウンロードしたファイルを下記のようになるようにLambda環境を構築します。

|--(handlerのあるpythonコード)
|--pyodbc.so
|--odbcinst.ini
|--bin (unixODBCで取得したファイル)
|--include (unixODBC-develで取得したファイル)
|--lib (unixODBCで取得したファイル)
|--msodbcsql
   |--etc(msodbcsql17で取得したファイル)
   |--include(msodbcsql17で取得したファイル)
   |--lib64 (msodbcsql17で取得したファイル)
   |--share (msodbcsql17で取得したファイル)

lambda-uploaderでLambdaでデプロイを行います。
pyodbcをrequirements.txtに取り込み、msodbcsql17で取得したライブラリをDriverとして取り込むことで、SQLServerに接続することができます。

※ここのローカル環境の作成の詳細は、また後日書きます。

参考

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5