今天正好遇到了这个问题,就在官方文档里查询,然后根据他的说明整理了一下大致的流程,详细的请参考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. 32-python基础-python3-列表永久排序方法-sort()方法

    1-数值的列表或字符串的列表,能用 sort()方法排序. 实例1: 实例2: 2-可以指定 reverse 关键字参数为 True,让 sort()按逆序排序. 实例1: 3-关于 sort()方法 ...

  2. css3 新特性(动画)

    1. 制作动画 先定义动画,再使用(调用)动画 使用 keyframes(关键帧)定义动画(类似定义类选择器) @keyframes 动画名称{ 0%{ width:100px; } 100%{ wi ...

  3. ubuntu 下 使用 Git 维护 linux kernel版本

    学习linux内核一段时间,意识到内核的版本需要严格控制.利用Git工具可以很轻松的完成不同开发人员不同模块之间的代码融合与版本控制 . 1. 首先,安装Git .可以参考廖雪峰的博客  https: ...

  4. redis配置篇

    配置 Redis的配置信息在/etc/redis/redis.conf下. 查看 sudo vi /etc/redis/redis.conf 核心配置选项 绑定ip:如果需要远程访问,可将此⾏注释,或 ...

  5. JAVA二分插入排序

  6. C++如何阻止一个类被实例化

    (1)定义一个无用的抽象函数,使得类成为抽象类 (2)将构造函数定义为private. 为什么要这样做? 一些工具类,没有被实例化的必要.

  7. 安装配置oh-my-zsh

    1.下载安装iterm:https://www.iterm2.com/ 2.安装zsh 查看系统当前使用的shell $ echo $SHELL /bin/bash 查看系统是否安装了zsh $ ca ...

  8. java 居民身份证的校验

    import java.text.SimpleDateFormat; import java.util.Date; /** * 验证身份证号码 身份证号码, 可以解析身份证号码的各个字段, * 以及验 ...

  9. 重新开始学习C++

    从2002年,大二的那个夏天开始,就接触了C++这门语言,大学那会就是在老师不停教育下,背诵C++的各种特征,完全不知道C++干嘛用的,当然自然也是不知道汇编语言,C语言是干嘛用的,老师让学就学吧.那 ...

  10. PHP FILTER_SANITIZE_STRIPPED 过滤器

    定义和用法 FILTER_SANITIZE_STRIPPED 过滤器去除或编码不需要的字符. 该过滤器是 FILTER_SANITIZE_STRING 过滤器的别名 该过滤器删除那些对应用程序有潜在危 ...