【原创】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下面,访问的时候 ...
随机推荐
- Scrum会议博客以及测试报告
3组Alpha冲刺阶段博客目录 一.Scrum Meeting1. 第六周会议记录(链接地址:https://www.cnblogs.com/Cherrison-Time/articles/11788 ...
- Nginx编译安装和平滑升级
一.Nginx的编译安装 1.安装依赖包gcc,gcc-c++,pcre,openssl-devel 命令:yum -y install gcc gcc-c++ pcre-devel openssl- ...
- 洛谷 P1280 尼克的任务题解
题目链接:https://www.luogu.org/problem/P1280 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每 ...
- React中的State与Props
一.State 1.什么是 state 一个组件的显示形态可以由数据状态和外部参数决定,其中,数据状态为 state,外部参数为 props 2.state 的使用 组件初始化时,通过 this.st ...
- [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
使用idea连接数据库的时候,报错为 [08001] Could not create connection to database server. Attempted reconnect 3 tim ...
- 「AHOI / HNOI2017」礼物
「AHOI / HNOI2017」礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰 ...
- 行为型模式(三) 迭代器模式(Iterator)
一.动机(Motivate) 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素:同时这种"透明 ...
- python的拷贝方式以及深拷贝,浅拷贝详解
python的拷贝方法有:切片方法, 工厂方法, 深拷贝方法, 浅拷贝方法等. 几种方法都可以实现拷贝操作, 具体区别在于两点:1.代码写法不同. 2.内存地址引用不同 代码演示: import co ...
- 简述 OSI 七层协议?
OSI七层协议是一个用于计算机或通信系统间互联的标准体系. 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0. 数据链路层的功能:定义了电信号的分组方式按照以太 ...
- 文件操作2-Day3
一.文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 二.文件打开模式 1.普通打开模式 r:只读模式(不加参数则默认只读:不能写,不能追加) w:只写模式(只能 ...