【发布时间】: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