Ошибка неверной области при использовании API Google-Cloud-Python для доступа к Dataproc - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать кластер в Dataproc с использованием библиотеки google-cloud-python , однако при установке region = 'us-central1' я получаю следующее исключение:

google.api_core.exceptions.InvalidArgument: 400 Region 'us-central1' is invalid.
Please see https://cloud.google.com/dataproc/docs/concepts/regional-endpoints
for additional information on regional endpoints

Код (на основе пример ):

#!/usr/bin/python

from google.cloud import dataproc_v1

client = dataproc_v1.ClusterControllerClient()

project_id = 'my-project'
region = 'us-central1'
cluster = {...}

response = client.create_cluster(project_id, region, cluster)

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Аналогично, используя google-cloud-java клиент:

ClusterControllerSettings settings =
     ClusterControllerSettings.newBuilder()
        .setEndpoint("us-central1-dataproc.googleapis.com:443")
        .build();
 try (ClusterControllerClient clusterControllerClient = ClusterControllerClient.create(settings)) {
   String projectId = "my-project";
   String region = "us-central1";
   Cluster cluster = Cluster.newBuilder().build();
   Cluster response =
       clusterControllerClient.createClusterAsync(projectId, region, cluster).get();
 }
0 голосов
/ 20 ноября 2018

Dataproc использует поле region для маршрутизации запросов REST, однако это поле не используется в клиентах gRPC (отсюда и ошибка).

Доступ к только многорегиону global возможен через конечную точку по умолчанию.Чтобы использовать региональную конечную точку, такую ​​как us-central1, необходимо настроить конечную точку для адресации на transport.

клиента. Региональные конечные точки Dataproc следуют этому шаблону: <region>-dataproc.googleapis.com:443.Для поля region должно быть установлено то же значение, что и для региона в конечной точке.

Пример:

#!/usr/bin/python

from google.cloud import dataproc_v1
from google.cloud.dataproc_v1.gapic.transports import cluster_controller_grpc_transport

transport = cluster_controller_grpc_transport.ClusterControllerGrpcTransport(
    address='us-central1-dataproc.googleapis.com:443')
client = dataproc_v1.ClusterControllerClient(transport)

project_id = 'my-project'
region = 'us-central1'
cluster = {...}

response = client.create_cluster(project_id, region, cluster)
...