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

  

Lambda和S3连接

1.在S3的同一区域当中创建2个桶

命名规则:source

Sourceresized

2.往source的S3桶中上传一张命名为HappyFace.jpg的文件

3.准备一台安装好node.js的服务器

①创建一个文件夹

mkdir examplefolder

②在这个文件夹路径下创建一个子文件夹

cd examplefolder

mkdir node_modules

③安装插件,在当前路径下

npm install async gm

④安装完毕,创建一个文件index.js

touch index.js

⑤打开index.js文本进行编辑,编辑内容如下

vi index.js

按“i”进行编辑

// dependencies

var async = require('async');

var AWS = require('aws-sdk');

var gm = require('gm')

.subClass({ imageMagick: true }); // Enable ImageMagick integration.

var util = require('util');

// constants

var MAX_WIDTH  = 100;

var MAX_HEIGHT = 100;

// get reference to S3 client

var s3 = new AWS.S3();

exports.handler = function(event, context, callback) {

// Read options from the event.

console.log("Reading options from event:\n", util.inspect(event, {depth: 5}));

var srcBucket = event.Records[0].s3.bucket.name;

// Object key may have spaces or unicode non-ASCII characters.

var srcKey    =

decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));

var dstBucket = srcBucket + "resized";

var dstKey    = "resized-" + srcKey;

// Sanity check: validate that source and destination are different buckets.

if (srcBucket == dstBucket) {

callback("Source and destination buckets are the same.");

return;

}

// Infer the image type.

var typeMatch = srcKey.match(/\.([^.]*)$/);

if (!typeMatch) {

callback("Could not determine the image type.");

return;

}

var imageType = typeMatch[1];

if (imageType != "jpg" && imageType != "png") {

callback('Unsupported image type: ${imageType}');

return;

}

// Download the image from S3, transform, and upload to a different S3 bucket.

async.waterfall([

function download(next) {

// Download the image from S3 into a buffer.

s3.getObject({

Bucket: srcBucket,

Key: srcKey

},

next);

},

function transform(response, next) {

gm(response.Body).size(function(err, size) {

// Infer the scaling factor to avoid stretching the image unnaturally.

var scalingFactor = Math.min(

MAX_WIDTH / size.width,

MAX_HEIGHT / size.height

);

var width  = scalingFactor * size.width;

var height = scalingFactor * size.height;

// Transform the image buffer in memory.

this.resize(width, height)

.toBuffer(imageType, function(err, buffer) {

if (err) {

next(err);

} else {

next(null, response.ContentType, buffer);

}

});

});

},

function upload(contentType, data, next) {

// Stream the transformed image to a different S3 bucket.

s3.putObject({

Bucket: dstBucket,

Key: dstKey,

Body: data,

ContentType: contentType

},

next);

}

], function (err) {

if (err) {

console.error(

'Unable to resize ' + srcBucket + '/' + srcKey +

' and upload to ' + dstBucket + '/' + dstKey +

' due to an error: ' + err

);

} else {

console.log(

'Successfully resized ' + srcBucket + '/' + srcKey +

' and uploaded to ' + dstBucket + '/' + dstKey

);

}

callback(null, "message");

}

);

};

编辑完毕按“Esc”退出,然后按“:wq”→enter保存退出

⑥当前路径下应有如下内容

index.js

/node_modules/gm

/node_modules/async

对如下内容进行打包

命令:

tar -czvf  ./*  ./CreateThumbnail.zip

然后把包导出来

⑦创建IAM角色

⑧在lambda上上传压缩包

⑨在lambda上进行S3的调用测试

代码如下

{

"Records":[

{

"eventVersion":"2.0",

"eventSource":"aws:s3",

"awsRegion":"us-west-2",

"eventTime":"1970-01-01T00:00:00.000Z",

"eventName":"ObjectCreated:Put",

"userIdentity":{

"principalId":"AIDAJDPLRKLG7UEXAMPLE"

},

"requestParameters":{

"sourceIPAddress":"127.0.0.1"

},

"responseElements":{

"x-amz-request-id":"C3D13FE58DE4C810",

"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"

},

"s3":{

"s3SchemaVersion":"1.0",

"configurationId":"testConfigRule",

"bucket":{

"name":"sourcebucket",

"ownerIdentity":{

"principalId":"A3NL1KOZZKExample"

},

"arn":"arn:aws:s3:::sourcebucket"

},

"object":{

"key":"HappyFace.jpg", #S3source 桶里面放的文件名

"size":1024,

"eTag":"d41d8cd98f00b204e9800998ecf8427e",

"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko"

}

}

}

]

}

⑩在S3那个sourceresized的S3桶里查看是否有文件生成

生成为成功,没有内容再调查问题原因。

AWS的lambda和S3之间如何连携的更多相关文章

  1. AWS S3 递归上传文件和递归下载文件, 以及S3之间拷贝文件夹

    1. 递归上传文件: aws s3 cp 本地文件夹 s3://bucket-name -- recursive --region us-east-1 2. 递归下载S3上的文件夹: cd  本地下载 ...

  2. [AWS] Serverless & Lambda

    因为Lambda 所以Serverless 进化过程 课程章节:https://edu.51cto.com//center/course/lesson/index?id=199646 作用和优势 ev ...

  3. AWS CLI 中使用S3存储

    登录 通过控制面板, 在S3管理器中创建一个新的bucket 所有AWS服务 -> 安全&身份 -> IAM -> 组, 创建一个新的组, 例如 "s3-user& ...

  4. AWS Lambda 借助 Serverless Framework,迅速起飞

    前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...

  5. AWS:3. S3

    主要内容 1.S3入门 2.S3安全性 对象 权限 访问策略 3.S3实战--BAAS 应用与定价 S3入门 S3概念 S3是simple storge server简单存储服务 相当于网盘,例如百度 ...

  6. AWS S3国内与国外的区别

    S3云存储国际版目前正被某墙,国内部分地区只能下载不能上传,所以建议S3使用国内AWS的. 国内S3与国外S3在编程时注意以下几点: 1)URL不通用 国际版的S3可以使用不带Region的URL,例 ...

  7. Automated EBS Snapshots using AWS Lambda & CloudWatch

    Overview In this post, we'll cover how to automate EBS snapshots for your AWS infrastructure using L ...

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

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

  9. [Unity3D] 05 - Access to DB or AWS

    可以选择连接本地服务器,或者云服务器. 参考源代码 : https://www.cnblogs.com/wuzhang/p/wuzhang20141202.html (1) 功能:点击一下按键,然后访 ...

随机推荐

  1. [轉]C/C++中的volatile使用時機?

    不知各位對volatile(揮發性的)這個字陌不陌生? 我相信大家在一些程式或多或少都看 過這個字眼, 但是究竟要在何種場合用它呢?.當然一定是有需要, C/C++才會有這個保留字, 否則只是增加pr ...

  2. qs.parse()、qs.stringify()使用方法, 以及在axios 中怎么用?

    最近一直被纠结于传输格式,就在这里整理一下吧. qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装.   (axios 自带qs , // import qs from ' ...

  3. Redis哨兵机制(sentinel)

    1.简介: 1.是什么: Redis-Sentinel是Redis官方推荐的高可用(HA)方案,当用Reids 做master-slave高可用方案时,假如master宕机了,redis本身(包括它的 ...

  4. shell同时输出多行信息

  5. Codeforces 1111E DP + 树状数组 + LCA + dfs序

    题意:给你一颗树,有q次询问,每次询问给你若干个点,这些点可以最多分出m组,每组要满足两个条件:1:每组至少一个点,2:组内的点不能是组内其它点的祖先,问这样的分组能有多少个? 思路:https:// ...

  6. qfile读取txt文件

    QFile f("D:\\测试数据\\单波束数据\\灯浮.TGT"); if (!f.open(QIODevice::ReadOnly|QIODevice::Text))//打开指 ...

  7. 运行连接Oracle数据库时,Idea报错: Error : java 不支持发行版本5

    按照上面的截图步骤,一步步往下走,再运行程序时就不会报错了. 原文链接:https://blog.csdn.net/qq_22076345/article/details/82392236 感谢原文作 ...

  8. rest framework之路由组件

    一.路由组件的使用 1.使用实例 在视图中继承GenericViewSet类来完成功能时,需要自己对路由的写法有所改变,需要在as_view中传入actions字典参数: re_path('books ...

  9. mongoose 常用数据库操作 查询

    条件查询 Model.find(conditions, [fields], [options], [callback]) demo1 try.js var User = require(". ...

  10. node-mysql连接数据库

    const mysql=require('mysql') const con=mysql.createConnection({ host:'localhost', user:'root', passw ...