今天正好遇到了这个问题,就在官方文档里查询,然后根据他的说明整理了一下大致的流程,详细的请参考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. Spark使用Java读取mysql数据和保存数据到mysql

    原文引自:http://blog.csdn.net/fengzhimohan/article/details/78471952 项目应用需要利用Spark读取mysql数据进行数据分析,然后将分析结果 ...

  2. PHP-最长有效括号

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()"输出: 2解释: 最长有效括号子串为 "()" ...

  3. koa 中间件 koa-art-template 的使用

    例子 const Koa = require('koa'); const render =require('koa-art-template'); const path= require('path' ...

  4. 异步ajax请求数据处理

    jQuery.ajax(url,[settings]) 概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax ...

  5. 数据结构(c语言版,严蔚敏)第3章栈和队列

    第3章栈和队列

  6. 数组对象用map修改键名

    用vue组件需要使用的数据格式和后台返回的不一样 console.log(res); this.optionsEp = res.map(item => { return { value: ite ...

  7. Tool ALL Framework

    //https://www.cnblogs.com/jiftle/p/10895260.html C++ 资源大全 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web应用框架.人工智 ...

  8. 屏幕尺寸,分辨率,PPI,像素之间的关系

    什么是屏幕尺寸? 华为荣耀7的尺寸是5.2英寸.这个5.2英寸是手机屏幕对角线的长度. 1英寸(inch)=2.54厘米(cm) 什么是分辨率? 华为荣耀7的分辨率是1920PX*1080PX.像素是 ...

  9. (转)OpenFire源码学习之十五:插件开发

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43418493 Plugin接口规范 插件是openfire功能的增强表现,它的主要任务: ...

  10. ASP.NET Core学习——2

    Application Startup ASP.NET Core为应用程序提供了处理每个请求的完整控制.Startup类是应用程程的入口(entry point),这个类可以设置配置(configur ...