LoginSignup
2
1

More than 1 year has passed since last update.

AWS Lambda for Python 用に cryptography を同梱する

Last updated at Posted at 2022-11-27

はじめに

Lambda 関数デプロイ時に JWT デコードに利用する cryptography を同梱してデプロイしたかった。
そのため、cryptography を含む AWS Lambda Layer を作成 or 再利用しようとしたのだが、Lambda@Edge 用の関数は Layer を利用できないという制約がある

最初は local で pip でインストールしようとしたのだが、 cryptography のライブラリ自体が pip でインストールする時に環境依存のバイナリを入れてくるため、pip -t . でインストールしたモジュールをアップロードしても、基本的には動作しない。

そのための解消方法をメモする。

が、正直、原始的なやり方であり、かなり限定的なユースケースでしかないので、代用が可能ならそちらを利用した方が良いので本当に最終手段として。

方法

1. AWS Lambda で利用されている Python 特定バージョンの Docker Image を選択する。

2. 以下の Dockerfile をビルドして、必要なライブラリをインストール

FROM public.ecr.aws/lambda/python:3.9
RUN mkdir -p /opt/export
RUN pip3 install pyjwt -t /opt/export
RUN pip3 install cryptography -t /opt/export

3. インストールしたファイル一式を持ち出して zip にまとめ、Lambda にアップロードする

オチ

よくよく仕様を見ると、Lambda@Edge の最大コードサイズは 1MB であった。
ので、cryptography を使うような python コードは実質 Lambda@Edge では利用できないと考えた方がよさそう。

Cognito を使う場合は AWS が提供している aws-jwt-verify を使うのがよさそう。

参考

2
1
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
2
1