Help us understand the problem. What is going on with this article?

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

tis
創業40年超のSIerです。
https://www.tis.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした