네트워크 및 서브네트워크 지정

이 문서에서는 Dataflow 작업을 실행할 때 네트워크 또는 서브네트워크를 지정하거나 둘 다 지정하는 방법을 설명합니다.

이 문서를 사용하려면 Google Cloud 네트워크 및 서브네트워크를 만드는 방법을 알고 있어야 합니다. 또한 다음 섹션에서 설명하는 네트워크 용어에 대한 지식이 필요합니다.

default 네트워크는 Dataflow 작업을 실행할 수 있도록 구성되어 있습니다. 그러나 다른 서비스에서도 이 네트워크를 사용할 수 있습니다. default 네트워크의 변경사항이 모든 서비스와 호환되는지 확인합니다. 또는 Dataflow에 대한 네트워크를 별도로 만드세요.

네트워킹 문제를 해결하는 방법은 Dataflow 네트워킹 문제 해결을 참조하세요.

Google Cloud 네트워크 용어

  • VPC 네트워크. VPC 네트워크는 Google의 프로덕션 네트워크 내에서 구현되는 물리적 네트워크의 가상 버전입니다. 네트워크라고도 불리는 VPC는 프로젝트의 리소스에 대한 연결을 제공합니다.

    VPC에 대한 자세한 내용은 VPC 네트워크 개요를 참조하세요.

  • 공유된 VPC 네트워크. 공유 VPC를 사용할 때는 프로젝트 하나를 호스트 프로젝트로 지정하고 여기에 하나 이상의 다른 서비스 프로젝트를 연결합니다. 호스트 프로젝트의 VPC 네트워크를 공유 VPC 네트워크라고 합니다. 공유 VPC 관리자가 사용자를 서비스 프로젝트 관리자로 정의한 경우 사용자에게는 최소한 호스트 프로젝트의 네트워크에 있는 일부 서브네트워크를 사용할 수 있는 권한이 있습니다.

    공유 VPC에 대한 자세한 내용은 공유 VPC 개요를 참조하세요.

  • VPC 서비스 제어. Dataflow VPC 서비스 제어는 외부 주체 또는 내부 주체의 우발적이거나 표적화된 작업으로부터 보호하고 부당한 데이터 유출 위험을 최소화하는 데 도움이 됩니다. VPC 서비스 제어를 사용하여 명시적으로 지정한 서비스의 리소스와 데이터를 보호하는 경계를 만들 수 있습니다.

    VPC 서비스 제어에 대한 자세한 내용은 VPC 서비스 제어 개요를 참조하세요. VPC 서비스 제어에 Dataflow를 사용할 때의 제한 사항을 자세히 알아보려면 지원되는 제품 및 제한 사항을 참조하세요.

  • 방화벽 규칙. 방화벽 규칙을 사용하여 VM에 대해 트래픽을 허용하거나 거부합니다. 자세한 내용은 인터넷 액세스 및 방화벽 규칙 구성을 참조하세요.

Dataflow 작업을 위한 네트워크 및 서브네트워크

Dataflow 작업을 만들 때 네트워크, 서브네트워크 또는 둘 다 지정할 수 있습니다.

다음 가이드라인을 고려하세요.

  • 사용해야 할 매개변수를 잘 모르는 경우 서브네트워크 매개변수만 지정하세요. 그런 후 네트워크 매개변수가 암시적으로 지정됩니다.

  • 서브네트워크와 네트워크 매개변수를 모두 생략하면 Google Cloud는 개발자가 default라는 자동 모드 VPC 네트워크를 사용한다고 가정합니다. 프로젝트에 default라는 네트워크가 없으면 대체 네트워크 또는 서브네트워크를 지정해야 합니다.

네트워크 매개변수 지정 가이드라인

  • 네트워크 매개변수를 사용하여 프로젝트에서 자동 모드 VPC 네트워크를 선택할 수 있습니다.

  • 전체 URL이 아닌 이름만 사용하여 네트워크를 지정할 수 있습니다.

  • 다음 두 조건에 모두 해당하는 경우에 한해 네트워크 매개변수를 사용하여 공유 VPC 네트워크를 선택할 수 있습니다.

    • 선택한 공유 VPC 네트워크는 자동 모드 VPC 네트워크입니다.

    • 전체 공유 VPC 호스트 프로젝트에 대한 프로젝트 수준 권한이 있는 서비스 프로젝트 관리자입니다. 즉 공유 VPC 관리자가 전체 호스트 프로젝트에 대한 Compute Network 사용자 역할을 부여했으며 모든 네트워크 및 하위 네트워크를 사용할 수 있습니다.

  • 다른 모든 경우에는 서브네트워크를 지정해야 합니다.

