使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

article/2025/9/18 5:34:34

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Learner Lab - 学生,以下示范使用 API Gateway 与 Lambda 上传图片到 S3。

使用 S3 来存储照片可以很容易的建立一个无服务器的应用,只要结合 API Gateway 与 AWS Lambda 就可以让使用者在不需建置任何服务器的情况下,提供一个照片存放的功能,而 AWS Upload Image to S3 via ApiGateway & Lambda 与 Serverless web application for uploading files to S3 这两篇文章都有展示使用 JavasScript 为后端服务器的示例,而本示例是以 Python 为 AWS Lambda 的开发语言。

步骤 1. 创建 Lambda 函数

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

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

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

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

设定 Lambda 函数如下

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

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

步骤 2. 布署 Lambda 函数

因为这次代码的功能为读取用户透过 HTTP POST 请求所传递过来的图片,图片内容已经事先转换成 base64 格式,收到 base64 格式的字符串后,转换成图片,并上传到 S3 ,代码如下:

import json
import base64
import boto3# base64 字符串转换后的图片
image_filename = '/tmp/inputimage.jpg'
# 存放图片的 S3 存储桶 
output_bucket = 'lambda2s3image'
# 存放在 S3 存储桶中的档案名称
s3_key_value = 'apigateway2S3.jpg's3_client = boto3.client('s3')def lambda_handler(event, context):requestMethod = event['httpMethod']# HTTP 请求方式为 POST 才做后续处理if requestMethod=='POST':# 将上传的 JSON 字符串转换成字典requestBody = json.loads(event['body'])# 将上传的 base64 字符串转换成字组,再转换成 binary 格式image_64_decode = base64.decodebytes(requestBody['key'].encode())# 暂存在 Lambda 的文件系统中image_result = open(image_filename, 'wb')image_result.write(image_64_decode)image_result.close()# 上传到 S3 存储桶s3_client.upload_file(image_filename, output_bucket, s3_key_value,ExtraArgs={'ACL': 'public-read','ContentType':'image/jpeg'})s3_url = 'https://' + output_bucket + '.s3.amazonaws.com/' + s3_key_valuereturn {'statusCode': 200,'body': s3_url}else:# HTTP 请求方式非 POST 回传错误return {'statusCode': 200,'body': 'method error'}

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

步骤 3. 创建 S3 存储桶

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

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

单击创建存储桶

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

创建存储桶的配置如下:

常规配置

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

对象所有权

  • ACL 已启用

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

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

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

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

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

步骤 4. 添加 API Gateway 触发器

在 Lambda 主画面上方找到添加触发器按钮,如下图所示。

在这里插入图片描述
图 8. 在 Lambda 主画面中进行添加触发器

进入添加触发器画面,配置如下:

添加触发器

  • 触发器配置: API Gateway
  • Intent: Create a new API
  • API type: HTTP API
  • Security: Open
    Additional settings
  • API name: API2Lambda-API
  • Deployment stage: default
  • 勾选 Cross-origin resource sharing (CORS)

在这里插入图片描述
图 9. 在添加触发器画面中进行 API Gateway 配置

添加触发器后可以在配置中查看触发器的结果,如下图所示。

在这里插入图片描述
图 10. 在配置中查看触发器

步骤 5. 使用 Postman 进行测试

接著使用常见的 API 测试软件来进行测试,在本机端打开 Postman,并输入相关的配置。

  • URL 网址:将上图中的 API endpoint 输入
  • 请求方法: POST
  • Body: 选择 raw,格式为 JSON

内容为部分是将 CSDN 的图示转换成 base64 的格式,Python 的相关代码是,可以在本地端运行。

# convert base64 to image 
import base64
image = open('csdn-logo.jpg', 'rb')
image_read = image.read()
image_64_encode = base64.encodebytes(image_read)
print(image_64_encode)

将著将以下内容张贴到 Postman 中即可。

