はじめに
Lambda Layer を使えば、異なるLambda関数で機能を共有したり、依存関係を分離してパッケージの運用性、保守性を高めたりできます。AWS公式からも AWSLambdaPowertools など便利なLambda Layerがいくつか提供されており、使用されている方も多いでしょう。
しかしながら、外部から提供されるLambda Layerの中身がどうなっているのか、何が含まれているのか気になることはないでしょうか? 本稿では、Lambda Layerの内容を簡単に調べる方法を紹介します。また、Layerを自作するにあたり、LayerパッケージングのベストプラクティスをAWS公式の実例から学ぶこともできます。
Lambda Layerの実体を取得する
Lambda Layerはzipパッケージとして提供されます。そのzipファイルを取得することで内容を分析できます。
AWS CLIの aws lambda get-layer-version-by-arn
を使えば、LayerのARNを指定して、zipファイルのURLを取得できます。以下は、Python向けのAWSLambdaPowertoolsの情報を取得した例です。レスポンスの Content.Location
の値がzipファイルのURLです。このURLにブラウザやcurlでアクセスすればLayerのzipファイルをローカルにダウンロードして分析できます。
$ aws lambda get-layer-version-by-arn --arn arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:12
{
"Content": {
"Location": "https://awslambda-ap-ne-3-layers.s3.ap-northeast-3.amazonaws.com/snapshots/017000801446/AWSLambdaPowertoolsPythonV3-python313-arm64-8abd5289-dad0-4412-8da9-ebf201a57c02?versionId=c3qevbjVT3id8YZX7uWDp8Nkw7ZSeFui&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEH4aDmFwLW5vcnRoZWFzdC0zIkgwRgIhAIyeDfcFwpNJosjgzqCn8K70Z8FdYPNKaNRLg8%2BT%2FBPgAiEAyrJcY9zL7uMbeEdPxrtWhPWxL0NKOfEDPqACswjT814qwAUINxACGgw5MjI5OTIxNTgxNzQiDDVK5v7GL1qh2R2bYiqdBRYi1hid3zpA5VxAv34IOTJRFwirx4FtCvK9%2FEeLHZdgH2CuhAfVlaVwNGPg6WFdn8FG%2BrKQTOn4ajGLlx7EQ5inxHSbB7Gz5RZ3wdYy3Cjvtze09GZcHBsMUlv4HnXQ%2B%2FXcDDQ0Fgh%2Fn8TT43DwrpkilZnRa%2FrjomE91MQ056Nyz366Dwfi%2Bqo2ZTAyI2vkqpw2bBaXaMOYv%2F0got6pZWThx1x4FIG4S7ABchKJwi9gEieqhYcrU6cNtmJLcwYlGzXe0tuFcDl5A3ErjaQZ4UjwxT56N8uSztDgjWKV4z3TzcwTVPjbjcyCXZKD3hnyegWNmdr44pFszbTFBAyiOgxlV3luScH9PnUa%2FBYRHVZJw7RT8kDY0njR8uKFagg%2BOTEckFEeZ3M5qPl8HOqqpyKXJKGLrDDzLSpXvtlZgI88KgDoxJX8S2ix1eW%2BxidCdO%2B3532Kc1BCe8Ur2K%2BlPZUUlPnFUIRuTHZjrLnn9KZ6eWQkrfjSvo570tIxitjjSC8Q3O5WVwmsDQJUeEYcjC87LLvCEkiXEzV3ml%2FABmViA1DPet7%2Ftmgry5aIXP6kAOOImwMG6h5MwC6bILnyQ3JIE5aghUrzU26WVmImh9m2QtkY9SYp9OhEnzvWLhU1hZFcng4e3VolDK7BIZhMf01jjwYMjPJuZ7FgpQDRnlNWULSyy2qQ%2Bnet5a5M3uJ9oUyuBDfE1IMAaBQ5bsyUIeYq1OSEhaKqMIVjWjon1XaNEDTmlFDitMlMKQ%2FuhZgDR6Mv9W5A5pcqqjqxR84HPKY4sjgc7XBSubdnJ5aVTKKzLwr7CWpVOHiZO7Hix3GLq6lkW%2B0xu%2BQAP2PGWBAYoA%2FaHujeDzgcrtdj4tV5A8v%2FfuiQhysaLqa5e4p%2FqjC11pnBBjqwAY1BYn3xTge7st3FOY8qDqXd4yuhp7kmE87JoyxsDHbiHmTXxbwquq%2By5pmXHapL3UdI11kwNIcg2%2BIFQAsATwOFjuF3GAYmEutzUvfBQArnAZ6HIX%2Bop3jj9OvEDgdnvgnAMxuAmg9nAd%2BAx%2Bxf2q4CT3JTB4VSoDjnHQre5SXTyMIwlGpaZdRtYNYlGTr6bxmM9jm%2FEYPYcMRAbMdarNLMFwDtwZPlkp97aVQOGrS6&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250515T231516Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=ASIA5NZU6UXPNPPFTUB4%2F20250515%2Fap-northeast-3%2Fs3%2Faws4_request&X-Amz-Signature=f76cc204c30822730e19d87357f1a43fb241fbeae02acee6cd74baa733d45f5b",
"CodeSha256": "iLhlWJUv6DTx7S1utiWG9BGgbTZ5pBJZJHqbmrreq2k=",
"CodeSize": 8255798
},
"LayerArn": "arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64",
"LayerVersionArn": "arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:12",
"Description": "Powertools for AWS Lambda (Python) V3 [arm64 - Python 3.13] with extra dependencies version 3.10.0",
"CreatedDate": "2025-04-08T12:03:38.304+0000",
"Version": 12,
"CompatibleRuntimes": [
"python3.13"
],
"LicenseInfo": "MIT-0",
"CompatibleArchitectures": [
"arm64"
]
}
以下は、Layerのzipをダウンロードして、ファイル一覧を表示する例です。もちろん一覧だけでなくファイル一つ一つの内容を精査することもできます。
$ aws lambda get-layer-version-by-arn \
--arn arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:12 \
--output text \
--query 'Content.Location' \
| xargs curl -o layer.zip
$ zip -l layer.zip
Archive: layer.zip
Length Date Time Name
--------- ---------- ----- ----
172141 1980-01-01 00:00 python/typing_extensions.py
341832 1980-01-01 00:00 python/_cffi_backend.cpython-313-aarch64-linux-gnu.so
6 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/top_level.txt
153 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/WHEEL
1557 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/RECORD
6351 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/METADATA
1304 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/LICENSE
4 1980-01-01 00:00 python/wrapt-1.17.2.dist-info/INSTALLER
28687 1980-01-01 00:00 python/wrapt/wrappers.py
3881 1980-01-01 00:00 python/wrapt/weakrefs.py
5204 1980-01-01 00:00 python/wrapt/patches.py
10997 1980-01-01 00:00 python/wrapt/importer.py
(...中略...)
11281 1980-01-01 00:00 python/attr/__init__.pyi
2057 1980-01-01 00:00 python/attr/__init__.py
87 1980-01-01 00:00 python/annotated_types-0.7.0.dist-info/WHEEL
802 1980-01-01 00:00 python/annotated_types-0.7.0.dist-info/RECORD
15046 1980-01-01 00:00 python/annotated_types-0.7.0.dist-info/METADATA
4 1980-01-01 00:00 python/annotated_types-0.7.0.dist-info/INSTALLER
1083 1980-01-01 00:00 python/annotated_types-0.7.0.dist-info/licenses/LICENSE
6421 1980-01-01 00:00 python/annotated_types/test_cases.py
0 1980-01-01 00:00 python/annotated_types/py.typed
13819 1980-01-01 00:00 python/annotated_types/__init__.py
--------- -------
21196672 867 files
ARNの取得方法
上記の方法は、LayerのARNが必要です。ARNを特定するには、ダミーのLambda関数等に調査したいLayerを追加してみてください。Layer一覧にARNが表示されます。
実際にLayerを追加せずにARNを特定したい場合は、Layerのプロジェクトサイトに記載されています(例: AWSLambdaPowertools for PythonのARNリスト)。しかしながら、調べた限りでAWS公式の全Layerを網羅した信頼できるARN一覧情報は見つけられませんでした (もしご存じの方がいればコメント等でご教示いただけると幸いです)。
まとめ
AWS CLIを用いてLambda Layer 実体のzipファイルを取得、分析する方法を紹介しました。AWS公式やサードパーティなど外部提供のLayerを調査する場合にご活用いただければと思います。