参考资料:

https://github.com/sagidm/s3-resizer

https://aws.amazon.com/cn/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

https://medium.com/swlh/how-to-get-started-with-aws-lambda-9f2ac14d863a

https://www.obytes.com/blog/2019/image-resizing-on-the-fly-with-aws-lambda,-api-gateway,-and-s3-storage/

https://heropy.blog/2019/07/21/resizing-images-cloudfrount-lambda/

and so on...

  1. 创建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/*"
}
]
}
  1. 创建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),点击“创建角色”。

回到创建函数页面,选择“使用现有角色”,选择刚才创建的角色:

然后点击右下角 创建函数。

  1. 添加触发器

选择 API Gateway:

创建新 API:

安全性:打开

点击添加。

回到主界面,复制API 终端节点:

https://qzdp929f68.execute-api.ap-northeast-2.amazonaws.com/default/resize-func

  1. 桶静态网站托管配置:

回到桶设置中,属性,静态网站托管:

  • 索引文档: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

  1. 环境变量配置

BUCKET=桶名称

URL=刚才复制的终端节点URL

右上角保存。

  1. 上传函数代码.

从这里下载nodejs8.1的函数包:https://github.com/sagidM/s3-resizer/releases

函数代码部分,选择“上传.zip文件”

右上角保存。

  1. 配置测试事件(可选)

{
"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缩略图生成的更多相关文章

  1. AWS的lambda和S3之间如何连携

    今天正好遇到了这个问题,就在官方文档里查询,然后根据他的说明整理了一下大致的流程,详细的请参考AWS国际版的官方文档,这里只是作者的一个简单的流程展示. Lambda和S3连接 1.在S3的同一区域当 ...

  2. 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/ ...

  3. storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3

    Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...

  4. Amazon AWS S3 操作手册

    Install the SDK The recommended way to use the AWS SDK for Java in your project is to consume it fro ...

  5. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  6. [AWS] S3 Bucket

    云存储服务 2.1 为网站打开属性 属性和权限设置 设置bucket属性,打开功能:Static website hosting(静态网站托管) 设置bucket权限,Permissions ---- ...

  7. 基于 Apache Hudi + Presto + AWS S3 构建开放Lakehouse

    认识Lakehouse 数据仓库被认为是对结构化数据执行分析的标准,但它不能处理非结构化数据. 包括诸如文本.图像.音频.视频和其他格式的信息. 此外机器学习和人工智能在业务的各个方面变得越来越普遍, ...

  8. AWS S3 CLI的权限bug

    使用AWS CLI在S3上创建了一个bucket,上传文件的时候报以下错误: A client error (AccessDenied) occurred when calling the Creat ...

  9. AWS S3使用小结

    使用场景一:储存网站的图片,并能被任何人访问 1. 创建一个bucket,名字与需要绑定的域名一致. 例如,根域名是mysite.com,希望把所有图片放在pic.mysite.com下面,访问的时候 ...

随机推荐

  1. 新添加的磁盘大于2T 的分区方法

    环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted   /dev/sdb 查看:(par ...

  2. [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组

    题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...

  3. jQuery + ashx 实现图片按比例预览、异步上传及显示

    目录(?)[-] 注ajax 方式异步读取数据库显示图片的方法同上传一致使用 ashx 返回base64字符串在客户端处理即可 记录一个让我纠结良久的问题 在Page_Load 函数中只有第一个用 S ...

  4. shell 变量的 {} ()

    1.Shell中变量的原形:${var} 变量的原形:${var},即是加一个大括号来限定变量名称的范围   [root@bogon sh]# aa='ajax' [root@bogon sh]# e ...

  5. pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'

    pyspark: AttributeError: 'NoneType' object has no attribute 'setCallSite' 我草,是pyspark的bug.解决方法: prin ...

  6. 在linux上安装python

    转自:https://www.cnblogs.com/qq631243523/p/10191726.html 一,前言 centos7默认是装有python的,咱们先看一下 [root@glh ~ 2 ...

  7. go语言-从控制套获取用户输入

    一.使用fmt.Scanln()--获取一行的输入 //案例:从控制台获取姓名,年龄,薪水,是否通过 package main import "fmt" func main() { ...

  8. H3CNE学习6 静态路由

    一.相应命令 1.查看路由表 2.直连路由 3.静态路由配置 4.路由器转发数据包 二.静态路由2 1.路由优先级 管理距离即优先级,值越小就越优先 2.路由度量 如果上下都是使用的相同的路由协议那么 ...

  9. 转 Storm JAVA_HOME is incorrectly set.

    问题可能有两个原因: 1.在环境变量中未设置JAVA_HOME变量名称. 解决办法: 在环境变量中添加. 或者在storm中的bin文件下有一个storm-config.cmd,使用文本打开,查询JA ...

  10. 转微软最新的Web服务器Katana发布了版本3

    作者 Jonathan Allen ,译者 邵思华 发布于 2014年8月28日 Katana是微软对OWIN(基于.NET的开放Web接口)标准自行开发的一套实现方案,它是一种相对于IIS及Syst ...