原创aws s3 lambda缩略图生成

Posted rxbook

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创aws s3 lambda缩略图生成相关的知识,希望对你有一定的参考价值。

参考资料:

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>

注意上面的 HostNameReplaceKeyPrefixWith 内容分别为刚才复制的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缩略图生成的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda使用S3

[AWS][Serverless] 无服务器Serverless 图像缩略图应用

从视频生成的 AWS mediaconvert 缩略图被旋转?

为亚马逊 s3 上的每个视频商店创建缩略图的最佳方法是啥?

AWS S3仅允许来自存储桶的映像显示在特定IP地址上

Django 简单缩略图与 sorl-thumbnail 的区别