
firebase 第二代函数支持在代码中直接声明内存大小和超时时间,无需依赖 firebase.json 或手动在 cloud 控制台调整,真正实现配置即代码(infrastructure as code)。
firebase 第二代函数支持在代码中直接声明内存大小和超时时间,无需依赖 firebase.json 或手动在 cloud 控制台调整,真正实现配置即代码(infrastructure as code)。
在 Firebase 第二代函数(2nd-gen)中,内存与超时等运行时资源已从部署配置(如 firebase.json)解耦,转而通过函数装饰器的 全局选项(global options) 在源码中声明。这意味着每次函数部署时,资源配置将自动同步,避免了控制台手动修改的繁琐与不一致风险。
以 Firestore 文档创建触发器为例,可通过 memory 参数直接指定内存规格:
from firebase_functions import firestore_fn
from firebase_functions.options import MemoryOption
@firestore_fn.on_document_created(
document="messages/{messageId}",
memory=MemoryOption.GB_1, # ✅ 指定 1GB 内存
timeout_sec=300, # ✅ 可选:设置最长 5 分钟超时
)
def handleNewMessage(event: firestore_fn.CloudEvent[firestore_fn.DocumentSnapshot]) -> None:
doc = event.data
if doc is not None:
print(f"New message: {doc.get('text', 'no text')}")
✅ 支持的内存选项(均来自 firebase_functions.options.MemoryOption 枚举)包括:
-
MB_128,MB_256,MB_512,GB_1,GB_2,GB_4,GB_8 - 最高支持 8GB(适用于计算密集型或大模型推理类场景)
⚠️ 注意事项:
- 此机制仅适用于 Firebase 第二代函数(需使用
firebase-functions@v4+和firebase-functions-python@v2+);第一代函数不支持代码内配置,必须通过firebase.json或gcloud命令设置。 -
timeout_sec与memory必须在装饰器中显式传入,不可在options对象外单独设置。 - 修改内存/超时后,必须重新部署函数(
firebase deploy --only functions:yourFunctionName),但该过程完全自动化、可版本化、可 CI/CD 集成——相比控制台点击,更可靠、更可追溯。 - 若未指定,默认值为
MB_256和60秒(与控制台初始值一致),因此firebase.json中的memory字段对第二代函数完全无效,可安全移除。
总结:将资源配置内聚于函数定义本身,是第二代 Firebase 函数的核心设计哲学。它提升了环境一致性、简化了运维流程,并让函数成为真正自描述、可移植的部署单元。建议所有新项目统一采用此方式管理资源参数。










