lambda layersを触る.
ここを参考にした。
ディレクトリ構成
- lambda - lambda_layers - python - cw_logging.py - lambda_test - lambda_function.py
lambda layersの作成
$ pwd ~/lambda/ $ cd lambda_layers/ $ zip -r python.zip python/
用意したzipファイルはqiitaの記事のようにアップロードする.
呼び出し元(lambda関数)
from cw_logging import logging def lambda_handler(event, context): logging('INFO', 'LambdaLayerTest', 'This is test.') # ...
これでできた。
ここまで来るのに5回ミスったけど、その都度上げ直すのめんどくさい。
次は、lambda layers側で、外部ライブラリが必要になるケースでやる。
import datetime import boto3 S3 = boto3.resource('s3') def logging(error_lv, lambda_name, error_msg): """Lambdaログ出力(CloudWatch Logs)関数.""" logging_date_str =(datetime.datetime.now()).strftime('%Y/%m/%d %H:%M:%S') log_str = '{} [{}] {} {}'.format(logging_date_str, error_lv, lambda_name, error_msg) # CloudWatch Logsに出力 print(log_str) # ログ文字列を返却 return log_str def save_s3(bucket_name, html, file_name): obj = S3.Object(bucket_name, file_name) obj.put(Body=html)
これにした.
呼び出し元(lambda関数)
from cw_logging import logging, save_s3 def lambda_handler(event, context): logging('INFO', 'LambdaLayerTest', 'This is test.') save_s3('aipa.test.log', 'text', 'test.txt') # ...
保存できた(°ω°)
あれー? 昨日はできなかったような...?
boto3
は実はインストール済みかもしれない。
beautifulsoup
とかに変更してみる。
lambda layers側のimport文を修正する。
from bs4 import BeautifulSoup import urllib3 from urllib3.exceptions import RequestError, InsecureRequestWarning # ...
Unable to import module 'lambda_function': No module named 'bs4'
ふむ。予想通り。
ディレクトリ構成をちょっと修正する.
$ mkdir -p lib/python3.6/site-packages/
- lambda - lambda_layers - python - cw_logging.py - lib/python3.6/site-packages/ - lambda_test - lambda_function.py
こうする。
ほんで、~/lambda/lambda_layers/requirements.txt
を用意する。
中身はこうした。
requests future boto3 beautifulsoup4==4.6.0
落とす
$ pip install -r requirements.txt --target python/lib/python3.6/site-packages/
圧縮して再アップ.
$ zip -r python.zip python/
こうするとうまくいきました。やったね!!!