Lambda(Python)でPandasを使ってる方は、多いのではないのでしょうか?
弊社では、サーバーレスがファーストチョイスとしてよく使われるため、Lambdaの出現頻度が高いです。
このPandasですが、Lambdaの世界(FaaS)で使う際の高速化の方法についてお教えてしようと思います。
結論
Lambda Layerとしてインポートするのではなく、Lambda Container(コンテナを利用したLambda関数)として利用する
なぜ?
そもそも、Lambdaにはコールドスタートとウォームスタートという概念があります。
コールドスタートの場合、Lambdaの実行環境を作成する必要があります。
このとき、Lambdaの内部の世界では、Pandasのインストールが行われます。
この作業が重く、数秒(2~5秒程度)かかります。
Web API として利用するには、少し重いです。
そのため、弊社ではよほどの複雑な処理系を書く場合を除き、Pandasの利用は推奨されていません。
続いて、コンテナイメージを利用したLambdaの場合です。
この場合、ECRにDockerfileをdeployして利用するのですが、なぜか?こちらのほうが早いようです(大体1~2sec)。
なぜLambda Containerのほうが早いのか?それはよくわかりませんが、弊社ではAWSエンタープライズサポートを導入しており、AWSのSAにも聞いてみた所、偶々というレベルの代物ではないらしいです。
仕組みはわからないけど、高速化の一案の紹介でした〜。
よかったら、いいね and シェアをお願いします!