はじめに
Lambda関数を Python で書いていると、Lambda関数内でサードパーティのライブラリを使いたくなるときがあります。しかし、Lambda では pip を使ってライブラリをインストールすることはできません。今回はそんな状況で役に立つ方法を紹介します。
具体的には Lambda に用意されているファイルアップロード機能を使います。つまりファイルをアップロードするときにサードパーティのライブラリをアップロードすることで、Lambda関数内からライブラリを使えるようにします。
今回は Python の HTTPライブラリである requestsを使ってみようと思います。
関連記事
Lambda関数の基本的な作成方法は以下の記事を参考にしてください。
手順
- ローカルで作業用ディレクトリを作成する
- ライブラリをインストールする
- 作業用ディレクトリ内で Lambda関数を書く
- Zip で圧縮する
- 圧縮したファイルをアップロードする
- 使用する関数の設定
作業用ディレクトリの作成
まずは作業用ディレクトリを作成します。名前は workspace とでもしておきましょう。ディレクトリを作成したら、その中に移動します。
$ mkdir workspace
$ cd workspace
ライブラリのインストール
workspace の中に移動したら、pip を使用してライブラリをインストールします。以下のようにします。
$ pip install requests -t .
tオプションをつけることで、ライブラリのインストール場所を指定することができます。今回はカレントディレクトリ(workspace)にインストールしています。
Lambda関数の作成
ライブラリをインストールしたら、次は Lambda関数を書きます。ファイル名は lambda_function.py、関数名は lambda_handler としておきます。ファイル名と関数名は後で使用するので覚えておきます。
import requests
def lambda_handler(event, context):
res = requests.get("http://www.yahoo.co.jp/")
return res.status_code
コードは上記のようになります。内容はYahooのトップページをGETしてステータスコードを返すという簡単なものです。ページを正常に取得できればステータスコードとして200番が返ります。
>>> from lambda_function import lambda_handler
>>> lambda_handler(None, None)
200
>>>
Zipで圧縮
zip コマンドを使って workspace 内のすべてのファイルを圧縮します。圧縮するファイル名はupload.zipとでもしておきます。
$ zip -r upload.zip *
ファイルのアップロード
zip コマンドで圧縮したら圧縮したファイルを Lambda にアップロードします。関数の設定画面中の 「Lambda function code」 という項目に、「Code entry type」があります。デフォルトでは「Edit code inline」となっていますが、ここを「Upload a .ZIP file」を選択します。選択すると「Upload」ボタンが現れるので、先ほど作成したファイル(upload.zip)をアップロードします。
使用する関数の設定
ファイルのアップロードが終了したら、Handlerに使用する関数を設定します。関数は「ファイル名.関数名」という形式で指定することができます。先ほど作成した Lambda関数のファイル名は、lambda_function、関数名はlambda_handlerであったので「lambda_function.lambda_handler」と指定します。
以上で設定は完了です。「Next」ボタン、「Create function」ボタンを選択して関数を作成してください。
テスト
テスト画面からテストをしてみてください。ステータスコードが返ってきていれば成功です。お疲れさまでした。