【问题标题】:Problems using airtable.js module in AWS lambda在 AWS lambda 中使用 airtable.js 模块的问题
【发布时间】:2021-03-30 13:12:28
【问题描述】:

我正在尝试从 AWS lambda 函数访问 Airtable。

首先,为了测试,我在本地项目中安装了 airtable.js (npm install -s airtable),编写了一个简短的测试脚本,并使用node test.js 执行。一切正常。

在适当的 node.js 函数包装器中使用完全相同的核心测试代码,我尝试在 AWS lambda 函数中运行相同的测试,但我的 CloudWatch 日志中出现错误:

Error: Cannot find module '/var/task/node_modules/abort-controller/dist/abort-controller'. Please verify that the package.json has a valid \"main\" entry

我已经尝试使用部署包中的功能代码压缩 npm 包,还尝试从 airtable 包创建 lambda 层。两者都产生相同的错误。请注意,包裹已被拾取 - 如果我尝试使用层方法,但移除层本身,则它无法找到空气表。因此,这似乎与 airtable 包尝试访问 abort-controller 的方式有关。

对于它的价值,这是我在 lambda 函数中使用的 [已编辑] 测试代码:(返回等是因为它在 API 网关调用之后运行 - 但这不是问题的一部分,因为同样的错误无论是在 lambda 控制台内测试还是通过 API 调用都会发生)

var AWS = require("aws-sdk");
AWS.config.update({ region: "eu-west-1", });

const Airtable = require('airtable');
const base = new Airtable({ apiKey: "xxxxx" }).base('yyyyy');

exports.handler = async(event) => {
    try {
        console.info('trying create');
        let records = await base('Base1').create([{
            "fields": {
                "Status": "Scored",
                "C1": "testing",
                "C2": "airtable",
                "C3": "api",
                "C4": "from",
                "C5": "node",
            }
        }, ]);
        console.info('completed create');
        let records_list = records.map(r => r.getId()).join(',');
        console.info(records_list);
        return ({statusCode: 200, body: JSON.stringify(records_list)});
    } catch (e) {
        console.error(e);
        return ({statusCode: 401, body: JSON.stringify(e)});
    }

}

我之前构建了许多 lambda,包括层和嵌入式包,因此我犯了大部分常见错误 - 我不认为我在这里重复它们。 airtable.js 有什么特别之处,这意味着这里需要不同的方法吗?

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda airtable aws-lambda-layers


    【解决方案1】:

    原来问题出在部署包的 zip 中 - 无论是在层中还是烘焙到 lambda 中,zip 文件似乎都丢失了一些东西。作为我的 terraform 配置/部署的一部分,我正在这样做,令人困惑的是,它似乎与我在不同项目中成功用于 20 多个功能和 5 层的结构和设置完全相同,但在这里它失败了.

    所以 - 至少目前的解决方案似乎是手动压缩图层包,上传到 s3,然后让 terraform 从那里获取它。

    【讨论】:

    • 您可以在 Lambda 中从哪里调用/读取 Airtable 的记录?你碰巧有一些代码示例吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2019-05-18
    • 2018-04-17
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多