使用 Learner Lab - 在 Lambda 建立 Pillow 层,进行 S3 的图片镜相操作

news2024/9/22 23:30:15

使用 Learner Lab - 在 Lambda 建立 Pillow 层,进行 S3 的图片镜相操作

AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Learner Lab - 学生,而这篇文章是在 Lambda 建立 Pillow 层,进行 S3 的图片镜相操作,Lambda 的 Python 代码会引入 Pillow,载入 S3 存储桶中的图片,进行镜相操作后再存回 S3 存储桶。

步骤 1. 创建 S3 存储桶

AWS 网页控制台 上方的搜寻图示中输入 S3 ,单击 S3 服务,如下图所示。

在这里插入图片描述
图 1. AWS 网页控制台中找寻 S3 服务

单击创建存储桶

在这里插入图片描述
图 2. 创建一个存储桶

创建存储桶的配置如下:

常规配置

  • 存储桶名称: lambda2s3image
  • AWS 区域: us-east-1

对象所有权

  • ACL 已启用

在这里插入图片描述
图 3. 存储桶名称与区域

此存储桶的“阻止公有访问”设置

  • 清除勾选 阻止所有公开访问
  • 勾选 我了解,当前设置可能会导致此存储桶及其中的对象被公开。

在这里插入图片描述
图 4. 存储桶公有访问”设置

其馀选项保留预设值,完成后单击 创建存储桶 按钮。

上传一个图片档案到 S3 存储桶

在这里插入图片描述
图 5. 上传一个图片档案到 S3 存储桶

步骤 2. 创建 Lambda 函数

AWS 网页控制台 上方的搜寻图示中输入 Lambda ,单击 Lambda 服务,如下图所示。

在这里插入图片描述
图 6. AWS 网页控制台中找寻 Lambda 服务

单击 创建函数 服务,如下图所示。

在这里插入图片描述
图 7. 创建 Lambda 函数

设定 Lambda 函数如下

  • 从头开始创作
    基本信息
  • 函数名称: mirrorImage
  • 运行时: Python 3.8
  • 架构: x86_64
    权限
  • 执行角色: 使用现有角色 LabRole (很重要、很重要、很重要)

在这里插入图片描述
图 8. 设定 Lambda 函数

步骤 3. 布署 Lambda 函数

因为这次代码的功能为读取 S3 存储桶(lambda2s3image)中的图档(CSDN_Logo.jpg),进行镜相操作后再回存到 S3,代码如下:

import boto3
from PIL import Image, ImageOps

s3_client = boto3.client('s3')
inputbucket = 'lambda2s3image'
outputbucket = 'lambda2s3image'
key = 'CSDN_Logo.jpg'
mirror_key = 'mirror_CSDN_Logo.jpg'
download_path = '/tmp/{}'.format(key)
upload_path = '/tmp/mirror-{}'.format(key)
# 进行镜像操作函数
def mirror_image(image_path, mirror_path):
  with Image.open(image_path) as image:
    im_mirror = ImageOps.mirror(image)
    im_mirror.save(mirror_path)
    print('mirror the image {} to {}'.format(image_path, mirror_path))

def lambda_handler(event, context):
    # 从 s3 下载文件
    s3_client.download_file(inputbucket, key, download_path)
    mirror_image(download_path, upload_path) # 进行镜像操作函数
    # 上传文件到 s3 
    s3_client.upload_file(upload_path, outputbucket, mirror_key,ExtraArgs={'ACL': 'public-read','ContentType':'image/jpeg'})

修改完毕后单击 Deploy (布署),必须要先布署才算是将代码布署到云计算中。

步骤 4. 测试 AWS Lambda

单击 Test 按钮,会出现配置测试事件弹窗,配置如下:

  • 测试事件操作: 创建新事件
  • 事件名称: hello
  • 事件共享设置: 私有

设定好后存档即可。

在这里插入图片描述
图 9. 配置测试事件

配置完成后再单击 Test 按钮即可运行,运行结果会出现在 Execution result 视窗,可以看到出现错误,主要的原因为没有 PIL 模块:
Unable to import module 'lambda_function': No module named 'PIL'