{"key": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU\nFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo\nKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABYAKADASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6pooo\noAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK4j4mfEC08F2aRpGLvV7gf6P\nag/hubHIXP4noO5CbUVdlwhKpLlitTrtTv7bS9PuL6/lWG1t0MkkjdFA/wA9K5bwl8RdD8UXMFrY\nPIt3P5jJA4G4IhxubHC57DOe9fNPjDXfFviBnuNfbUPsxOREY2jgT0wvT8evvXMW/neen2bzPOz8\nvl53Z9sVzPEa6LQ9Wnli5Peep930V8yeCfiX4o8KvFH4it76+0fIUm5RhJGPVXYc/QnHpivpDSNS\ntNY023v9OnWe0nXfHIvQj+h7EdjW0KinsefiMNOg/e27luiiitDnCiobi7trbH2m4hhz08xwufzq\n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\nRQAUUUUAFFFFAH//2Q==\n"
}

接著点击送出 Send 就得到完整的请求信息响应 (Response),即为上传到 S3 的网址,因为设定的 ACL 是可以观看的,所以可以直接打开观看结果。

在这里插入图片描述

图 11. 在postman进行 API 测试

下图为在网页上观看 S3 存储桶中的图片。

在这里插入图片描述

图 12. 观看上传到 S3 的结果

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

参考资料

  • AWS Upload Image to S3 via ApiGateway & Lambda, https://github.com/imran9m/aws-api-lambda-s3-image-upload
  • Serverless web application for uploading files to S3, https://github.com/evanchiu/serverless-galleria/tree/master/uploader
  • 使用 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

http://chatgpt.dhexx.cn/article/Mf8F2Gsj.shtml

相关文章

12306查询车票(爬虫小练_1)

文章目录 导入模块导入City.json文件内容分析撸代码city.json文件 导入模块 # 数据请求模块 import requests # 序列化和反序列化 import json # 表格格式输出(美化输出) import prettytable as pt 导入City.json文件 里面存放的是城市的对应标识(放在文…

K8S+Jenkins+Harbor+Docker+gitlab集群部署

