67
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambda の Python で pandas や requests を使うのに、Lambda Layer を自作する必要はない - AWS SDK for pandas を活用しよう

Last updated at Posted at 2025-02-24

概要

  • AWS Lambda では、マネージドに提供されている AWS レイヤーがあり、自分でビルドすることなく簡単に利用できる
  • AWS SDK for pandas のマネージドな Lambda Leyer には、 pandas / numpy といったデータ処理系のモジュールや aiohttp / requests といった HTTP リクエスト用モジュールなど、様々なモジュールがバンドルされている (一覧は後述)
  • AWS Lambda でこれらのモジュールを使用する方法として、多くの記事では Lambda Layer を自作する方法や第三者の公開するレイヤーを利用する方法が記載されているが、上述の Lambda Layer でより簡単かつ安全に実現できる

AWS SDK for pandas とは

AWS SDK for pandas (旧名称: AWS Data Wrangler)は、AWS が開発・公開しているオープンソースの Python ライブラリです。 AWS のデータやデータ分析サービスと pandas の DataFrame とのやり取りを容易にする目的で設計されており、例えば「S3 のデータを直接 pandas の DataFrame として読み書きする」などの操作を最小限のコードで実現できます。

本記事では SDK の詳細には触れません。公式ドキュメント や、下記動画のちょっぴり Deep Dive (資料) が参考になりますので、そちらをご参照ください。

同 SDK を Python 環境にインストールすれば、当該 SDK のモジュールを使うことはもちろん、このモジュールが依存する各種ライブラリも同様に直接利用できます。

そして、この SDK は、AWS Lambda レイヤーのうち、AWS がマネージドに提供する AWS レイヤーとしてもラインナップされています (公式ドキュメントはこちら)。そのため、自分でレイヤーをパッケージングすることなく Lambda 関数に追加できます。

やってみる

Lambda 関数の作成と、Layer 追加前の挙動確認

東京リージョンで、Lambda 関数を作成してみます。

image.png

まず、何もレイヤーを追加しない状態で pandas を import して、失敗することを確認してみましょう。最初に作成されるコードに、pandas の import とバージョン表示の 2 行を追加してみます。

image.png

この状態で Lambda 関数の「テスト」タブからテスト実行してみると、pandas が見つからずにエラーになることが確認できます。

image.png

AWS SDK for pandas の Lambda Layer 追加

では、AWS SDK for pandas の Lambda Layer を追加してみます。Lambda の「コード」タブに戻り、最下部のレイヤーのセクションで「レイヤーの追加」をクリックします。

image.png

追加するレイヤーとして「AWS レイヤー」> 「AWSSDKPandas-Python313」を選択し、バージョンも選択します。「追加」をクリックすると追加完了します。

image.png

再び Lambda 関数の「テスト」タブからテスト実行してみると、pandas の import に成功し、pandas が利用可能であることがわかります。

image.png

レイヤーを自作するよりもずっと簡単ですし、AWS レイヤーとして提供されているため安心s利用できますね!

参考:含まれているモジュール一覧

2025/02/24 時点で、Python 3.13 版の AWS SDK for Pandas 3.11.0 に含まれるモジュールの一覧は以下の通りです。単にデータ処理系のモジュールだけでなく、 aiohttp や requests といった HTTP リクエスト系モジュールや、スクレイピングモジュールの beautifulsoup4 なども含まれているため、データ処理以外のユースケースでも活用できるかなと思います。

module_name version
Events 0.5
PyMySQL 1.1.1
aenum 3.1.15
aiohappyeyeballs 2.4.4
aiohttp 3.11.11
aiosignal 1.3.2
asn1crypto 1.5.1
async-timeout 4.0.3
attrs 24.3.0
autocommand 2.2.2
awswrangler 3.11.0
backports.tarfile 1.2.0
beautifulsoup4 4.12.3
certifi 2024.12.14
charset-normalizer 3.4.1
et_xmlfile 2.0.0
frozenlist 1.5.0
gremlinpython 3.7.3
idna 3.10
importlib_metadata 8.0.0
inflect 7.3.1
isodate 0.7.2
jaraco.collections 5.1.0
jaraco.context 5.3.0
jaraco.functools 4.0.1
jaraco.text 3.12.1
jmespath 1.0.1
jsonpath-ng 1.7.0
lxml 5.3.0
more-itertools 10.3.0
multidict 6.1.0
nest-asyncio 1.6.0
numpy 2.2.1
openpyxl 3.1.5
opensearch-py 2.8.0
packaging 24.2
packaging 24.2
pandas 2.2.3
pg8000 1.31.2
platformdirs 4.2.2
ply 3.11
propcache 0.2.1
pyarrow 18.1.0
python-dateutil 2.9.0.post0
pytz 2024.2
redshift-connector 2.1.5
requests 2.32.3
requests-aws4auth 1.3.1
scramp 1.4.5
setuptools 75.8.0
six 1.17.0
soupsieve 2.6
tomli 2.0.1
typeguard 4.3.0
typing_extensions 4.12.2
typing_extensions 4.12.2
tzdata 2024.2
wheel 0.43.0
yarl 1.18.3
zipp 3.19.2

一覧取得には以下記事のスクリプトを利用させていただきました。

おわりに

私自身、Pandas を Lambda で利用するにはレイヤーを自作しなければならないと思っていました。お客様向けの検証を行うにあたり、もっと楽な方法がないかな?と思って調べたところ、こんなに簡単になっていることに気付きました。知識アップデートって大事ですね。

67
47
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
67
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?