4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS Lambdaビルダー

Posted at

Box-SDK(*1)をLambdaで使おうとした際に色々ハマったのでメモ。

pipインストール時のプラットフォーム

ローカル環境(Mac)でテストができたので、いざデプロイ!
Serverless Frameworkは早速Layerに対応していたので、SDK部分をLayerに切り出しも簡単:)

ところが。。。

[ERROR] ModuleNotFoundError: No module named '_cffi_backend'

モジュールがないと言われる。

sdkのリポジトリ眺めてみると、環境依存がちらほら見つかる。
MacとLambda環境の差異と見受けられる。

ググるとEC2でビルドする手順が多く引っかかったが、今はLambdaのDockerイメージ(*2)が公開されているので、そっちを使う。

docker内での圧縮コマンド

Lambdaのdockerイメージの使い方についてもググると結構見つかった。
その中から、以下のDockerファイルを作ってビルド&デプロイ!

FROM lambci/lambda:build-python3.6
  
ENV AWS_DEFAULT_REGION us-east-1

ADD . .

CMD pip3 install -r requirements.txt -t /var/task && \
  zip -9 deploy_package.zip lambda_function.py && \
  zip -r9 deploy_package.zip *

また実行エラー。。。

lambda libffi-d78936b1.so.6.0.4: cannot open shared object file: No such file or directory: ImportError

ググってみると、情報 (*3)が見つかった。
"*" でなく、"."を使えとのこと。
よくみると、本家サイト(*2)のサンプルも、"."になっていた。本家サイトの熟読は急がば回れ。

最終行の"*" を"."に変更して再ビルド&デプロイ!

成功 :)

ついでにDockerHubにアップしておいた。
https://hub.docker.com/r/pict3/aws-lambda-builder

以下のファイルを用意して、

lambda_function.py
Lambdaコード
requirements.txt
pipインストール対象

その後、以下のコマンドを叩けばパッケージが生成される。

$ docker run -v "$PWD":/var/task pict3/aws-lambda-builder

参考)
(*1) https://github.com/box/box-python-sdk
(*2) https://github.com/lambci/docker-lambda
(*3) https://github.com/snowflakedb/examples/issues/4

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?