-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
90 lines (79 loc) · 2.48 KB
/
index.js
File metadata and controls
90 lines (79 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const AWS = require('aws-sdk');
const S3 = new AWS.S3();
const bucket = 'bucketname_tochange';
const file = 's3select.json';
exports.handler = async (event) => {
//where condition (where key = value)
var key = 'esempio_code';
var value = 'seselect_lambda';
//main query
var query = ('SELECT * FROM s3object[*].esempio[*] s ');
if (key != null) {
query = query.concat('WHERE s.').concat(key).concat("='").concat(value).concat("';");
} else query = query.concat(";");
//const params for get data
const params = {
Bucket: bucket,
Key: file,
ExpressionType: 'SQL',
Expression: query,
InputSerialization: {
JSON: {
Type: 'DOCUMENT',
}
},
OutputSerialization: {
JSON: {
RecordDelimiter: ','
}
}
}
//get data with function with s3-select
const data = await getData(params);
//custom payload response
var responseCodeployJson = { msg: "success", status: "success", status_code: "200", data: data };
var resp = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Authorization, Cache-Control, Origin, X-Requested-With, Content-Type, x-api-key",
"Access-Control-Allow-Methods" :"HEAD,GET,POST,PUT,DELETE,PATCH,OPTIONS",
"Access-Control-Allow-Credentials": "true",
"Content-Type":"application/json"
},
body: JSON.stringify(responseCodeployJson),
};
return resp;
};
// getdata in JSON object with s3select function
const getData = async (params) => {
return new Promise((resolve, reject) => {
S3.selectObjectContent(params, (err, data) => {
if (err) { reject(err); }
if (!data) {
reject('Empty data object');
}
const records = []
data.Payload.on('data', (event) => {
// data are inside event.Records
if (event.Records) {
records.push(event.Records.Payload);
}
})
.on('error', (err) => {
reject(err);
})
.on('end', () => {
let recordString = Buffer.concat(records).toString('utf8');
recordString = recordString.replace(/\,$/, '');
recordString = `[${recordString}]`;
try {
const recordData = JSON.parse(recordString);
resolve(recordData);
} catch (e) {
reject(new Error(`Unable to convert data to JSON object. ${params.Expression}`));
}
});
});
})
}