這節來學習一個經典的案例,這個案例我在三個不一樣的培訓視頻裏面都看見過,不知道最初的原創者是誰 :)python
和前面的幾個例子比較起來,思路實際上是大同小異的,惟一的區別在於兩點:linux
這個例子的流程簡單的說就是建立2個S3的bucket,在其中一個上傳照片,他會自動壓縮尺寸並保存在另一個bucket裏面。 下面來看看如何實現。json
首先建立2個bucket,一個source, 一個destinationide
而後建立對應的role函數
而後建立一個Lambda function,選擇上面配置的role學習
添加一個觸發器,這裏咱們指定S3的source bucket測試
接下來,是配置對應的函數code
import os import tempfile import boto3 from PIL import Image s3 = boto3.client('s3') DEST_BUCKET = os.environ['DEST_BUCKET'] SIZE = 128, 128 def lambda_handler(event, context): for record in event['Records']: source_bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] thumb = 'thumb-' + key with tempfile.TemporaryDirectory() as tmpdir: download_path = os.path.join(tmpdir, key) upload_path = os.path.join(tmpdir, thumb) s3.download_file(source_bucket, key, download_path) generate_thumbnail(download_path, upload_path) s3.upload_file(upload_path, DEST_BUCKET, thumb) print('Thumbnail image saved at {}/{}'.format(DEST_BUCKET, thumb)) def generate_thumbnail(source_path, dest_path): print('Generating thumbnail from:', source_path) with Image.open(source_path) as image: image.thumbnail(SIZE) image.save(dest_path)
注意!!!這個函數裏面咱們調用了Pillow這個圖片的模塊,可是這個模塊默認在aws的運行環境裏面是沒有的,所以咱們須要手動上傳。orm
首先從 https://pypi.org/project/Pillow/#files 上面下載對應的linux whl 文件,whl文件實際上是一個壓縮包,Windows 下面咱們能夠用 wheel unpack 解壓。若是在Linux環境下,能夠直接用unzip打開。視頻
而後把這個PIL文件夾和咱們的python文件一塊兒zip
而後上傳到Lambda的控制檯
注意py文件和入口函數的名字要和handler匹配
也別忘記了配置環境變量
咱們能夠經過測試模板來查看對應的事件的json格式
最後來看看運行效果
上傳幾個圖片
自動壓縮保存在另一個bucket裏面
實驗成功