【问题标题】:GCP Cloud Functions config fileGCP 云函数配置文件
【发布时间】:2020-03-05 15:58:38
【问题描述】:

假设我想创建一个简单的云函数来运行 python 脚本,其中 main.py 位于通过 Cloud Source Repositories 镜像的 github 存储库中。我的问题是,如果我需要引用我不想添加到存储库中的信息 - 还有其他方法可以访问该信息吗?例如,假设我想要一个config.py,我在main.py 中引用了它。是否可以在 GCP 中的某处保存和引用config.py? (例如存储)?

谢谢!

【问题讨论】:

  • 我想这需要我知道一种方法来引用存储在例如 config.py云存储,我没有。因此问题...

标签: python google-cloud-platform google-cloud-functions


【解决方案1】:

想到的另一个答案是使用 GCP 的 Runtime Configurator。这是 Google Cloud Platform 中的一个 API,可让您存储要在 GCE 资源中使用的信息,例如云功能。请注意,正如我们所说,此功能仍处于测试阶段!这是一个小演示:

创建您的项目配置:

gcloud beta runtime-config configs create my-project-config

在你的项目配置中设置一个变量:

gcloud beta runtime-config configs variables set --config-name my-project-config --is-text my-variable "hello world"

运行云功能的服务账号需要以下权限:

runtimeconfig.configs.get
runtimeconfig.variables.list

在云函数中使用该变量(Python):

from google.cloud import runtimeconfig

client = runtimeconfig.Client()
config = client.config('my-config')

print(config.get_variable('variable-name'))
# <Variable: my-config, variable-name>

print(config.get_variable('does-not-exist'))
# None

【讨论】:

    【解决方案2】:

    您可能想要的是Environment Variables for Cloud Functions,甚至可能是Secrets in Cloud Functions

    除此之外,Cloud Functions 是完全无状态的,因此您需要连接到一些外部数据存储(例如数据库)来加载私有配置。

    【讨论】:

      【解决方案3】:

      查看 Cloud Build 中的变量替换,其中“构建触发器”将包含非存储库值,这些值将在“构建步骤”中作为环境变量插入到您的 Cloud Function 函数中。

      【讨论】:

        【解决方案4】:

        除了其他答案之外,我们还使用了一些不同的方法。它归结为拥有一个包含所有云函数 Python 代码的公共存储库。我们有另一个仅包含配置的私有存储库,例如 config.py。让我们以此为例进行描述:

        1. 创建2个仓库,例如:

          github.com/organization/cloud-function (public)
          github.com/organization/config         (private)
          
        2. config 存储库上设置 cloudbuild 触发器,并在cloud-function 存储库上设置 cloudbuild 触发器以触发在配置存储库上的构建。 Here 是一些关于创建 cloudbuild 触发器的文档。

        1. 在最后一步中,一切都融合在一起。请记住,您的配置是私有的,因此其他任何人都无法访问。每次有人将更改推送到其中一个存储库时,它都应该触发您的私有存储库中的 cloudbuild.yaml。 cloudbuild.yaml 看起来像这样:

          ---
          timeout: 1800s
          steps:
            # Clone public repo
            - name: 'gcr.io/cloud-builders/git'
              args:
                - 'clone'
                - 'https://github.com/organization/cloud-function.git'
          
            # Copy config
            - name: 'gcr.io/cloud-builders/gcloud'
              entrypoint: 'bash'
              args:
                - '-c'
                - |
                  cp config.py cloud-function/
          
            # Deploy cloud-function
            - name: 'gcr.io/cloud-builders/gcloud'
              dir: 'cloud-function'
              entrypoint: 'bash'
              args:
                - '-c'
                - |
                  gcloud functions deploy ...
          
        2. 此外,您可以在 config.py 中放置对 Google Secret Manager 机密的引用 (secret_id)。您还可以使用--env-vars-file,其实际文件存储在私有存储库中。另一个好处是你可以在你的私有仓库中拥有代表 $BRANCH_NAME 或 $PROJECT_ID 的目录,这使得创建多个环境(测试、开发、生产等)变得容易。这样,您可以确保将环境的正确配置注入到云功能中。我们使用如下:

          my-dev-gcp-project > build trigger on development branch
          my-prd-gcp-project > build trigger on production branch
          

          在 cloudbuild.yaml 中,我们使用 ${BRANCH_NAME} 克隆公共仓库 并从名为的源目录复制配置 ${PROJECT_ID}/config.py。有了这个设置,你就有了清晰的分离 在开发和生产配置和代码之间。

        【讨论】:

          猜你喜欢
          • 2021-10-06
          • 1970-01-01
          • 1970-01-01
          • 2020-10-14
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          • 2021-09-12
          • 1970-01-01
          相关资源
          最近更新 更多