在这里插入图片描述
图 10. 进行测试事件,检验代码执行结果

步骤 5. 下载 PIL 模块

根据 AWS 的官方教程 建立和共用 Lambda 层,所建立的 pillow 函式库会出现 cannot import name ‘_imaging’ from ‘PIL’ 的错误讯息,解决方法就是直接去官方网站下载套件安装包。可以在国内清华镜像站中下载 Pillow-8.3.2,如下图所示。

在这里插入图片描述
图 11. 至国内清华镜像站找寻安装包

下载后直接用 zip 工具解压缩,会得到 3 个文件夹,将这三个文件夹放在 python 的文件夹中,在进行压缩即可,如下图所示。

在这里插入图片描述
图 12、压缩至 python 文件夹中

进入 AWS Lambda 管理控制台,选择建立 Layer,输入 Layer 名称,并上传先前建立的压缩档,在选择相容架构 x86_64,而相容的执行时间指的是希望可以在哪些版本的 python 中执行,确定后按下 建立 键即完成建立 Layer,如下图所示。

层配置

  • 名称: pillow-8-3-2
  • 描述: Pillow-8.3.2.dist-info
  • 上传 .zip 文件
  • 兼容架构: x86_64
  • 兼容运行时: Python 3.7Python 3.8

在这里插入图片描述
图 13、建立 Layer 设定画面

步骤 6. 在 Lambda 函数中添加 PIL 模块

进入 mirrorImage 函数的设定画面,在画面的最底端,为本函数添加层 (Layer),如下图所示。

在这里插入图片描述
图 14、为 Lambda 函数添加层 (Layer)

进入添加层 (Layer) 画面后,选择层来源为 自订 Layer,接着选择先前建立的 pillow8_3_2 函式库层,如下图所示。

选择一个层

  • 层源:自定义层
  • 自定义层: pillow-8-3-2
  • 版本: 1

在这里插入图片描述
图 14、添加层 (Layer) 配置

步骤 7. 重新运行并检视结果

重新单击 Test 观看运行结果,没有出现任何错误,并打印出运行过程。

在这里插入图片描述
图 15. 使用 Lambda 测试观看运行结果

打开浏览器比对结果,左手边是步骤 1. 上传的图片,右手边是处理后的结果。

在这里插入图片描述
图 16. 使用浏览器观看运行结果

感谢亚马逊云科技王向炜 Alan Wang 提供的协助。

参考资料

  • 使用 Learner Lab - 使用 Lambda 转换图片为 base64 格式, https://blog.csdn.net/m0_50614038/article/details/128075734
  • 使用 Learner Lab - 使用 AWS Lambda 将图片写入 S3, https://blog.csdn.net/m0_50614038/article/details/128122934
  • 使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda, https://blog.csdn.net/m0_50614038/article/details/128155030
  • Day 33 - 实作 S3 驱动 Lambda 函数进行镜像,https://blog.csdn.net/m0_50614038/article/details/121060724
  • 建立和共用 Lambda 层,https://docs.aws.amazon.com/zh_tw/lambda/latest/dg/configuration-layers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[论文阅读] 颜色迁移-Automated Colour Grading

[论文阅读] 颜色迁移-Automated Colour Grading 文章: Automated colour grading using colour distribution transfer, [paper], [matlab代码], [python代码] 1-算法原理 本文算法分为2个大步骤, 首先使用IDT(Iterative Distribution Transfer)方法得到初步的结果, 这个结果…

优雅的springboot参数校验(二)

7. 集合校验 有这样一种场景,前端请求后端接口时,需要传递的是一个数组,数组的元素是一个对象,并且希望后台收到参数后可以对数组集合中的元素元素对象的属性进行校验,如果后台直接以List的来接收参数,约束…

[附源码]计算机毕业设计基于springboot的云网盘设计

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

linux网络编程之tcp

相关函数 int socket(int domain,int type,int protocol);参数: domain: AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type: SOCK_STREAM: 流式套接字,唯一对应于TCP SOCK_DGRAM:数据报套接字,唯一对应着…

