Контекст:
У меня есть приложение Python Flask, работающее локально, которое использует API Google Vision для обнаружения ярлыков на фотографиях.
Чтобы использовать API Google Vision, я использую переменную окружения 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
файл, поэтому мой ключ не становится publi c, и у меня есть источник Google Cloud Build из моего удаленного репозитория GitHub.
Я новичок в создании автоматов c сборка / развертывание конвейеров, и я пытаюсь понять, как заставить мое приложение Google App Engine автоматически устанавливать переменную окружения GOOGLE_APPLICATION_CREDENTIALS
при сборке или получить доступ к соответствующим учетным данным другим способом, чтобы успешно создать vision.ImageAnnotatorClient()
,
Я открыт для любого метода, который работает. Я искал в интернете несколько дней, но не смог решить эту проблему.
Путь решения, которым я сейчас занимаюсь: Google Secret Manager API.
I ' я могу использовать API Google Secret Manager локально для доступа к секретной версии с ключом json, необходимым для моего приложения, чтобы использовать API Google Vision. Но я сталкиваюсь с двумя проблемами:
- Мне нужно использовать секретный файл. json в качестве ключа, чтобы получить разрешение на доступ к секрету через Google Secret Manager API, так что это заново отображает ту же проблему, которую я изначально пытался решить: выяснить, как автоматически настроить и получить доступ к секретному ключу json в приложении Google Cloud Build / Google App Engine.
- Когда я получаю секрет через API Google Secret Manager, я не знаю, как превратить его в учетные данные для
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'
Любая помощь, которую вы можете предоставить будет высоко ценится!