ITの隊長のブログ

ITの隊長のブログです。Pythonを使って仕事しています。最近は機械学習をさわりはじめたお(^ω^ = ^ω^)

雑ログ lambda layersで遊ぶ

スポンサードリンク

lambda layersを触る.

qiita.com

ここを参考にした。

ディレクトリ構成

- 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/

こうするとうまくいきました。やったね!!!