Как отключить публичный ip в предопределенном шаблоне для запуска задания потока данных - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь развернуть задание потока данных, используя предопределенный шаблон Google, используя python api

Я не хочу, чтобы мой экземпляр вычисления потока данных имел общедоступный ip, поэтому я использую что-то вроде этого:

GCSPATH="gs://dataflow-templates/latest/Cloud_PubSub_to_GCS_Text"
BODY = {
    "jobName": "{jobname}".format(jobname=JOBNAME),
    "parameters": {
        "inputTopic" : "projects/{project}/topics/{topic}".format(project=PROJECT, topic=TOPIC),
        "outputDirectory": "gs://{bucket}/pubsub-backup-v2/{topic}/".format(bucket=BUCKET, topic=TOPIC),
        "outputFilenamePrefix": "{topic}-".format(topic=TOPIC),
        "outputFilenameSuffix": ".txt"
     },
     "environment": {
        "machineType": "n1-standard-1",
        "usePublicIps": False,
        "subnetwork": SUBNETWORK,
     }
}

request = service.projects().templates().launch(projectId=PROJECT, gcsPath=GCSPATH, body=BODY)
response = request.execute()

но я получаю эту ошибку:

raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://dataflow.googleapis.com/v1b3/projects/ABC/templates:launch?alt=json&gcsPath=gs%3A%2F%2Fdataflow-templates%2Flatest%2FCloud_PubSub_to_GCS_Text returned "Invalid JSON payload received. Unknown name "use_public_ips" at 'launch_parameters.environment': Cannot find field.">

Если я удаляю usePublicIps, он проходит, но мой экземпляр compute развертывается с публичным ip.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Я нашел один способ сделать эту работу

  1. Клон Определенные Google шаблоны

  2. Запустить шаблон с пользовательскими параметрами

mvn compile exec:java \
 -Dexec.mainClass=com.google.cloud.teleport.templates.PubsubToText \
 -Dexec.cleanupDaemonThreads=false \
 -Dexec.args=" \
 --project=${PROJECT_ID} \
 --stagingLocation=gs://${BUCKET}/dataflow/pipelines/${PIPELINE_FOLDER}/staging \
 --tempLocation=gs://${BUCKET}/dataflow/pipelines/${PIPELINE_FOLDER}/temp \
 --runner=DataflowRunner \
 --windowDuration=2m \
 --numShards=1 \
 --inputTopic=projects/${PROJECT_ID}/topics/$TOPIC \
 --outputDirectory=gs://${BUCKET}/temp/ \
 --outputFilenamePrefix=windowed-file \
 --outputFilenameSuffix=.txt \
 --workerMachineType=n1-standard-1 \
 --subnetwork=${SUBNET} \
 --usePublicIps=false"
0 голосов
/ 25 января 2019

Читая документы для Указание вашей сети и подсети в потоке данных, я вижу, что python использует use_public_ips=false вместо usePublicIps=false, который используется Java. Попробуйте изменить этот параметр.

Кроме того, имейте в виду, что:

Когда вы отключаете публичные IP-адреса, конвейер Cloud Dataflow может доступ к ресурсам только в следующих местах:

  • другой экземпляр в той же сети VPC

  • Общая сеть VPC

  • сеть с включенным пирингом сети VPC

...