python2.7のやり方はのっていたけど、python3.6がなかったのでメモしておきます。
概要と注意点
opencv重いので、S3バケットにzipでアップロードしたものを使用する。
その際に、zipの中に、lambda_function.pyを入れておく。
S3にアップロードされたzipは、AWSコンソール上では編集できないです。
手順
・その1: Amazon Linuxを立てる
Lambdaで動かすには、ファイル構造をAmazon Linux仕様にしなければならないようです。
よって、Amazon Linuxを立ててください!!!
・その2: lambda_fanction.py を書く
書いてください。
【注意点】
- importは以下のように、numpy→cv2の順で記入してください。
-
lambda_function.py
という名前で -
def lambda_handler
とう関数の中に書いてください
import boto3
import numpy as np
import cv2
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = s3.Bucket(S3のバケット名)
bucket.download_file(S3にある画像, /tmp/S3にある画像名) #これで、Lambdaのtmpにダウンロード
print('-----cv2-----')
image_path = '/tmp/ダウンロードされた画像 #2行上の /tmp/S3にある画像名 と同じ '
img = cv2.imread(image_path)
cv2.imwrite('/tmp/image.jpeg',img)
print('/tmpのls: ', subprocess.run(["ls", "-l", "/tmp"], stdout=subprocess.PIPE))
bucket.upload_file('/tmp/image.jpeg', 'image.jpeg')
print('complete upload')
print('-------------')
・その3: 必要なモジュールを -t でpipインストールする
requirements.txtがあればそれを使っても構いません。
lambda_function.pyがあるディレクトリで、モジュールたちが並列になるようにインストールします。
pip3 install opencv-python -t .
【注意点】
- lambda_function.pyがあるディレクトリで行なってください
- 今回動かすlambdaの環境がpython3なので、opencvのインストールもpytho3の環境で行なってください
・その4: まとめてzipする。
zip -r lambda-package.zip *
これでlambda-package.zipという名前でzipされます。
・その5: S3にアップロードする
zipをアップロードします。
・その6: lambdaから読み込む
関数コードを Amazon S3からのファイルのアップロード
にし、ランタイムはPython3.6を選びます。
そして、リンクURLに、その5でアップロードしたURLを記入します。
保存をおしたら完成です。