首先创建lambda函数:
const AWS = require('aws-sdk')
const s3Zip = require('s3-zip')
exports.handler = function (event, context) {
console.log('event', event)
const region = event.region
const bucket = event.bucket
const folder = event.folder
const files = event.files
const zipFileName = event.zipFileName
// Create body stream
try {
const body = s3Zip.archive({ region: region, bucket: bucket}, folder, files)
const zipParams = { params: { Bucket: bucket, Key: folder + zipFileName } }
const zipFile = new AWS.S3(zipParams)
zipFile.upload({ Body: body })
.on('httpUploadProgress', function (evt) { console.log(evt) })
.send(function (e, r) {
if (e) {
const err = 'zipFile.upload error ' + e
console.log(err)
context.fail(err)
}
console.log(r)
context.succeed(r)
})
} catch (e) {
const err = 'catched error: ' + e
console.log(err)
context.fail(err)
}
}
调用lambda函数:
const AWS = require('aws-sdk')
const region = 'bucket-region'
const bucket = 'name-of-s3-bucket'
const folder = 'name-of-bucket-folder/'
const file1 = 'Image A.png'
const file2 = 'Image B.png'
const file3 = 'Image C.png'
const file4 = 'Image D.png'
AWS.config.update({
region: region
})
const lambda = new AWS.Lambda()
const files = [file1, file2, file3, file4]
const payload = JSON.stringify({
'region' : region,
'bucket' : bucket,
'folder' : folder,
'files' : files,
'zipFileName': 'bla.zip'
})
const params = {
FunctionName : 'NAME_OF_YOUR_LAMBDA_FUNCTION',
Payload : payload
}
lambda.invoke(params, function (err, data) {
if (err) console.log(err, err.stack) // an error occurred
else console.log(data) // successful response
})
上传lambda压缩包:
https://docs.aws.amazon.com/l…
使用go来调用lambda函数: