在生产环境中,我希望能够允许Firebase / GCloud管理员重新启动Firebase Function(GCloud Function)示例,而无需执行重新部署。用例包括从外部服务重新加载内存缓存值或在Secret Manager中执行密钥轮换时。有什么办法吗?
czfnxgou1#
有一个通用的解决方案来重新启动功能在生产中是最有用的,因为有时一个罕见的状态条件可以由管理员快速重置,而不需要重新部署(他们可能无法做到)。在研究缓存和秘密管理解决方案时,我发现了这些潜在的解决方案:
**选项1.**使用Firestore数据库触发器重新加载缓存的对象,但我不认为该事件会在所有运行的示例中触发(只有一个!),所以可能不是一个可行或安全的解决方案。**选项2.**每次调用函数时轮询数据库,检查数据库值是否发生变化,以触发缓存重载。每次调用函数时都要这样做,这有点违背了缓存提高性能和降低成本的目的。**选项3.使用计时器定期清除该高速缓存。缺点是必须等待这一情况发生,并可能意味着运行的示例可能同时具有不同的缓存值(除非您小心设置计时器)。对于密钥轮换使用情况(您经常需要在另一个外部服务上设置新密钥后立即强制重新加载),这不是一个真正的好解决方案。选项4.*更改环境变量,并检测此更改以触发清除/重新加载该高速缓存或密钥。环境变量将传播到所有运行的示例。 我目前认为这可能是最好和最简单的方法 *。也可以与计时器方法结合使用。注意:我还没有证明改变一个环境变量会改变现有运行示例中的新请求。选项5可使用Cloud Runtime Configuration API和watch for changes配置变量。选项6对于secret,您可以将secret挂载为卷。如果您想引用secret的最新版本,这是一个很好的策略。例如,如果secret已经挂载到/etc/secrets/secret 1,则函数必须像这样读取此文件:
fs.readFileSync('/etc/secrets/secret1')
按照以下说明将secret配置为可作为挂载文件访问。这里也有手动将secret设置为环境变量的详细信息,但对于Firebase函数,最好是通过代码完成的支持方法。
未知
1条答案
按热度按时间czfnxgou1#
有一个通用的解决方案来重新启动功能在生产中是最有用的,因为有时一个罕见的状态条件可以由管理员快速重置,而不需要重新部署(他们可能无法做到)。
在研究缓存和秘密管理解决方案时,我发现了这些潜在的解决方案:
**选项1.**使用Firestore数据库触发器重新加载缓存的对象,但我不认为该事件会在所有运行的示例中触发(只有一个!),所以可能不是一个可行或安全的解决方案。
**选项2.**每次调用函数时轮询数据库,检查数据库值是否发生变化,以触发缓存重载。每次调用函数时都要这样做,这有点违背了缓存提高性能和降低成本的目的。
**选项3.使用计时器定期清除该高速缓存。缺点是必须等待这一情况发生,并可能意味着运行的示例可能同时具有不同的缓存值(除非您小心设置计时器)。对于密钥轮换使用情况(您经常需要在另一个外部服务上设置新密钥后立即强制重新加载),这不是一个真正的好解决方案。
选项4.*更改环境变量,并检测此更改以触发清除/重新加载该高速缓存或密钥。环境变量将传播到所有运行的示例。 我目前认为这可能是最好和最简单的方法 *。也可以与计时器方法结合使用。注意:我还没有证明改变一个环境变量会改变现有运行示例中的新请求。
选项5可使用Cloud Runtime Configuration API和watch for changes配置变量。
选项6对于secret,您可以将secret挂载为卷。如果您想引用secret的最新版本,这是一个很好的策略。例如,如果secret已经挂载到/etc/secrets/secret 1,则函数必须像这样读取此文件:
按照以下说明将secret配置为可作为挂载文件访问。这里也有手动将secret设置为环境变量的详细信息,但对于Firebase函数,最好是通过代码完成的支持方法。
未知
功能愿望清单