Python
AWS
lambda

【AWS】Lambdaでpipしたいと思ったときにすべきこと

More than 3 years have passed since last update.


はじめに

 Lambda関数を Python で書いていると、Lambda関数内でサードパーティのライブラリを使いたくなるときがあります。しかし、Lambda では pip を使ってライブラリをインストールすることはできません。今回はそんな状況で役に立つ方法を紹介します。

 具体的には Lambda に用意されているファイルアップロード機能を使います。つまりファイルをアップロードするときにサードパーティのライブラリをアップロードすることで、Lambda関数内からライブラリを使えるようにします。

今回は Python の HTTPライブラリである requestsを使ってみようと思います。


関連記事

 Lambda関数の基本的な作成方法は以下の記事を参考にしてください。


手順


  1. ローカルで作業用ディレクトリを作成する

  2. ライブラリをインストールする

  3. 作業用ディレクトリ内で Lambda関数を書く

  4. Zip で圧縮する

  5. 圧縮したファイルをアップロードする

  6. 使用する関数の設定


作業用ディレクトリの作成

 まずは作業用ディレクトリを作成します。名前は workspace とでもしておきましょう。ディレクトリを作成したら、その中に移動します。

$ mkdir workspace

$ cd workspace


ライブラリのインストール

 workspace の中に移動したら、pip を使用してライブラリをインストールします。以下のようにします。

$ pip install requests -t .

tオプションをつけることで、ライブラリのインストール場所を指定することができます。今回はカレントディレクトリ(workspace)にインストールしています。


Lambda関数の作成

ライブラリをインストールしたら、次は Lambda関数を書きます。ファイル名は lambda_function.py、関数名は lambda_handler としておきます。ファイル名と関数名は後で使用するので覚えておきます。


lambda_function.py

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)をアップロードします。

スクリーンショット 2015-11-20 10.44.39.png


使用する関数の設定

 ファイルのアップロードが終了したら、Handlerに使用する関数を設定します。関数は「ファイル名.関数名」という形式で指定することができます。先ほど作成した Lambda関数のファイル名は、lambda_function、関数名はlambda_handlerであったので「lambda_function.lambda_handler」と指定します。

スクリーンショット 2015-11-20 10.51.24.png

以上で設定は完了です。「Next」ボタン、「Create function」ボタンを選択して関数を作成してください。


テスト

 テスト画面からテストをしてみてください。ステータスコードが返ってきていれば成功です。お疲れさまでした。

スクリーンショット 2015-11-20 10.57.20.png


参考

* Lambdaのドキュメント

* pipのオプション