Gday,
很新的TS,只有一点点经验的后端一般,所以道歉,如果我完全错过了这个想法。
因此,我非常喜欢使用Google秘密管理器而不是为Firebase函数定制env配置的想法。
下面的所有操作都是在函数dir中的config.ts中完成的。
我需要初始化条纹。传统的教程说要做类似以下示例的事情:
import Stripe from 'stripe';
export const stripeSecret = functions.config().stripe.secret;
const stripe = new Stripe(stripeSecret, {apiVersion: '2020-08-27'});我认为理想的做法是将其改为:
import Stripe from 'stripe'
import {SecretManagerServiceClient} from '@google-cloud/secret-manager';
export async function getSecret(name:string){
const [version] = await secrets.accessSecretVersion({
name: `projects/example/secrets/${name}/versions/latest`,
});
return version.payload?.data?.toString();
}
export const stripeSecret = await getSecret("Stripe-API")
const stripe = new Stripe(stripeSecret, {apiVersion: '2020-08-27'});但是,这会导致一个问题,就是在顶层的异步/等待。
我在这里的选择是什么,最佳实践是什么?
发布于 2022-06-01 10:02:54
Google秘密管理器是一个有用的实用工具,下面是一些使用秘密管理器的最佳实践。
您可以尝试并使用以下方法来创建和使用秘密:
从本地项目目录的根目录运行
firebase functions:secrets:set SECRET_NAME
SECRET_NAME输入一个值。CLI回传一条成功消息,并警告您必须部署函数才能使更改生效。
在部署
runWith参数:访问秘密。
exports.processPayment = functions
// Make the secret available to this function
.runWith({ secrets: ["SECRET_NAME"] })
.onCall((data, context) => {
const myBillingService = initializeBillingService(
// reference the secret value
process.env.SECRET_NAME);
// Process the payment});firebase deploy --only functions
您也可以像任何其他环境变量一样访问它。相反,如果另一个未在runWith中指定秘密的函数试图访问该秘密,则它将收到一个未定义的值:
要查看完整的最佳实践列表,请访问下一个链接1,并了解更多关于管理秘密版本的信息,请查看下一个链接2。
https://stackoverflow.com/questions/72431999
复制相似问题