【第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择】

第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择 1.MySQL体系结构: ①连接层: 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连…

[Power Query] 日期和时间处理

Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop,单击【转换数据】选项,进入Power Query查询编辑器界面 步骤2:选中"日期&qu…

【概念】数据仓库和数仓建模

数据仓库 数仓主要特征 面向主题:每个需求和表都属于一个主题,可以用主题来对数仓的表分门别类集成性:将异构数据源,比如MySQL和服务器埋点日志,统一转换成结构化的hive表数据存储到ODS层非易失性:对历史…

Flink系列文档-(YY12)-窗口计算

1 窗口基本概念 1.1 概述 窗口,就是把无界的数据流,依据一定规则划分成一段一段的有界数据流来计算; 既然划分成有界数据段,通常都是为了"聚合"; Keyedwindow重要特性:任何一个窗口&#xff0…

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内,ScrollView控件封装的挺完美的了,不过对于一些对性能要求比较高的场景,会存在问题,以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView,插入100个玩家的item,理…

离线安装harbor容器镜像仓库(harbor-v2.3.5)

记录:354 场景:在CentOS 7.9操作系统上,离线部署harbor容器镜像仓库集群,使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用Ceph为共享存储、使用nginx为harbor的负载均衡、使用Keepalived为集群高可用、使用docker-ce操作…

【专业术语】(计算机 / 深度学习与目标检测 / 轨道交通)

专业术语-计算机 / 深度学习与目标检测 / 轨道交通一、 计算机1 IDE2 API3 CUDA Driver API3.1 cuInit - 驱动初始化3.2 关于context,有两种:3.3 CUcontext4 RuntimeAPI5 Memory5.1 关于内存,有两大类:5.1.1 CPU内存,称…

[附源码]Python计算机毕业设计Django考试系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

FISCO BCOS(二十五)———多机部署

一、基础环境搭建 1、查看当前是否安装了ssh-server服务 dpkg -l | grep ssh2、安装ssh-server服务 sudo apt-get install openssh-server3、修改配置文件"/etc/ssh/sshd_config" 4、重启openssh-server root@FISCOBCOS01:~# sudo /etc/init.d/ssh restart5、查看…

高数 |【2020数一真题】部分错题及经典题自用思路整理

T1:积分限与被积函数都等价为无穷小 T2:不连续一定不可导 T3:可微的定义 T4:收敛半径 T6:空间直线与向量 法一:

WINDOWS7-11磁盘分区教程

首先,打开计算机管理界面 以windows11为例,在任务栏搜索框内,输入“计算机管理界面” 点击打开。 然后选择存储-》磁盘管理 到这里之后,我们需要选中一个磁盘,压缩卷分出来一部分空间。为新分区做准备。 以E盘为例&a…

MapStruct与lombok加载顺序问题与annotationProcessorPaths的关系?

MapStruct是什么? MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.——https://mapstruct.org/ 从官方定义来看,MapStruct类似于我…

C语言Socket编程,实现两个程序间的通信

文章目录server和client通信流程图实现两个程序间的通信1.服务端server2.客户端client3.怎么运行呢?4.重写代码已剪辑自: https://www.cnblogs.com/fisherss/p/12085123.html server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的…

17-JavaSE基础巩固练习:Math类API两道数学算法水题

两道算法水题(一) 一、判断质数 判断一个数是否为一个质数。 1、以前的写法 package com.app.demo26_math_api;public class Test1 {public static void main(String[] args) {/*判断n(任意整数)是否为一个质数:以前的写法:是用n对2~n之间…

JavaWeb Filter 过滤器

参考:JavaWeb过滤器(Filter)详解 1、简介 顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。…

阿里云部署应用

安装jdk 查看已安装版本 rpm -qa | grep java yum命令查找JDK1.8软件包 yum -y list java-1.8* 安装列表中的JDK1.8软件包 yum -y install java-1.8.0-openjdk-devel.x86_64 java -version 配置环境变量 vim /etc/profile JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.…