Я работаю с руководством appengine + go, которое связано с Firebase: https://cloud.google.com/appengine/docs/standard/go/building-app/. Код доступен по адресу https://github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/gophers/gophers-6, который, за исключением моих ключей Firebase, идентичен.
У меня он отлично работает локально под dev_appserver.py, и он запрашивает Vision API и добавляет метки. Однако после развертывания в appengine я получаю ошибку индекса в хранилище данных. Если я перейду в консоль Firebase, я вижу коллекцию (Сообщение) и поле (Опубликовано), которое является меткой времени.
Если я изменю эту строку: https://github.com/GoogleCloudPlatform/golang-samples/blob/master/appengine/gophers/gophers-6/main.go#L193, чтобы удалить Order("-Posted"), тогда все будет работать (важно отметить, что любой вызов Order вызывает ошибку, за исключением опубликованных мной тестовых записей, которые идут в случайном порядке.
Сообщение об ошибке при запуске в appengine: «Получение сообщений: ошибка API 4 (datastore_v3: NEED_INDEX): соответствующий индекс не найден».
Я попытался создать составной индекс или протестировать локально с помощью --require_indexes=true, но это не помогло мне отладить проблему.
Обновлено: я переместил это, чтобы напрямую использовать библиотеки Firebase Datastore вместо обновлений GCP. Я так и не решил эту конкретную проблему, но смог продвинуться вперед, и мое приложение действительно работало :)

По умолчанию локальный сервер разработки автоматически создает составные индексы, необходимые для фактических запросов, вызываемых в вашем приложении. От Создание индексов с помощью сервера разработки:
The development web server (dev_appserver.py) automatically adds items to this file when the application tries to execute a query that needs an index that does not have an appropriate entry in the configuration file.
In the development server, if you exercise every query that your app will make, the development server will generate a complete list of entries in the
index.yamlfile.When the development web server adds a generated index definition to
index.yaml, it does so below the following line, inserting it if necessary:# AUTOGENERATEDThe development web server considers all index definitions below this line to be automatic, and it might update existing definitions below this line as the application makes queries.
Но вам также необходимо развернуть сгенерированные конфигурации индексов в хранилище данных и позволить хранилищу данных обновлять информацию индексирования (то есть индексы, чтобы перейти в состояние Serving), чтобы соответствующие запросы не попали в ошибку NEED_INDEX. От Обновление индексов:
You upload your
index.yamlconfiguration file to Cloud Datastore with thegcloudcommand. If theindex.yamlfile defines any indexes that don't exist in Cloud Datastore, those new indexes are built.It can take a while for Cloud Datastore to create all the indexes and therefore, those indexes won't be immediately available to App Engine. If your app is already configured to receive traffic, then exceptions can occur for queries that require an index that is still in the process of being built.
To avoid exceptions, you must allow time for all the indexes to build. For more information and examples about creating indexes, see Deploying a Go App.
To upload your index configuration to Cloud Datastore, run the following command from the directory where your index.yaml is located:
gcloud datastore create-indexes index.yamlFor information, see the
gcloud datastorereference.You can use the GCP Console, to check the status of your indexes.
Вероятно, это связано с тем, что вы изначально добавили свой проект в консоль Firebase. На данный момент в контексте одного проекта можно выбрать Firebase или Datastore. Подробнее об этом здесь в примечаниях.
Спасибо за помощь! Думаю, это результат некоторого перехода на Firebase. Если я загружаю раздел хранилища данных GCP, он перенаправляет меня на Firebase (
https://console.firebase.google.com/project/$project-id/database/firestore/data~2F). Я вижу там свои документы, могу создавать, но при любом порядке эта ошибка прерывается. Если я пытаюсь создать индекс черезindex.yaml, появляется ошибка и говорится, что индекс не нужен, поскольку он только для одного свойства.