我有一个简单的处理程序,可以从 api 获取数据,并每 10 分钟将 JSON 内容保存在 GCP 存储桶中。
export const handler: Handler = async () => {
const credentials = require("./project-name-digits.json");
const storage = new Storage({
projectId: credentials.project_id,
credentials,
});
const bucket = storage.bucket("my-bucket");
const result = await axios("example.com/api");
const file = bucket.file("my-filename");
const contents = JSON.stringify(result.data);
file.save(contents);
return {
statusCode: 200,
};
};
我的netlify.toml文件指定包含json文件
[functions]
node_bundler = "esbuild"
[functions."scheduled-lending"]
schedule = "*/10 * * * *"
included_files = ["project-name-digits.json"]
我能够在本地运行 fn 并且它会毫无错误地写入 GCP 存储桶。
我可以记录凭据,并且当处理程序在产品中运行时它确实会正确显示,但它实际上不会写入 GCP 存储桶。
我将服务帐户设置为存储桶的
Storage Object Admin
角色。
我在这里缺少什么?
我不是 Netlify 函数方面的专家,但如果它们的行为与 Google Cloud Functions 完全相似,那么您有义务等待所有承诺解决,然后再向调用者发送响应。如果不这样做,就意味着运行时可能会关闭任何正在进行的异步工作,以节省计算成本。
这意味着您应该等待
file.save()
的结果以确保它完成。