【原创】aws s3 lambda缩略图生成
参考资料:
https://github.com/sagidm/s3-resizer
https://medium.com/swlh/how-to-get-started-with-aws-lambda-9f2ac14d863a
https://heropy.blog/2019/07/21/resizing-images-cloudfrount-lambda/
and so on...
创建S3桶
https://s3.console.aws.amazon.com/s3/home?region=ap-northeast-2
点击“创建存储桶”,输入名称(假如叫做n-test-2),选择区域。
![]()
设置权限:
- 取消勾选“阻止所有公共访问”
- 存储桶策略输入如下代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::n-test-2/*"
}
]
}
创建Lambda函数
https://ap-northeast-2.console.aws.amazon.com/lambda/home?region=ap-northeast-2#/functions
点击“创建函数”,输入函数名称(假设叫做resize-func),运行语言选择“Node.js 8.10”(因为目前可用的demo包就是nodejs8.1的版本)
![]()
展开“权限”部分,创建自定义角色,跳转到IAM控制台:
![]()
创建策略,跳转到新页面:
![]()
JSON里面输入如下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::n-test-2/*"
}
]
}
注意上面的 Resource里面是桶名称。
下一步,输入一个名称,比如resize-policy,然后点击创建。
回到创建角色页面,搜索刚才创建的策略并选中:
![]()
然后再搜索AmazonS3FullAccess,并选中:
![]()
点击下一步,再下一步,输入角色名称(假设resize-role),点击“创建角色”。
回到创建函数页面,选择“使用现有角色”,选择刚才创建的角色:
![]()
然后点击右下角 创建函数。
![]()
添加触发器
选择 API Gateway:
![]()
创建新 API:
![]()
安全性:打开
![]()
点击添加。
回到主界面,复制API 终端节点:
https://qzdp929f68.execute-api.ap-northeast-2.amazonaws.com/default/resize-func
桶静态网站托管配置:
回到桶设置中,属性,静态网站托管:
- 索引文档:index.html
- 错误文档:error.html
- 重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals/>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>qzdp929f68.execute-api.ap-northeast-2.amazonaws.com</HostName>
<ReplaceKeyPrefixWith>default/resize-func?path=</ReplaceKeyPrefixWith>
<HttpRedirectCode>307</HttpRedirectCode>
</Redirect>
</RoutingRule>
</RoutingRules>
注意上面的 HostName 和 ReplaceKeyPrefixWith 内容分别为刚才复制的API终端节点的值。
- 复制上面的终端节点:http://n-test-2.s3-website.ap-northeast-2.amazonaws.com
![]()
环境变量配置
BUCKET=桶名称
URL=刚才复制的终端节点URL
![]()
右上角保存。
上传函数代码.
从这里下载nodejs8.1的函数包:https://github.com/sagidM/s3-resizer/releases
![]()
函数代码部分,选择“上传.zip文件”
![]()
右上角保存。
配置测试事件(可选)
{
"queryStringParameters": {
"path": "300x300/pic2.jpg"
}
}
注意有个细节:300x300,是字母x,不是乘号(×)
此时访问原图: http://n-test-2.s3-website.ap-northeast-2.amazonaws.com/pic2.jpg
运行测试,会生成300*300的缩略图:
http://n-test-2.s3-website.ap-northeast-2.amazonaws.com/300x300/pic2.jpg
【原创】aws s3 lambda缩略图生成的更多相关文章
- AWS的lambda和S3之间如何连携
今天正好遇到了这个问题,就在官方文档里查询,然后根据他的说明整理了一下大致的流程,详细的请参考AWS国际版的官方文档,这里只是作者的一个简单的流程展示. Lambda和S3连接 1.在S3的同一区域当 ...
- Upload a file with $.ajax to AWS S3 with a pre-signed url
转载自:https://gist.github.com/guumaster/9f18204aca2bd6c71a24 生成预签名的Demo文档:https://docs.aws.amazon.com/ ...
- storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3
Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...
- Amazon AWS S3 操作手册
Install the SDK The recommended way to use the AWS SDK for Java in your project is to consume it fro ...
- Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传
背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...
- [AWS] S3 Bucket
云存储服务 2.1 为网站打开属性 属性和权限设置 设置bucket属性,打开功能:Static website hosting(静态网站托管) 设置bucket权限,Permissions ---- ...
- 基于 Apache Hudi + Presto + AWS S3 构建开放Lakehouse
认识Lakehouse 数据仓库被认为是对结构化数据执行分析的标准,但它不能处理非结构化数据. 包括诸如文本.图像.音频.视频和其他格式的信息. 此外机器学习和人工智能在业务的各个方面变得越来越普遍, ...
- AWS S3 CLI的权限bug
使用AWS CLI在S3上创建了一个bucket,上传文件的时候报以下错误: A client error (AccessDenied) occurred when calling the Creat ...
- AWS S3使用小结
使用场景一:储存网站的图片,并能被任何人访问 1. 创建一个bucket,名字与需要绑定的域名一致. 例如,根域名是mysite.com,希望把所有图片放在pic.mysite.com下面,访问的时候 ...
随机推荐
- goroutine的使用与常见错误
goroutine的使用时常见错误 goroutine是Golang 的核心之一,在使用时,一般都要配合channel一起使用. 在使用时,经常会遇到一些错误,包括: 不输出 输出与希望输出不一致 a ...
- springboot集成redis 附redis基本操作类
1 pom.xml添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数
遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...
- python3 生成二维码并存入word文档
#二维码的制作与解析 import qrcode,zxing,os s='https:////www.baidu.com/' res=qrcode.make(data=s) res.show() re ...
- Java精通并发-轻量级锁与重量级锁的变化深入详解
在上一次https://www.cnblogs.com/webor2006/p/11446129.html的理论的最后谈到了锁的演化,如下: 下面具体来阐述一下: 偏向锁:它是针对一个线程来说, 它的 ...
- 使用globalData函数设置全局变量
在app.js中设置需要的全局变量的参数,比如公司名称等 //app.js App({ globalData: { title: 'tomatocc' } }) 然后就可以在某个页面的js文件中(比如 ...
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- 前端知识总结--2 js部分
1. JavaScript的『预解释』与『变量提升』 先看以下代码输出啥? var a= 1; function f() { console.log(a); var a = 2; } f(); 首先答 ...
- Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库
1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...
- js数组的操作大全
用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...