서브네트워크 매개변수 지정 가이드라인

  • 서브네트워크를 지정할 경우 Dataflow가 자동으로 네트워크를 선택합니다. 따라서 서브네트워크를 지정할 때 네트워크 매개변수를 생략할 수 있습니다.

  • 네트워크에서 특정 서브네트워크를 선택하려면 서브네트워크 매개변수를 사용합니다.

  • 전체 URL 또는 약식 경로를 사용하여 서브네트워크를 지정합니다. 서브네트워크가 공유 VPC 네트워크에 있는 경우 전체 URL을 사용해야 합니다.

  • Dataflow 작업자를 실행하는 영역과 같은 리전에서 서브네트워크를 선택해야 합니다. 예를 들어 다음과 같은 상황에서는 서브네트워크 매개변수를 지정해야 합니다.

    • 지정하는 서브네트워크가 커스텀 모드 VPC 네트워크에 있습니다.

    • 공유 VPC 호스트 프로젝트의 특정 서브네트워크에 대한 서브넷 수준 권한이 있는 서비스 프로젝트 관리자입니다.

  • 서브네트워크 크기는 사용 가능한 IP 주소 수로만 인스턴스 수를 제한합니다. 이러한 크기 조정은 Dataflow VPC 서비스 제어 성능에 영향을 주지 않습니다.

공유 VPC의 서브네트워크 매개변수 지정 가이드라인

  • 공유 VPC에 대해 서브네트워크 URL을 지정할 때 HOST_PROJECT_ID가 VPC가 호스팅되는 프로젝트인지 확인합니다.

  • 서브네트워크가 공유 VPC 네트워크에 있는 경우 전체 URL을 사용해야 합니다. 서브네트워크를 지정하는 전체 URL의 예시를 참조하세요.

  • 공유 VPC 서브네트워크가 Dataflow 서비스 계정과 공유되어 있고 지정된 서브넷에 Compute 네트워크 사용자 역할이 할당되어 있는지 확인합니다. Compute 네트워크 사용자 역할을 호스트 프로젝트의 Dataflow 서비스 계정에 할당해야 합니다.

    1. Google Cloud 콘솔에서 공유 VPC 페이지로 이동합니다.

      공유 VPC 페이지로 이동

    2. 호스트 프로젝트를 선택합니다.

    3. 개별 서브넷 액세스 섹션에서 서브넷을 선택합니다. 서브넷 수준 권한 창에 이 서브넷에 대한 권한이 표시됩니다. VPC 서브네트워크에 Compute 네트워크 사용자 역할이 할당되었는지 여부를 확인할 수 있습니다.

    4. 권한을 부여하려면 서브넷 수준 권한 창에서 주 구성원 추가를 클릭합니다.

    네트워크가 공유되지 않은 경우에 작업을 실행하려고 하면 Error: Message: Required 'compute.subnetworks.get' permission 오류 메시지가 표시됩니다. 자세한 내용은 'Dataflow 권한 문제 해결'의 필수 'compute.subnetworks.get' 권한을 참조하세요.

네트워크 및 서브네트워크 사양 예시

서브네트워크를 지정하는 전체 URL의 예시:

https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

다음을 바꿉니다.

  • HOST_PROJECT_ID: 호스트 프로젝트 ID
  • REGION_NAME: Dataflow 작업의 리전
  • SUBNETWORK_NAME: Compute Engine 서브네트워크의 이름

다음은 예시 URL입니다. 여기서 호스트 프로젝트 ID는 my-cloud-project이고, 리전은 us-central1이고, 서브네트워크 이름은 mysubnetwork입니다.

 https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork

다음은 서브네트워크를 지정하는 간단한 형식의 예시입니다.

regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

다음을 바꿉니다.

  • REGION_NAME: Dataflow 작업의 리전
  • SUBNETWORK_NAME: Compute Engine 서브네트워크의 이름

지정된 네트워크를 사용하여 파이프라인 실행

