【问题标题】:Authenticate AWS lambda against Google Sheets API针对 Google Sheets API 验证 AWS lambda
【发布时间】:2020-06-17 20:34:02
【问题描述】:

我正在尝试创建一个 aws lambda 函数,该函数将使用 Google Sheet API 从多个 Google Sheets 文档中读取行,然后将它们合并并写入另一个电子表格。为此,我根据几个教程完成了所有必要的步骤:

  • 为 AWS 用户创建凭证以获取密钥对。
  • 创建一个 Google 服务帐户,下载 credentials.json 文件。
  • 与 Google 服务帐户client_email共享每个必要的电子表格。

在本地执行程序时,它运行良好,它使用 credentials.json 文件成功登录并读取和写入所有必要的文件。

但是,当使用 serverless 框架和 google-spreadsheet 将其上传到 AWS Lambda 时,程序会在身份验证步骤中静默失败。我尝试按照this question 中的建议更改权限,但仍然失败。该文件已正确读取,我可以将其打印到控制台。

这是简化的代码:

async function getData(spreadsheet, psychologistName) {
    await spreadsheet.useServiceAccountAuth(clientSecret);

    // It never gets to this point, it fails silently

    await spreadsheet.loadInfo();

    ... etc ...    
}


async function main() {
    const promises = Object.entries(psychologistSheetIDs).map(async (psychologistSheetIdPair) => {
        const [psychologistName, googleSheetId] = psychologistSheetIdPair;
        const sheet = new GoogleSpreadsheet(googleSheetId);
        psychologistScheduleData = await getData(sheet, psychologistName);
        return psychologistScheduleData;
    });
    //When all sheets are available, merge their data and write back in joint view.
    Promise.all(promises).then(async (psychologistSchedules) => {
        ... merge the data ...
    });
}


module.exports.main = async (event, context, callback) => {
  const result = await main();
  return {
    statusCode: 200,
    body: JSON.stringify(
      result,
      null,
      2
    ),
  };

【问题讨论】:

    标签: amazon-web-services aws-lambda google-sheets-api


    【解决方案1】:

    我解决了,

    虽然在本地拥有 Promise.all(promises).then(result =>...) 最终返回了值并执行了 then() 中的内容,但 aws lambda 在解决承诺之前返回。

    这解决了它:

    const res = await Promise.all(promises);
    mergeData(res);
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2017-08-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2021-04-09
      • 2019-12-15
      相关资源
      最近更新 更多