Lambda レイヤーにライブラリを追加する ( URLExtract 編)

概要

Lambda の Python ランタイムから URLExtract モジュールを利用できるようにするため、Lambda レイヤーに URLExtract を追加します。

Lambda レイヤーに URLExtract モジュールを追加する手順

作業用ディレクトリとレイヤーパスの作成

Copied!
mkdir -p ~/urlextract_layer/python

urlextract インストール

python ディレクトリに urlextract をインストールします。

Copied!
cd ~/urlextract_layer
pip install urlextract -t python

デプロイパッケージ化( zip ファイルアーカイブ)

Copied!
cd ~/urlextract_layer
zip -r9 urlextract_layer.zip python

Lambda レイヤーの作成

デプロイパッケージを使用した Lambda レイヤーの作成手順はこちらにまとめてあります。

Read-only file system: '/home/sbx_user1051'

URLExtract は書き込み可能なキャッシュディレクトリーを必要とします。
利用するキャッシュディレクトリーは URLExtract インスタンスの初期化時に cache_dir パラメータで指定することができます。

一方で、Lambda の環境では書き込み可能なディスク領域は、/tmp ディレクトリ内のみとなっています。
そのため、そのまま URLExtract を利用すると、ホームディレクトリ( /home/sbx_user1051 ) に書き込もうとして、Read-only file system: '/home/sbx_user1051' エラーが発生します。

解決方法としては、利用するキャッシュディレクトリーとして /tmp ディレクトリを使用するようにすることで回避できます。

Copied!
import json
from urlextract import URLExtract

def lambda_handler(event, context):
    extractor = URLExtract(cache_dir='/tmp')