K8SJenkinsHarborDockergitlab服务器集群部署 所需资源下载地址 将此文章写给我最心爱的女孩 目录 K8SJenkinsHarborDockergitlab服务器集群部署1.准备以下服务器2.所有服务器统一处理执行2.1 关闭防火墙2.2 关闭selinux2.3 关闭swap(k8s禁止虚拟内存以提高性能&a…

多项式运算

多项式求逆 已知 f ( x ) f(x) f(x),求 g ( x ) g(x) g(x)满足 f ( x ) g ( x ) ≡ 1 ( m o d x n ) f(x)g(x)\equiv 1\pmod{x^n} f(x)g(x)≡1(modxn)。 若 f 0 0 f_00 f0​0,那么显然不可能存在形式幂级数 g ( x ) g(x) g(x)满足条件。于是假定 f 0 …

Beyond Accuracy:Behavioral Testing of NLP Models with Checklist 论文阅读

本文主要介绍以及翻译一篇ACL2020 Best Paper Beyond Accuracy:Behavioral Testing of NLP Models with Checklist Abstract 尽管传统评估模型好坏的方法是在测试集上观察accuracy指标,然而这个指标常常高估了NLP模型的真实表现,而另外一些评估模型的方法…

国密 SM4 高并发服务 加压测服务 加生成秘钥 结合上篇一起使用 国密 SM2 SM3 SM4 后续升级版本,内容丰富单独写一篇百万压测4000毫秒加解密

介绍 这篇是专门适用于高并发场景的加解密功能服务,提供了并发代码 ,压测代码 以及压测报告结合上篇文章一起使用最好,先看上篇在看这篇,循序渐进,上篇主要看SM4 方面即可其他概要观看即可,有需要可以看看也…

创建dependencies.gradle文件报错

创建AS项目统一管理build.gradle但是报错 1.Only Project and Settings build scripts can contain plugins {} blocks 大概意思,是使用plugins目前还不能在自己创建的gradle文件中使用所以还是需要使用apply plugin 2.dependencies.gradle No signature of method…

JCE cannot authenticate the provider BC

我是用hutool做RSA加密时候出现这个问题的,具体原因网上各说各的,解决办法也试过下载jar、配置jvm,用是能用,但是我们是在公共包写的,部署新服务的时候就麻烦了。 看了下hutool报错的地方,顺着找了找&#…

JDK8安装JCE无限强度

原文:https://www.jianshu.com/p/de81059a9e97 https://blog.csdn.net/arctan90/article/details/68066660 报错提示: Exception in thread "main" org.jasypt.exceptions.EncryptionOperationNotPossibleException: 下载jar:h…

java jce配置_jce_policy安装【java密码扩展无限制权限策略文件安装】

下载与JDK或JRE对应版本的jce文件包,当前机器的jdk为1.8,所以下载jce_policy-8.zip。 下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\…

java jce配置_配置jce开发环境 | 学步园

虽然JDK1.4将java安全包包含在核心库中,但如果不对jce进行配置,也没办法使用jce进行开发。 首先从sun网上下载jce1.2.2(我在网上看到的都是下载一个包,没用sun默认的),然后把解压得到的lib里面的所有jar文件拷到your_jdk\jre\lib\…

java jce-KeyGenerator(密钥生成)

java jce-KeyGenerator(密钥生成) 在开发时,总要涉及到数据的加密与解密,之前一直有些糊涂,最近看了 jce.jar的源码,来整理记录一下 接着上篇 java jce-Cipher(加密、解密) 来介绍…

java jce-Cipher(加密、解密)

java jce-Cipher(加密、解密) 在开发时,总要涉及到数据的加密与解密,之前一直有些糊涂,最近看了 jce.jar的源码,来整理记录一下 1、概念 JCA(Java Cryptography Architecture): J…

什么是文件扩展名 JCE?

有没有人给您发送过 JCE文件,而您却不知道该如何打开?可能您在电脑上发现了一个 JCE文件却不知道这是做什么用的?Windows 可能会告诉您无法打开文件,或者最糟糕的是,您可能会收到一个JCE文件相关的错误信息。 打开JCE文…

JAVA加密--JCA、JCE、CSP概念、体系架构与使用示例

1 概念 JCA: Java密码体系结构 Java Cryptography Architecture JCE(Java Cryptography Extension),在早期JDK版本中,由于受美国的密码出口条例约束,Java中涉及加解密功能的API被限制出口,所以Java中安全组…

JCE的功能分析

什么是JCE JCE(Java Cryptography Extension)即Java密码扩展,是JDK1.4的一个重要部分。它是一组包,它们提供用于加密、密钥生成算法和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提…

第四章 数据关联分析方法

基本概念和方法 关联规则和算法应用 基本概念和术语 关联规则算法应用: 一个关联规则分析的例子—————超市购物篮分析 不要看 后面数字看不懂 项集:是指项的集合。包含k个项的项集称为k-项集 支持度:若A是一个项集,则A的…

关联性——典型相关分析

1、作用 典型相关分析是研究多个变量和多个变量之间的线性相关关系,能够揭示出两组变量之间的内在联系。首先在每组变量中找到变量的线性组合,使得两组的线性组合之间具有最大的相关系数。然后选取和最初挑选的这对线性组合不相关的线性组合&#xff0c…

数据挖掘——关联分析基础介绍(上)

一、前提介绍: 啤酒与尿布: 在美国有婴儿的家庭中,一般是母亲在家中照看婴儿,年轻的父 亲前去超市购买尿布。父亲在购买尿布的同时,往往会顺便为自己购 买啤酒,这样就会出现啤酒与尿布这两件看上去不相干…

R语言做关联分析

目录 (一)案例简介 案例使用 数据预处理 分析结果 完整代码 目录 关联分析 理解关联分析的相关概念:关联分析、支持度、置信度、强规则、项集、频繁项集等。 掌握关联分析的基本方法:数据是事务的或关系的,如何由大量…

数据关联分析

数据挖掘算法:关联分析一(基本概念) 一.基本概念 我们来看上面的事务库,如同上表所示的二维数据集就是一个购物篮事务库。该事物库记录的是顾客购买商品的行为。这里的TID表示一次购买行为的编号,items表示顾客购买了…