语境:
我有一个本地工作的 Python Flask 应用程序,它使用 Google Vision API 来检测照片中的标签。
为了使用 Google Vision API,我使用了一个GOOGLE_APPLICATION_CREDENTIALS
环境变量。我有一个"google-secret.json"
本地存储的密钥,我用它来设置GOOGLE_APPLICATION_CREDENTIALS
具有以下两行的变量:
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "google-secret.json"
以上使我能够在本地成功运行此行:
image_label_client = vision.ImageAnnotatorClient()
我正在使用 Google Cloud Build 将此应用程序自动部署到 Google App Engine 标准环境中。我已*google-secret.json
包含在我的.gitignore
文件中,因此我的密钥不会公开,并且我有来自远程 GitHub 存储库的 Google Cloud Build 源。
我是创建自动构建/部署管道的新手,我正在尝试了解如何让我的 Google App Engine 应用程序GOOGLE_APPLICATION_CREDENTIALS
在构建时自动设置环境变量,或者以其他方式访问相关凭据,以成功创建vision.ImageAnnotatorClient()
.
我对任何可行的方法持开放态度。我已经在互联网上搜索了几天,但无法解决这个问题。
我目前追求的解决路径:Google Secret Manager API。
我可以在本地使用 Google Secret Manager API 访问具有我的应用程序使用 Google Vision API 所需的 json 密钥的秘密版本。但我面临两个问题:
- 我需要使用 .json 机密文件作为密钥来获得通过 Google Secret Manager API 访问机密的权限,所以这重新提出了我最初试图解决的相同问题:弄清楚如何自动设置和访问Google Cloud Build / Google App Engine 应用程序上的 json 密钥。
- 当我通过 Google Secret Manager API 检索密钥时,我不知道如何将其转换为
vision.ImageAnnotatorClient()
.
对于问题 2:通常,我不会对vision.ImageAnnotatorClient()
. 相反,它将从前面的行中获取凭据:
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "google_secret.json"
如果我尝试将 Google Secret API 有效负载转换为 .json 文件,我会这样做:
payload = response.payload.data.decode('UTF-8')
payload_json = json.dumps(payload)
google_api_secret = payload_json
然后将其写入文件:
with open("google_secret.json", "w") as write_file:
json.dump(google_api_secret, write_file)
但是运行时出现以下错误
image_label_client = vision.ImageAnnotatorClient()
AttributeError: 'str' object has no attribute 'get'
您能提供的任何帮助将不胜感激!