You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase Functions中运行Amazon Polly?部署失败求排查

问题排查与修复方案
  • 语法错误:polly.js中accessKeyId字段的字符串未闭合,代码行accessKeyId: "keyId,缺少右侧双引号,直接导致部署时代码解析失败
  • 异步逻辑错误:synthSpeech使用回调式写法,执行时不会返回有效值也不会返回Promise,Firebase可调用云函数要求必须返回Promise或明确的返回值,否则函数逻辑会直接异常
  • 云函数参数误用:你使用的是https.onCall可调用云函数,接收的参数是(data, context),不是HTTP触发函数的(req, res),参数不匹配会导致运行时报错
  • 依赖缺失:如果没有在functions目录下安装aws-sdk依赖,部署时会报模块不存在错误

安全提示:不要把AWS密钥硬编码在代码中,可通过Firebase云函数环境变量存储敏感信息,部署后不会对外暴露。

修正后的index.js

const functions = require("firebase-functions");
const polly = require("./polly");

// onCall的第一个参数是前端传递的data,第二个是请求上下文对象
exports.pollySynth = functions.https.onCall(async (data, context) => {
  // 等待异步方法执行完成返回结果
  return await polly.speak()
});

修正后的polly.js

const AWS = require("aws-sdk");

// 修复引号闭合问题,实际使用请替换为你真实的AWS配置
const Polly = new AWS.Polly({
  signatureVersion: "v4",
  region: "my-region",
  accessKeyId: "keyId",
  secretAccessKey: "access key",
});

const params = {
  Text: "Hello world. This is the word of speech!",
  OutputFormat: "json",
};

// 将回调方法包装为Promise,适配云函数的异步返回要求
const synthSpeech = function() {
  return new Promise((resolve, reject) => {
    Polly.synthesizeSpeech(params, function(err, res) {
      if (err) {
        console.log("err", err);
        reject(err);
      } else if (res && res.AudioStream instanceof Buffer) {
        resolve(res.AudioStream);
      } else {
        reject(new Error("返回结果不符合预期"))
      }
    });
  })
};

module.exports = {speak: synthSpeech};

部署前检查步骤

  • 进入项目的functions目录,执行npm install aws-sdk --save安装依赖包
  • 确认你填写的AWS region、accessKeyId、secretAccessKey都是有效的正确值
  • 执行firebase deploy --only functions:pollySynth单独部署该函数测试

内容的提问来源于stack exchange,提问作者MAZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:30:02