LoginSignup
275

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-20

はじめに

 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のオプション

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
275