Google Cloud에서 만든 기본 네트워크 이외의 네트워크를 사용하려면 대부분의 경우 서브네트워크를 지정해야 합니다. 네트워크는 지정하는 서브네트워크에서 자동으로 추론됩니다. 자세한 내용은 이 문서의 네트워크 매개변수 지정 가이드라인을 참조하세요.

다음 예시는 명령줄로부터 또는 REST API를 사용하여 파이프라인을 실행하는 방법을 보여줍니다. 이 예시는 네트워크를 지정합니다.

Java

mvn compile exec:java \
    -Dexec.mainClass=INPUT_PATH \
    -Dexec.args="--project=HOST_PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --output=gs://STORAGE_BUCKET/output \
        --region=REGION \
        --runner=DataflowRunner \
        --network=NETWORK_NAME"

Python

python -m INPUT_PATH \
    --project HOST_PROJECT_ID \
    --region=REGION \
    --runner DataflowRunner \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --output gs://STORAGE_BUCKET/output \
    --network NETWORK_NAME

Go

wordcount
    --project HOST_PROJECT_ID \
    --region HOST_GCP_REGION \
    --runner dataflow \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --input INPUT_PATH \
    --output gs://STORAGE_BUCKET/output \
    --network NETWORK_NAME

API

REST API를 사용하여 Dataflow 템플릿을 실행하는 경우, environment 객체에 network 또는 subnetwork를 추가합니다.

POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
    "jobName": "JOB_NAME",
    "parameters": {
       "inputFile" : "INPUT_PATH",
       "output": "gs://STORAGE_BUCKET/output"
    },
    "environment": {
       "tempLocation": "gs://STORAGE_BUCKET/temp",
       "network": "NETWORK_NAME",
       "zone": "us-central1-f"
    }
}

다음을 바꿉니다.

  • JOB_NAME: Dataflow 작업의 이름(API만 해당)
  • INPUT_PATH: 소스 경로
  • HOST_PROJECT_ID: 호스트 프로젝트 ID
  • REGION: Dataflow 리전(예: us-central1)
  • STORAGE_BUCKET: 스토리지 버킷
  • NETWORK_NAME: Compute Engine 네트워크의 이름

지정된 서브네트워크를 사용하여 파이프라인 실행

공유 VPC 네트워크에서 특정 서브네트워크를 사용할 수 있는 권한만 가진 서비스 프로젝트 관리자인 경우 사용 권한이 있는 서브네트워크의 subnetwork매개변수를 지정해야 합니다.

다음 예시는 명령줄로부터 또는 REST API를 사용하여 파이프라인을 실행하는 방법을 보여줍니다. 이 예시는 서브네트워크를 지정합니다. 네트워크를 지정할 수도 있습니다.

Java

mvn compile exec:java \
    -Dexec.mainClass=INPUT_PATH \
    -Dexec.args="--project=HOST_PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --output=gs://STORAGE_BUCKET/output \
        --region=REGION \
        --runner=DataflowRunner \
        --subnetwork=https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME"

Python

python -m INPUT_PATH \
    --project HOST_PROJECT_ID \
    --region=REGION \
    --runner DataflowRunner \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --output gs://STORAGE_BUCKET/output \
    --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME

Go

wordcount
    --project HOST_PROJECT_ID \
    --region HOST_GCP_REGION \
    --runner dataflow \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --input INPUT_PATH \
    --output gs://STORAGE_BUCKET/output \
    --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME

API

REST API를 사용하여 Dataflow 템플릿을 실행하는 경우, environment 객체에 network 또는 subnetwork를 추가합니다.

POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
    "jobName": "JOB_NAME",
    "parameters": {
       "inputFile" : "INPUT_PATH",
       "output": "gs://STORAGE_BUCKET/output"
    },
    "environment": {
       "tempLocation": "gs://STORAGE_BUCKET/temp",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME",
       "zone": "us-central1-f"
    }
}

다음을 바꿉니다.

  • JOB_NAME: Dataflow 작업의 이름(API만 해당)
  • INPUT_PATH: 소스 경로
  • HOST_PROJECT_ID: 호스트 프로젝트 ID
  • REGION: Dataflow 리전(예: us-central1)
  • STORAGE_BUCKET: 스토리지 버킷
  • SUBNETWORK_NAME: Compute Engine 서브네트워크의 이름

외부 IP 주소 사용 중지

외부 IP 주소를 사용 중지하려면 인터넷 액세스 및 방화벽 규칙 구성을 참조하세요.