簡體   English   中英

GCP 雲函數配置文件

[英]GCP Cloud Functions config file

假設我想創建一個簡單的雲函數來運行python腳本,其中main.py位於通過 Cloud Source Repositories 鏡像的 github 存儲庫中。 我的問題是,如果我需要引用不想添加到存儲庫中的信息 - 是否有其他方法可以訪問該信息? 例如,假設我想要一個在main.py引用的config.py 是否可以在 GCP 中的某處保存和引用config.py (例如存儲)?

謝謝!

想到的另一個答案是使用 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

查看 Cloud Build 中的變量替換,其中“構建觸發器”將包含非存儲庫值,這些值將在“構建步驟”中作為環境變量插入到您的 Cloud Function 中。

看起來您可能想要的是Cloud Functions 的 Environment Variables甚至Cloud Functions 中的 Secrets

除此之外,Cloud Functions 是完全無狀態的,因此您需要連接到一些外部數據存儲(如數據庫)以加載私有配置。

除了其他答案之外,我們還使用了一種稍微不同的方法。 歸結為擁有一個包含所有雲函數 Python 代碼的公共存儲庫。 我們有另一個只包含配置的私有倉庫,比如 config.py。 讓我們以此為例進行描述:

  1. 創建2個存儲庫,例如:

     github.com/organization/cloud-function (public) github.com/organization/config (private)
  2. config庫上設置一個cloudbuild觸發器,在cloud-function庫上設置一個cloudbuild觸發器來觸發配置庫上的構建。 這里有一些關於創建 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的源目錄復制配置。 通過此設置,您可以明確區分開發和生產配置和代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM