首页 > 解决方案 > 在运行时为云函数 GCP 重命名 python 函数 def

问题描述

在 GCP nodejs 云函数中,我使用 dotenv 在运行时以简单模式重命名触发器调用的函数:我通过 dotenv-yaml 从 env_TEST.yml 配置文件中读取部署函数的名称,具体取决于 yaml 文件中的 ENVIRONMENT 变量我将拥有

因为我有 3 个 .env_PROD.yml .env_UAT.yml 和 .env_TEST.yml 文件,其中 ENVIRONMENT 变量在 dotenv 加载的 ENVIRONMENT 变量中设置了 PROD、UAT 和 TEST。

要使用的代码示例:

require('dotenv-yaml')**.config({ path: '.env_TEST.yml' })**;
const prefix = process.env.ENVIRONMENT === "PROD"
               ? "prod_"
               : (process.env.ENVIRONMENT === "UAT"
                  ? "uat_"
                  : "test_"
                 );

exports[`${prefix}fixNameFunction`] = async (req, res) => {
...
...
}

.config({ path: '.env_TEST.yml' }) 的部分仅用于本地开发本地云功能与谷歌库函数框架 nodejs 和其他语言。

这对于在云函数中部署具有不同名称的云函数并使用正确的名称 prod_functionName 和 uat_functionName 和 test_functionName 触发非常有用,在这种情况下,您将拥有 3 个适用于 TEST、UAT 和 PROD 环境的函数,并且所有环境参数都已正确加载。

通过gitLab CI/CD gitlab-ci.yml我传递正确的 env 文件以使用 (env_TEST.yml, env_UAT.yml, env_PROD.yml),具体取决于启动管道的标签名称。

我看到存在dotenv-python来加载环境变量,但是我在运行时找不到一个示例来重命名 python 的 def 函数,参数由 dotenv-python 库或其他库读取。

有人有一个解决方案可以在 python 中正常工作,通过环境变量加载新的函数名称,并将 def functionname 重命名为 [prefix]functionName 作为 nodejs 中的前一个示例,前缀中的环境变量加载?

非常感谢您的支持。

标签: pythonfunctiongoogle-cloud-functionsruntimerename

解决方案


你想要的是一个动态函数名。以下是您在 Python 中的操作方式:

def my_function(request):
    return "Success"

function_name = "whatever"  # Get this from your env file

locals()[function_name] = my_function

然后该whatever()函数就可以调用了。


推荐阅读