【原创】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下面,访问的时候 ...
随机推荐
- 新添加的磁盘大于2T 的分区方法
环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted /dev/sdb 查看:(par ...
- [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组
题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...
- jQuery + ashx 实现图片按比例预览、异步上传及显示
目录(?)[-] 注ajax 方式异步读取数据库显示图片的方法同上传一致使用 ashx 返回base64字符串在客户端处理即可 记录一个让我纠结良久的问题 在Page_Load 函数中只有第一个用 S ...
- shell 变量的 {} ()
1.Shell中变量的原形:${var} 变量的原形:${var},即是加一个大括号来限定变量名称的范围 [root@bogon sh]# aa='ajax' [root@bogon sh]# e ...
- pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'
pyspark: AttributeError: 'NoneType' object has no attribute 'setCallSite' 我草,是pyspark的bug.解决方法: prin ...
- 在linux上安装python
转自:https://www.cnblogs.com/qq631243523/p/10191726.html 一,前言 centos7默认是装有python的,咱们先看一下 [root@glh ~ 2 ...
- go语言-从控制套获取用户输入
一.使用fmt.Scanln()--获取一行的输入 //案例:从控制台获取姓名,年龄,薪水,是否通过 package main import "fmt" func main() { ...
- H3CNE学习6 静态路由
一.相应命令 1.查看路由表 2.直连路由 3.静态路由配置 4.路由器转发数据包 二.静态路由2 1.路由优先级 管理距离即优先级,值越小就越优先 2.路由度量 如果上下都是使用的相同的路由协议那么 ...
- 转 Storm JAVA_HOME is incorrectly set.
问题可能有两个原因: 1.在环境变量中未设置JAVA_HOME变量名称. 解决办法: 在环境变量中添加. 或者在storm中的bin文件下有一个storm-config.cmd,使用文本打开,查询JA ...
- 转微软最新的Web服务器Katana发布了版本3
作者 Jonathan Allen ,译者 邵思华 发布于 2014年8月28日 Katana是微软对OWIN(基于.NET的开放Web接口)标准自行开发的一套实现方案,它是一种相对于IIS及Syst ...