サーバレス練習帳

着眼大局着手小局

cloud9でlambdaに外部モジュールを!

Lambdaのrequestsとか、zipに丸めてアップロードとか、面倒だよね。
Cloud9でLmbadaの+ボタンを押して、Lambda関数を作りましょう。

構成は、
 アプリ名: lambdaDeployTestingApp
 関数名: lambdaDeployTestingFunc
・・・としました。

requestsをインストールします。
(pipのバージョンが古いといわれますが、cloud9環境で新しいpipをインストールする方法が分からないので、そのままで良いか。)

~/environment $ cd lambdaDeployTestingApp
~/environment/lambdaDeployTestingApp $ pip install requests -t .

こんな感じのフォルダ構成になります。

f:id:urbanplanner:20200523114218p:plain

さて、簡単にするため、lambda_function.pyは、こんな感じのプログラムにしました。

import requests

def lambda_handler(event, context):
    print(event)
    return 'OK!'

こんな感じ↓↓で、ローカルでは動きましたね。

f:id:urbanplanner:20200523114542p:plain

で、この状態でデプロイすれば、フォルダごとLambdaに持って行ってくれます。簡単だね。

ちなみに、この状態でs3トリガと接続した場合、
こんな感じでファイル名は見れそうです。
imgフォルダの.png指定でトリガを設定してみた。

print(event['Records'][0]['s3']['object']['key'])

疑似的なS3トリガの中身です。

{
    "Records": [
        {
            "s3": {
                "object": {
                    "key": "img/test3.png"
                }
            }
        }
    ]
}

【参考】
aws.amazon.com

www.google.co.jp


【手順】
(1) cloud9を30分以内に消える設定で作成。
 testCloud9
(2) ラムダを作成
 testApp と testFunc
(3) requestsをインストール

~/environment $ cd testApp
~/environment/testApp $ pip install requests -t .

(4) 関数を記載

import requests
import json

def lambda_handler(event, context):
    print(event['Records'][0]['s3']['object']['key'])
    return 'OK!'

(5) テストデータを記載

{
    "Records": [
        {
            "s3": {
                "object": {
                    "key": "img/test.png"
                }
            }
        }
    ]
}
||< 

(6) テストしてラムダにアップロード

(7) ラムダでS3トリガを設定
imgフォルダの.png指定でトリガを設定してみた。