[英]How to download Zip File from an s3 bucket to a local directory within a node.js lambda function
[英]Retrieve data from S3 bucket with Lambda function link to an alexa skill in node.js
我在這里嘗試做的是在S3存儲桶中檢索基本的CSV文件,但是我很難獲取它。
我首先嘗試僅從基本lambda函數(未鏈接到alexa技能)中從存儲桶中獲取數據,如下所示:
console.log('Loading function');
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = async (event, context) => {
const bucket = 'mybucket';
const key = 'myfile';
const params = {
Bucket: bucket,
Key: key,
};
try {
const data = await s3.getObject(params).promise();
var content = data.Body.toString();
var lines = content.split('\r\n');
var headers = lines[0].split(',');
var result = {};
for(var i=1;i<lines.length;i++){
var currentline = lines[i].split(',');
var obj2 = {};
for(var j=2;j<headers.length;j++){
obj2[headers[j]] = currentline[j];
}
result[currentline[0]+currentline[1]] = obj2;
}
return result;
} catch (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
throw new Error(message);
}
};
function : 它運行良好,但是后來我嘗試將其放入鏈接到我的alexa技能的lambda函數中,但沒有從函數接收任何信息:
const Alexa = require('alexa-sdk');
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
var data;
function getData(){
// Setting the bucket and files parameters
const bucket = 'mybucket';
const key = 'myfile';
const params = {
Bucket: bucket,
Key: key,
};
try {
const data = s3.getObject(params);
// Getting the Body of the response
var content = data.Body.toString();
// Splitting into a proper data structure
var result = {};
var lines = content.split("\r\n");
var headers = lines[0].replace('\r','').split(",");
for(var i=1;i<lines.length;i++){
var currentline = lines[i].split(",");
var obj2 = {};
for(var j=2;j<headers.length;j++){
obj2[headers[j]] = currentline[j];
}
result[currentline[0].toLowerCase()+currentline[1].toLowerCase()] = obj2;
}
} catch (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}.`;
console.log(message);
throw new Error(message);
}
// Sending the response back
return result;
}
const handlers = {
'LaunchRequest': function () {
// GETTING THE DATA SET
data = getData();
// Stuff here
this.emit(':responseReady');
},
'getLocalisation': function () {
//Stuff here
},
'AMAZON.HelpIntent': function () {
this.response.speak(messages.HELP);
this.emit(':responseReady');
},
'AMAZON.CancelIntent': function () {
this.response.speak(messages.STOP);
this.emit(':responseReady');
},
'AMAZON.StopIntent': function () {
this.emit(':tell', 'Bye');
},
'AMAZON.FallbackIntent': function () {
this.response.speak(messages.ERROR);
this.emit(':responseReady');
},
};
exports.handler = (event, context, callback) => {
const alexa = Alexa.handler(event, context, callback);
alexa.APP_ID = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
};
我直接從AWS Lambda IDE運行所有內容。 我認為我在Async / Await / Promise方面缺少一些東西,但我並沒有真正理解它。
我只需要放
async function getData()
和
exports.handler = async (event, context, callback) => {
// code here
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.