Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片
admin
2023-03-30 13:41:23
0

这节来学习一个经典的案例,这个案例我在三个不同的培训视频里面都看见过,不知道最初的原创者是谁 :)

和前面的几个例子比较起来,思路其实是大同小异的,唯一的区别在于两点:

  1. 通过S3来触发Lambda
  2. 对于AWS默认不包括的Python模块,我们需要手动上传zip文件或者通过S3来导入

这个例子的流程简单的说就是创建2个S3的bucket,在其中一个上传照片,他会自动压缩尺寸并保存在另外一个bucket里面。 下面来看看如何实现。

首先创建2个bucket,一个source, 一个destination

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

然后创建对应的role

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

然后创建一个Lambda function,选择上面配置的role

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

添加一个触发器,这里我们指定S3的source bucket

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

接下来,是配置对应的函数

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的运行环境里面是没有的,因此我们需要手动上传。

首先从 https://pypi.org/project/Pillow/#files 上面下载对应的linux whl 文件,whl文件其实是一个压缩包,Windows 下面我们可以用 wheel unpack 解压。如果在Linux环境下,可以直接用unzip打开。

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

然后把这个PIL文件夹和我们的python文件一起zip

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

然后上传到Lambda的控制台
Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

注意py文件和入口函数的名字要和handler匹配
Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

也别忘记了配置环境变量

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

我们可以通过测试模板来查看对应的事件的json格式

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

最后来看看运行效果

上传几个图片

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

自动压缩保存在另外一个bucket里面

Lambda,AWS和Python的自动化管理操作 - 自动Resize S3上传的图片

实验成功

相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...