LoginSignup
107
80

More than 3 years have passed since last update.

AWS LambdaでPython外部ライブラリのLayerを作る前に

Last updated at Posted at 2020-02-24

結論

先人によって既に作られてないか、いったん確認してみましょう。
keithrozario/Klayers

使い方

なぜかAWS公式でLayerが提供されていないライブラリ、pandasを例として使います。
(Numpy + Scipyがあるなら、pandasもあってくれていい気がしています)

0. 前準備

image.png
AWS Lambdaにアクセスして、[関数の作成]を押し、適当な名前の関数を作ります。
「ランタイム」はPython3.8を選びます。「アクセス権限」はノータッチでOKです。

1. pandasをインポートし、テストを作成

import pandasを追加し、[保存]を押します。
image.png

[テスト]を押し、「イベント名」に適当な名前を入れます。
下のJSONは特にいじらなくてOKです。
image.png

この時点でもう一度[テスト]を押すと失敗します。pandasが無いよと言われています。
それはそうという感じですね。
image.png

2. pandasのLayerのARNを調べ、Layerを追加

必要な情報は以下の2つです。

  • Lambda実行環境のPythonのバージョン
  • Lambda関数が所属しているリージョン

いま、自分の実行環境はPython3.8でリージョンはus-east-1です。(リージョンが異なる場合は、適宜自分のものに読み替えてください。)
keithrozario/Klayersにアクセスし、[deployments] -> [python3.8] -> [arns] -> [us-east-1.csv]と辿ります。
pandas があるので、該当行のARNをコピーします。pandasのように、複数バージョンのLayerが提供されているライブラリもあります。
ここではpandas1.0.1を選択しました。ほかのバージョンでも特に問題ないです。
image.png

Lambdaに戻り、「Designer」の中の[Layers]を選択します。下に「Layers」というカードが出てくるので、[Layerの追加]を押します。
image.png
[レイヤーバージョン ARN を提供]を選択し、「レイヤーバージョン ARN」に先ほどのARNを貼り付けます。
image.png
[追加]を押して関数の設定ページに戻ります。
きちんと追加されていれば、「Layer」に反映されます。
image.png

[保存]を押します。

3. 確認

さて、これでレイヤーの追加ができたので、pandasを使えるようになっているはずです。
先ほど設定したテストを実行してみましょう。
image.png

pandasがインポートされている状態で、関数が正常終了したことが分かります。

Layerが用意されているライブラリ一覧

  • aiobotocore
  • aiohttp
  • ansible
  • aws-lambda-powertools (Python3.8 only)
  • arrow
  • aws-xray-sdk
  • bcrypt
  • beautifulsoup4
  • boltons
  • boto3
  • construct
  • dynamodb-encryption-sdk (Python3.8 only)
  • elasticsearch
  • envelopes
  • ffmpeg-python
  • flashtext
  • google-auth
  • google-auth-oauthlib
  • grpcio
  • gspread
  • idna
  • itsdangerous
  • kafka-python
  • nltk
  • numpy
  • opencv-python-headless
  • openpyxl
  • pandas
  • parliament (Python3.8 only)
  • Pillow
  • pulp
  • pycryptodome (Python3.8 only)
  • PyJWT
  • pymongo
  • PyMUPDF
  • PyMySQL
  • PyNaCl
  • pyOpenSSL
  • pyparsing
  • pyqldb
  • pytesseract
  • python-docx
  • python-Levenshtein
  • pytz
  • PyYAML
  • reportlab (Python3.8 only)
  • requests
  • simplejson
  • slackclient
  • spacy
  • SQLAlchemy
  • textdistance
  • tinydb
  • tldextract
  • twilio

終わりに

OS依存の関数があったりすると、Lambdaの実行環境と同じOSでzipを作らなければならないのでちょっと面倒です。
外部ライブラリをサクッとLambdaで使いたいだけなら、ありがたく先人が開いてくれた道を通らせていただきましょう。

Lambdaで使える他の言語で、類似のgithubリポジトリ等があれば教えていただければ幸いです。
(ざっと探しましたが見つかりませんでした)

107
80
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
107
80