首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从AWS Lambda内部调用Airtable rest API?

如何从AWS Lambda内部调用Airtable rest API?
EN

Stack Overflow用户
提问于 2021-07-27 02:31:47
回答 2查看 133关注 0票数 1

我正在尝试从AWS Lambda内部调用AIRTABLE中的rest api端点,但没有成功。我没有得到错误,没有输出。

如果我使用node调用相同的代码,它就能工作。

我可以在我的代码中使用Axios。

纯airtable代码(works)

代码语言:javascript
运行
复制
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处理程序中-我什么也得不到。

代码语言:javascript
运行
复制
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,我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-09-02 17:18:57

似乎您的lambda在您试图执行的API调用执行之前终止了。我相信这将通过使用同步lambda或者正确使用带有await调用的promises来解决。

票数 0
EN

Stack Overflow用户

发布于 2021-09-06 07:15:42

解决此问题的最好方法是回到基础知识。

看看您是否可以通过将一个更简单的fetch请求包装到一个lambda处理程序中来获得一个有意义的控制台日志:

代码语言:javascript
运行
复制
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的角度来看,并不是说这种阻塞行为是可以接受的,但它至少应该有助于调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68534863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档