Я мигрирую микросервис Java, работающий на App Engine, из DataStore в Cloud Firestore в режиме Datastore и испытываю проблемы с подключением к новой базе данных. Я нахожу документацию запутанной, но работаю на следующей основе (цитата из this )
Настройка разрешений базы данных По умолчанию ваше приложение имеет все разрешения, необходимые для чтения и записи в режим хранилища данных и базы данных Firestore в вашем проекте Google Cloud.
Для управления этими разрешениями каждое приложение App Engine использует учетную запись службы по умолчанию, которая предоставляет полный доступ для чтения и записи в режим хранилища данных и базы данных Firestore в том же проекте, что и приложение. Вы можете изменить разрешения учетной записи службы по умолчанию, но ваше приложение может потерять доступ, если вы не назначите роль IAM с необходимыми разрешениями.
Я нашел учетную запись службы по умолчанию в IAM и сгенерировал ключ и использовал следующий код для инициализации FirebaseApp
InputStream serviceAccount = this.getClass().getResourceAsStream("/toolbox-firebase-adminsdk-jbx2a-31651a7510.json");
try {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://toolbox.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
throw new RuntimeException(e);
}
Этот код, кажется, выполняется правильно, но когда я пытаюсь получить доступ к базе данных, я получаю следующую ошибку разрешений
> INFO] GCLOUD: com.google.cloud.datastore.DatastoreException: Missing
> or insufficient permissions. [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:128)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:113)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.lookup(HttpDatastoreRpc.java:163)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.DatastoreImpl$3.call(DatastoreImpl.java:392)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.DatastoreImpl$3.call(DatastoreImpl.java:389)
> [INFO] GCLOUD: at
> com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
> [INFO] GCLOUD: at
> com.google.cloud.RetryHelper.run(RetryHelper.java:76) [INFO
Учетная запись службы что я использую имеет следующие разрешения
- Владелец облачного хранилища данных
- Пользователь облачного хранилища данных
- Редактор
Любая помощь в исправлении этого с благодарностью.