Lambda で外部ライブラリを使用する際にはバージョンに注意しよう

359 Views

September 17, 25

スライド概要

profile-image

都内で SIer やってます/クラウドエンジニア / AWS, Azure, OCI / Java, Python, Next.js, Unity / 2025 Japan All Certifications Engineer

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Lambda で外部ライブラリを 使用する際にはバージョンに注意しよう Serverless LT 初心者向け インフラ金木

2.

目次 • 自己紹介 • 今回のテーマの背景 • 謎の Lambda のエラー • まとめ

3.

自己紹介 • はじめまして、「インフラ金木」です • 都内の SIer でクラウド設計構築をメインにやってる • 1年前はクラウドどころかインフラもちんぷんかんぷん • 2025 Japan All AWS Certifications Engineers • AWS のコミュニティが活発で楽しそうと思った • いろいろ外の世界を見てみるぞ~(LT, 勉強会 etc...)

4.

背景 • バッチ用 Lambda とオンプレの基幹システムとのデータ連携の方式設計 • オンプレ基幹システムから Lambda への API アクセスを想定 • バッチ用 Lambda から基幹システムへデータ送信する際に 基幹システムの受信待ち状態を ON にするようなシェルを実行する必要がある • バッチ処理を使った Lambda や StepFunction などはネット上の記事や 他案件での実績で参考情報はある • しかし「Lambda からデータ連携先のサーバへアクセスしてシェルを実行する」という点の 技術的可能性が不明であった

5.

背景 • バッチ用 Lambda とオンプレの基幹システムとのデータ連携の方式設計 • オンプレ基幹システムから Lambda への API アクセスを想定 • バッチ用 Lambda から基幹システムへデータ送信する際に 基幹システムの受信待ち状態を ON にするようなシェルを実行する必要がある • バッチ処理を使った Lambda や StepFunction などはネット上の記事や 他案件での実績で参考情報はある • しかし「Lambda からデータ連携先のサーバへアクセスしてシェルを実行する」という点の 技術的可能性が不明であった

6.

背景 • AWS 環境にて VPC Lambda 作成 • Azure 環境にて Vnet と Linux サーバ作成 • Site to Site VPN を使用して AWS と Azure 環境を結ぶ • Lambda から Azure 環境の Linux サーバへ SSH 接続 & コマンド実行 AWS Lambda 画像参考元 : https://blogs.networld.co.jp/entry/2024/09/10/111041

7.

謎の Lambda のエラー <Lambda で外部ライブラリを使用したいが、import エラーで止まってしまう> 状況 今回の Lambda から SSH 接続を実施する際 「paramiko」という SSH クライアントライブラリを 使用した。 「my_lambda_function」を作成し Paramiko をそのディレクトリにてインストールした。 lambda_function.py も同ディレクトリに配置。 最後「my_lambda_function」を zip 化し Lambda にアップロードした。

8.

謎の Lambda のエラー <Lambda で外部ライブラリを使用したいが、import エラーで止まってしまう> 状況 テスト実行結果は右画像の通り。 今回は特にトリガーイベントの用意は無し。 どうやら「cryptography」というライブラリが Import できないらしい(ちなみに Lambda のファイルと同ディレクトリに置いてます)

9.

謎の Lambda のエラー <Lambda で外部ライブラリを使用したいが、import エラーで止まってしまう> 原因 • Lambda 実行環境の Python のバージョンと使用するライブラリとの バージョン不整合 • レイヤ―に入れる用の自作パッケージのビルド時の OS と Lambda のベースと なっている OS との不整合

10.

謎の Lambda のエラー 結論:ライブラリをインポートする Python のバージョンと OS 環境を Lambda と揃えるべし 自作部分 自作部分 Amazon Linux 2023 にてインストールした Python 3.12 でインストールしたライブラリ Lambda 部分 Windows 11 にてインストールした Python 3.12 でインストールしたライブラリ Lambda 部分 Python 3.12 Python 3.11 OS (Amazon Linux 2023) OS (Amazon Linux 2) 理想 失敗した時のやつ

11.

謎の Lambda のエラー どう解決したか 前頁スライドの「理想」の図になるように Lambda と Python ランタイムの設定を変更した 1. Lambda で使用しているランタイムと一致する OS (今回は Amazon Linux 2023 )の Cloud Shell 環境を立てる 2. Lambda で使用しているランタイムと一致する Python をインストール(今回は 3.12) 3. そこでインストールしたライブラリを zip で取得し Lambda のレイヤーに追加

12.

謎の Lambda のエラー どう解決したか 前頁スライドの「理想」の図になるように Lambda と Python ランタイムの設定を変更した 1. Lambda で使用しているランタイムと一致する OS (今回は Amazon Linux 2023 )の Cloud Shell 環境を立てる 2. Lambda で使用しているランタイムと一致する Python をインストール(今回は 3.12) 3. そこでインストールしたライブラリを zip で取得し Lambda のレイヤーに追加

13.

謎の Lambda のエラー どう解決したか 前頁スライドの「理想」の図になるように Lambda と Python ランタイムの設定を変更した 1. Lambda で使用しているランタイムと一致する OS (今回は Amazon Linux 2023 )の Cloud Shell 環境を立てる 2. Lambda で使用しているランタイムと一致する Python をインストール(今回は 3.12) 3. そこでインストールしたライブラリを zip で取得し Lambda のレイヤーに追加

14.

謎の Lambda のエラー どう解決したか 詳細は記事にまとめました 引用:https://zenn.dev/infra_kaneki/articles/4b0f5e0e9505a4

15.

まとめ • Lambda に外部ライブラリやパッケージを入れる際は ランタイム、ライブラリの対応OS、対応バージョンに注意する • Lambda に限らず、使用するソフトやライブラリの対応バージョンやOSの部分に 注視することで、今回のような非対応によるエラーに対処できる可能性がある