我正在尝试从AWS Lambda内部调用AIRTABLE中的rest api端点,但没有成功。我没有得到错误,没有输出。
如果我使用node调用相同的代码,它就能工作。
我可以在我的代码中使用Axios。
纯airtable代码(works)
var Airtable = require('airtable');
var base = new Airtable({apiKey: 'keyoMYSECRETKEY'}).base('Mybaseid');
base('MyBase').select({maxRecords: 3,view: "MyView"}).eachPage(function page(records, fetchNextPage) {
// This function (`page`) will get called for each page of records.
records.forEach(function(record) {
console.log('Retrieved',JSON.stringify(record.get('Session Information')));
});
fetchNextPage();
}, function done(err) {
if (err) { console.error(err); return; }
});
如果我把它放在Lambda处理程序中-我什么也得不到。
const axios = require('axios')
const url = 'https://checkip.amazonaws.com/';
var Airtable = require('airtable');
var base = new Airtable({apiKey: 'keySECRETKEY'}).base('MYBASEID');
let response;
exports.lambdaHandler = async (event, context) => {
try {
base('MyBase').select({maxRecords: 3,view: "MyView"}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) { //HERE - NOTHING HAPPENS
console.log('Retrieved',JSON.stringify(record.get('Session Information')));
});
fetchNextPage();
}, function done(err) {
if (err) { console.error(err); return; }
});
const ret = await axios(url); //THIS WORKS
response = {
'statusCode': 200,
'body': JSON.stringify({
message: 'hello world - boo',
location: ret.data.trim()
})
}
} catch (err) {
console.log(err);
return err;
}
return response
};
为了从AWS Lambda内部调用Airtable API,我遗漏了什么?
发布于 2021-09-02 17:18:57
似乎您的lambda在您试图执行的API调用执行之前终止了。我相信这将通过使用同步lambda或者正确使用带有await调用的promises来解决。
发布于 2021-09-06 07:15:42
解决此问题的最好方法是回到基础知识。
看看您是否可以通过将一个更简单的fetch请求包装到一个lambda处理程序中来获得一个有意义的控制台日志:
const baseId = 'exampleAppId123';
const tableName = 'Table 1';
const api_key = 'keyExample123';
const url = `https://api.airtable.com/v0/${baseId}/${tableName}?api_key=${api_key}`;
exports.lambdaHandler = async () => {
const res = await fetch(url)
.then(res => res.json())
.then(data=>console.log(data))
.then(() => {
//do more stuff
})
}
如果你做不到,那就报告吧。或者更好的是,无论哪种方式,都可以报告,因为这肯定会在未来帮助更多的人。
最坏的情况?上面的代码仍然没有做任何事情。如果发生这种情况,我建议遵循@Shoty的第一直觉,通过删除async/await语法并返回chained,将此代码转换为同步获取请求。从UX的角度来看,并不是说这种阻塞行为是可以接受的,但它至少应该有助于调试。
https://stackoverflow.com/questions/68534863
复制相似问题