실행 예약

이 문서에서는 Dataform에서 다음 작업을 수행하는 방법을 보여줍니다.

다음 표에서는 각 방법을 비교합니다.

메서드 목표 트리거 유형
워크플로 구성 Dataform 내의 표준 시간 기반 프로덕션 실행입니다. 시간 기준
Workflows 및 Cloud Scheduler 다른 API와 함께 Dataform을 경량 서버리스로 조정합니다. 시간 기반 또는 이벤트 기반
Cloud Composer BigQuery 외부 종속 항목이 있는 복잡한 파이프라인 시간 기반 또는 이벤트 기반
Cloud Build 트리거 Git 푸시 직후 릴리스 자동화 이벤트 기반

시작하기 전에

워크플로 구성으로 실행을 예약하거나 워크플로 및 Cloud Scheduler로 실행을 예약하려면 다음 단계를 따르세요.

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

    Dataform으로 이동

  2. 저장소를 선택하거나 만듭니다.

  3. 출시 구성을 만듭니다.

Cloud Composer로 실행을 예약하려면 다음 단계를 따르세요.

  1. Dataform 저장소를 만들거나 선택합니다.
  2. BigQuery에 Dataform에 대한 액세스 권한을 부여합니다.
  3. Dataform 작업공간을 만들거나 선택합니다.
  4. 테이블을 하나 이상 만듭니다.
  5. Cloud Composer 2 환경을 만듭니다.

필요한 역할

이 문서의 태스크를 완료하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

워크플로 구성을 만들 때 커스텀 서비스 계정을 사용하려면 커스텀 서비스 계정에 액세스 권한을 부여하세요.

워크플로 구성을 만들 때 Google 계정 사용자 인증 정보(프리뷰)를 사용하려면 Google 계정에 대한 액세스 권한을 부여하세요.

워크플로 구성의 예약된 실행을 사용 설정하려면 워크플로 구성에 사용된 커스텀 서비스 계정에 대해 기본 Dataform 서비스 에이전트iam.serviceAccounts.actAs 권한을 부여해야 합니다. 이 권한은 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)에서 사용할 수 있습니다. 자세한 내용은 엄격한 '다음으로 작업' 모드 사용을 참고하세요.

예약의 보안을 강화하려면 향상된 예약 권한 구현을 참고하세요.

워크플로 구성으로 실행 예약

이 섹션에서는 Dataform에서 워크플로 실행을 예약하고 구성하기 위해 워크플로 구성을 만드는 방법을 보여줍니다. 워크플로 구성을 사용하여 Dataform 워크플로를 일정에 따라 실행할 수 있습니다.

워크플로 구성 정보

BigQuery에서 모든 또는 선택된 워크플로 작업에 대해 Dataform 실행을 예약하려면 워크플로 구성을 만들면 됩니다. 워크플로 구성에서 컴파일 출시 구성을 선택하고 실행을 위한 워크플로 작업을 선택한 후 실행 일정을 설정합니다.

그런 다음 워크플로 구성의 예약된 실행 중에 Dataform이 출시 구성의 최신 컴파일 결과에서 선택한 작업을 BigQuery에 배포합니다. Dataform API workflowConfigs를 사용하여 워크플로 구성 실행을 수동으로 트리거할 수도 있습니다.

Dataform 워크플로 구성에는 다음과 같은 실행 설정이 포함됩니다.

  • 워크플로 구성의 ID입니다.
  • 출시 구성입니다.
  • 서비스 계정

    워크플로 구성과 연결된 커스텀 서비스 계정입니다. Google Cloud 프로젝트와 연결된 맞춤 서비스 계정을 선택하거나 다른 서비스 계정을 직접 입력할 수 있습니다. 기본적으로 워크플로 구성에는 저장소와 동일한 서비스 계정이 사용됩니다.

    서비스 계정 사용자 인증 정보는 예약된 워크플로 구성 생성 및 실행의 기본 승인 방법입니다.

  • Google 계정 사용자 인증 정보 (프리뷰)

    Google 계정 사용자 인증 정보는 예약되지 않은 수동 워크플로 구성 생성 및 실행의 기본 승인 방법입니다. 자세한 내용은 Google 계정 승인하기를 참고하세요.

  • 실행할 워크플로 작업:

    • 모든 작업
    • 작업 선택
    • 태그 선택
  • 실행 일정 및 시간대입니다.

워크플로 구성 만들기

Dataform 워크플로 구성을 만들려면 다음 단계를 따르세요.

  1. 저장소에서 출시 및 일정으로 이동합니다.
  2. 워크플로 구성 섹션에서 만들기를 클릭합니다.
  3. 워크플로 구성 만들기 창에서 구성 ID 필드에 워크플로 구성의 고유 ID를 입력합니다.

    ID에는 숫자, 문자, 하이픈, 밑줄만 포함할 수 있습니다.

  4. 출시 구성 메뉴에서 컴파일 출시 구성을 선택합니다.

  5. 인증 섹션에서 Google 계정 사용자 인증 정보나 서비스 계정으로 워크플로 구성을 승인합니다.

    • Google 계정 사용자 인증 정보(프리뷰)를 사용하려면 내 사용자 인증 정보로 실행을 선택합니다.
    • 맞춤 서비스 계정을 사용하려면 선택한 서비스 계정으로 실행을 선택한 후 액세스 권한이 있는 Google Cloud 프로젝트와 연결된 서비스 계정을 선택합니다. 서비스 계정을 선택하지 않으면 워크플로 구성에서 저장소 서비스 계정을 사용합니다.
  6. 선택사항: 일정 빈도 필드에 unix-cron 형식으로 실행 빈도를 입력합니다.

    Dataform이 해당 출시 구성에서 최신 컴파일 결과를 실행하도록 하려면 컴파일 결과 생성 시간과 예약된 실행 시간 사이의 공백이 최소 1시간 이상 유지되도록 합니다.

  7. 선택사항: 시간대 메뉴에서 실행 시간대를 선택합니다.

    기본 시간대는 UTC입니다.

  8. 실행할 워크플로 작업을 선택합니다.

    • 전체 워크플로를 실행하려면 모든 작업을 클릭합니다.
    • 워크플로에서 선택한 작업을 실행하려면 작업 선택을 클릭한 다음 작업을 선택합니다.
    • 선택한 태그로 작업을 실행하려면 태그 선택을 클릭한 다음 태그를 선택합니다.
    • 선택사항: 선택한 작업 또는 태그 및 종속 항목을 실행하려면 종속 항목 포함 옵션을 선택합니다.
    • 선택사항: 선택한 작업 또는 태그 및 종속자를 실행하려면 종속자 포함 옵션을 선택합니다.
    • 선택사항: 모든 테이블을 처음부터 다시 빌드하려면 전체 새로고침으로 실행 옵션을 선택합니다.

      이 옵션이 없으면 Dataform은 증분 테이블을 처음부터 다시 빌드하지 않고 업데이트합니다.

    • 선택사항: 우선순위가 높은 대화형 작업으로 실행 (기본값) 옵션을 사용하여 BigQuery 쿼리 작업 우선순위를 설정합니다. 기본적으로 BigQuery는 가능한 한 빨리 실행되도록 설계된 대화형 쿼리 작업으로 쿼리를 실행합니다. 이 옵션을 선택 해제하면 우선순위가 낮은 일괄 쿼리 작업으로 쿼리가 실행됩니다.

  9. 만들기를 클릭합니다. 인증 방법으로 내 사용자 인증 정보로 실행을 선택한 경우 Google 계정을 승인(프리뷰)해야 합니다.

예를 들어 다음 워크플로 구성은 1시간(CEST 시간대)마다 hourly 태그가 있는 작업을 실행합니다.

  • 구성 ID: production-hourly
  • 출시 구성: -
  • 빈도: 0 * * * *
  • 시간대: Central European Summer Time (CEST)
  • 워크플로 작업 선택: 태그 선택, hourly 태그

Google 계정 승인하기

Google 계정 사용자 인증 정보로 리소스를 인증하려면 Google 계정의 액세스 토큰을 가져오고 사용자를 대신하여 소스 데이터에 액세스할 수 있는 권한을 BigQuery 파이프라인에 수동으로 부여해야 합니다. OAuth 대화상자 인터페이스를 사용하여 수동 승인을 부여할 수 있습니다.

BigQuery 파이프라인에 대한 권한을 한 번만 부여하면 됩니다.

부여한 권한을 취소하려면 다음 단계를 수행합니다.

  1. Google 계정 페이지로 이동합니다.
  2. BigQuery 파이프라인을 클릭합니다.
  3. 액세스 권한 삭제를 클릭합니다.

또한 새 Google 계정 소유자가 이전에 워크플로 구성을 만든 적이 없는 경우 사용자 인증 정보를 업데이트하여 워크플로 구성 소유자를 변경하려면 수동 승인이 필요합니다.

워크플로 구성 수정

워크플로 구성을 수정하려면 다음 단계를 따르세요.

  1. 저장소에서 출시 및 일정으로 이동합니다.
  2. 수정하려는 워크플로 구성 옆에 있는 더보기 메뉴를 클릭한 다음 수정을 클릭합니다.
  3. 워크플로 구성 수정 창에서 워크플로 구성 설정을 수정한 다음 저장을 클릭합니다.

워크플로 구성 삭제

워크플로 구성을 삭제하려면 다음 단계를 따르세요.

  1. 저장소에서 출시 및 일정으로 이동합니다.
  2. 삭제하려는 워크플로 구성 옆에 있는 더보기 메뉴를 클릭한 다음 삭제를 클릭합니다.
  3. 출시 구성 삭제 대화상자에서 삭제를 클릭합니다.

Workflows 및 Cloud Scheduler로 실행 예약

이 섹션에서는 Workflows 및 Cloud Scheduler를 사용하여 Dataform 워크플로의 실행을 예약하는 방법을 보여줍니다.

예약된 워크플로 실행 정보

Workflows 워크플로를 트리거하는 Cloud Scheduler 작업을 만들어 Dataform 워크플로 실행 빈도를 설정할 수 있습니다. Workflows는 사용자가 정의한 조정 워크플로에서 서비스를 실행합니다.

Workflows는 데이터 양식 워크플로를 2단계 프로세스로 실행합니다. 먼저 Git 제공업체에서 Dataform 저장소 코드를 가져와서 컴파일 결과로 컴파일합니다. 그런 다음 컴파일 결과를 사용하여 Dataform 워크플로를 만들고 사용자가 설정한 빈도로 실행합니다.

예약된 오케스트레이션 워크플로 만들기

Dataform 워크플로의 실행을 예약하려면 Workflows를 사용하여 조정 워크플로를 만들고 Cloud Scheduler 작업을 트리거로 추가합니다.

  1. Workflows는 서비스 계정을 사용하여 워크플로에Google Cloud 리소스에 대한 액세스 권한을 부여합니다. 서비스 계정을 만들고 다음 권한을 부여합니다.

  2. 조정 워크플로를 만들고 다음 YAML 소스 코드를 워크플로 정의로 사용합니다.

    main:
        steps:
        - init:
            assign:
            - repository: projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_ID
        - createCompilationResult:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
                auth:
                    type: OAuth2
                body:
                    gitCommitish: GIT_COMMITISH
            result: compilationResult
        - createWorkflowInvocation:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
                auth:
                    type: OAuth2
                body:
                    compilationResult: ${compilationResult.body.name}
            result: workflowInvocation
        - complete:
            return: ${workflowInvocation.body.name}
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • REPOSITORY_LOCATION: Dataform 저장소의 위치
    • REPOSITORY_ID: Dataform 저장소의 이름
    • GIT_COMMITISH: Dataform 코드를 실행할 Git 브랜치입니다. 새로 만든 저장소의 경우 main으로 바꿉니다.
  3. Cloud Scheduler를 사용하여 조정 워크플로 예약

Dataform 워크플로 컴파일 결과 생성 요청 맞춤설정

기존 조정 워크플로를 업데이트하고 YAML 형식으로 Dataform 워크플로 만들기 컴파일 결과 요청 설정을 정의할 수 있습니다. 설정에 관한 자세한 내용은 projects.locations.repositories.compilationResults REST 리소스 참조를 확인하세요.

예를 들어 컴파일 중에 모든 작업에 _dev schemaSuffix 설정을 추가하려면 createCompilationResult 단계 본문을 다음 코드 스니펫으로 바꿉니다.

    - createCompilationResult:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
            auth:
                type: OAuth2
            body:
                gitCommitish: GIT_COMMITISH
                codeCompilationConfig:
                    schemaSuffix: dev

또한 Workflows 실행 요청에서 추가 설정을 런타임 인수로 전달하고 변수를 사용하여 이러한 인수에 액세스할 수 있습니다. 자세한 내용은 실행 요청에서 런타임 인수 전달을 참조하세요.

Dataform 워크플로 호출 요청 맞춤설정

기존 조정 워크플로를 업데이트하고 YAML 형식으로 Dataform 워크플로 호출 요청 설정을 정의할 수 있습니다. 호출 요청 설정에 대한 자세한 내용은 projects.locations.repositories.workflowInvocations REST 리소스 참조를 참고하세요.

예를 들어 모든 전이 종속 항목이 포함된 hourly 태그가 있는 작업만 실행하려면 createWorkflowInvocation 본문을 다음 코드 스니펫으로 바꿉니다.

    - createWorkflowInvocation:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
            auth:
                type: OAuth2
            body:
                compilationResult: ${compilationResult.body.name}
                invocationConfig:
                    includedTags:
                    - hourly
                    transitiveDependenciesIncluded: true
                

또한 Workflows 실행 요청에서 추가 설정을 런타임 인수로 전달하고 변수를 사용하여 이러한 인수에 액세스할 수 있습니다. 자세한 내용은 실행 요청에서 런타임 인수 전달을 참조하세요.

Cloud Composer로 실행 예약

Cloud Composer 2를 사용하여 Dataform 실행을 예약할 수 있습니다. Dataform은 Cloud Composer 1을 지원하지 않습니다.

Cloud Composer 2로 Dataform 실행 일정을 관리하려면 Airflow 방향성 비순환 그래프 (DAG)에서 Dataform 연산자를 사용할 수 있습니다. Dataform 워크플로 호출을 예약하는 Airflow DAG를 만들 수 있습니다.

Dataform은 다양한 Airflow 연산자를 제공합니다. 여기에는 컴파일 결과 가져오기, 워크플로 호출 가져오기, 워크플로 호출 취소 연산자가 포함됩니다. 사용 가능한 Dataform Airflow 연산자의 전체 목록을 보려면 Google Dataform 연산자를 참고하세요.

google-cloud-dataform PyPI 패키지 설치

Cloud Composer 2 버전 2.0.25 이상을 사용하는 경우 이 패키지는 환경에 사전 설치되므로 설치할 필요가 없습니다.

이전 버전의 Cloud Composer 2를 사용하는 경우 google-cloud-dataform PyPi 패키지를 설치합니다.

PyPI 패키지 섹션에서 버전 ==0.2.0을 지정합니다.

Dataform 워크플로 호출을 예약하는 Airflow DAG 만들기

Cloud Composer 2로 Dataform 워크플로의 예약 실행을 관리하려면 Dataform Airflow 연산자를 사용하여 DAG를 작성한 다음 환경의 버킷에 업로드합니다.

다음 코드 샘플은 Dataform 컴파일 결과를 만들고 Dataform 워크플로 호출을 시작하는 Airflow DAG를 보여줍니다.

from datetime import datetime

from airflow import models
from airflow.models.baseoperator import chain
from airflow.providers.google.cloud.operators.dataform import (
    DataformCreateCompilationResultOperator,
    DataformCreateWorkflowInvocationOperator,
)

DAG_ID = "dataform"
PROJECT_ID = "PROJECT_ID"
REPOSITORY_ID = "REPOSITORY_ID"
REGION = "REGION"
GIT_COMMITISH = "GIT_COMMITISH"

with models.DAG(
    DAG_ID,
    schedule_interval='@once',  # Override to match your needs
    start_date=datetime(2022, 1, 1),
    catchup=False,  # Override to match your needs
    tags=['dataform'],
) as dag:

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": GIT_COMMITISH,
        },
    )
    create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
        task_id='create_workflow_invocation',
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
         workflow_invocation={
            "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}"
        },
    )


create_compilation_result >> create_workflow_invocation

다음을 바꿉니다.

  • PROJECT_ID: Dataform Google Cloud 프로젝트 ID입니다.
  • REPOSITORY_ID: Dataform 저장소의 이름
  • REGION: Dataform 저장소가 있는 리전입니다.
  • COMPILATION_RESULT: 이 워크플로 호출에 사용할 컴파일 결과의 이름입니다.
  • GIT_COMMITISH: 사용하려는 코드 버전의 원격 Git 저장소에 있는 Git commitish(예: 브랜치 또는 Git SHA)

다음 코드 샘플은 다음을 실행하는 Airflow DAG를 보여줍니다.

  1. Dataform 컴파일 결과를 만듭니다.
  2. 비동기 Dataform 워크플로 호출을 시작합니다.
  3. DataformWorkflowInvocationStateSensor를 사용하여 워크플로가 예상 상태가 될 때까지 상태를 폴링합니다.
from datetime import datetime

from google.cloud.dataform_v1beta1 import WorkflowInvocation

from airflow import models
from airflow.models.baseoperator import chain
from airflow.providers.google.cloud.operators.dataform import (
    DataformCreateCompilationResultOperator,
    DataformCreateWorkflowInvocationOperator,
)
from airflow.providers.google.cloud.sensors.dataform import DataformWorkflowInvocationStateSensor

DAG_ID = "dataform"
PROJECT_ID = "PROJECT_ID"
REPOSITORY_ID = "REPOSITORY_ID"
REGION = "REGION"
GIT_COMMITISH = "GIT_COMMITISH"

with models.DAG(
    DAG_ID,
    schedule_interval='@once',  # Override to match your needs
    start_date=datetime(2022, 1, 1),
    catchup=False,  # Override to match your needs
    tags=['dataform'],
) as dag:

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": GIT_COMMITISH,
        },
    )

create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
    task_id='create_workflow_invocation',
    project_id=PROJECT_ID,
    region=REGION,
    repository_id=REPOSITORY_ID,
    asynchronous=True,
    workflow_invocation={
        "compilation_result": COMPILATION_RESULT
    }
)

is_workflow_invocation_done = DataformWorkflowInvocationStateSensor(
    task_id="is_workflow_invocation_done",
    project_id=PROJECT_ID,
    region=REGION,
    repository_id=REPOSITORY_ID,
    workflow_invocation_id=("{{ task_instance.xcom_pull('create_workflow_invocation')['name'].split('/')[-1] }}"),
    expected_statuses={WorkflowInvocation.State.SUCCEEDED},
)


create_compilation_result >> create_workflow_invocation

다음을 바꿉니다.

  • PROJECT_ID: Dataform Google Cloud projectID입니다.
  • REPOSITORY_ID: Dataform 저장소의 이름
  • REGION: Dataform 저장소가 있는 리전입니다.
  • COMPILATION_RESULT: 이 워크플로 호출에 사용할 컴파일 결과의 이름입니다.
  • GIT_COMMITISH: 사용하려는 코드 버전의 원격 Git 저장소에 있는 Git commitish(예: 브랜치 또는 Git SHA)
  • COMPILATION_RESULT: 이 워크플로 호출에 사용할 컴파일 결과의 이름입니다.

컴파일 구성 매개변수 추가

컴파일 구성 매개변수를 create_compilation_result Airflow DAG 객체에 더 추가할 수 있습니다. 사용 가능한 매개변수에 대한 자세한 내용은 CodeCompilationConfig Dataform API 참조를 확인하세요.

  • create_compilation_result Airflow DAG 객체에 컴파일 구성 매개변수를 추가하려면 다음 형식으로 선택한 매개변수를 code_compilation_config 필드에 추가합니다.

        create_compilation_result = DataformCreateCompilationResultOperator(
            task_id="create_compilation_result",
            project_id=PROJECT_ID,
            region=REGION,
            repository_id=REPOSITORY_ID,
            compilation_result={
                "git_commitish": GIT_COMMITISH,
                "code_compilation_config": { "PARAMETER": "PARAMETER_VALUE"}
            },
        )
    

    다음을 바꿉니다.

    • PROJECT_ID: Dataform Google Cloud 프로젝트 ID입니다.
    • REPOSITORY_ID: Dataform 저장소의 이름
    • REGION: Dataform 저장소가 있는 리전입니다.
    • GIT_COMMITISH: 사용하려는 코드 버전의 원격 Git 저장소에 있는 Git commitish(예: 브랜치 또는 Git SHA)
    • PARAMETER: 선택한 CodeCompilationConfig 매개변수입니다. 매개변수를 여러 개 추가할 수 있습니다.
    • PARAMETER_VALUE: 선택한 파라미터의 값입니다.

다음 코드 샘플은 create_compilation_result Airflow DAG 객체에 추가된 defaultDatabase 매개변수를 보여줍니다.

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": REMOTE_BRANCH,
            "code_compilation_config": { "default_database": "my-custom-gcp-project"}
        },
    )

워크플로 호출 구성 매개변수 추가

워크플로 호출 구성 매개변수를 create_workflow_invocation Airflow DAG 객체에 더 추가할 수 있습니다. 사용 가능한 매개변수에 대한 자세한 내용은 InvocationConfig Dataform API 참조를 확인하세요.

  • create_workflow_invocation Airflow DAG 객체에 워크플로 호출 구성 매개변수를 추가하려면 다음 형식으로 선택한 매개변수를 invocation_config 필드에 추가합니다.

        create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
            task_id='create_workflow_invocation',
            project_id=PROJECT_ID,
            region=REGION,
            repository_id=REPOSITORY_ID,
            workflow_invocation={
                "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}",
                "invocation_config": { "PARAMETER": PARAMETER_VALUE }
            },
        )
    
    

    다음을 바꿉니다.

    • PROJECT_ID: Dataform Google Cloud 프로젝트 ID입니다.
    • REPOSITORY_ID: Dataform 저장소의 이름
    • REGION: Dataform 저장소가 있는 리전입니다.
    • PARAMETER: 선택한 InvocationConfig 매개변수입니다. 매개변수를 여러 개 추가할 수 있습니다.
    • PARAMETER_VALUE: 선택한 파라미터의 값입니다.

다음 코드 샘플은 create_workflow_invocation Airflow DAG 객체에 추가된 includedTags[]transitiveDependenciesIncluded 매개변수를 보여줍니다.

    create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
        task_id='create_workflow_invocation',
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        workflow_invocation={
            "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}",
            "invocation_config": { "included_tags": ["daily"], "transitive_dependencies_included": true }
        },
    )

Cloud Build 트리거로 실행 자동화

출시 구성에서 시간 기반 일정 이상으로 이동하려면 Cloud Build 트리거를 사용하여 이벤트 기반 파이프라인을 만들면 됩니다. 이 방법을 사용하면 새 커밋이 Git 브랜치로 푸시될 때마다 코드가 자동으로 컴파일되고 데이터 업데이트를 위해 Dataform 워크플로 호출이 즉시 트리거됩니다.

리소스 준비

  1. Google Cloud 프로젝트에서 Dataform 및 Cloud Build API를 사용 설정합니다.

    Dataform API 사용 설정

    Cloud Build API 사용 설정

  2. 다음 항목이 준비되었는지 확인하세요.

필수 IAM 권한 부여

Dataform 저장소의 커스텀 서비스 계정에 Dataform 관리자 역할(roles/dataform.admin)을 부여합니다. 이 역할은 컴파일 결과를 만들고, 출시 구성을 업데이트하고, 새 워크플로 호출을 시작하는 권한을 비롯해 저장소에 대한 전체 액세스 권한을 제공합니다. 개별 저장소에 IAM 역할을 부여하는 방법에 대한 자세한 내용은 개별 저장소에 대한 액세스 제어를 참고하세요.

워크플로 구성의 커스텀 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 Cloud Build 트리거의 서비스 계정에 부여합니다. 이 요구사항에 관한 자세한 내용은 엄격한 act-as 모드 사용을 참고하세요.

Cloud Build에서 커스텀 서비스 계정을 사용하려면 Cloud Build 서비스 에이전트에 해당 계정으로 작업할 수 있는 권한을 부여해야 합니다. Cloud Build 서비스 에이전트에 가장 권한을 부여하려면 다음을 실행하세요.

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 커스텀 서비스 계정을 선택합니다.

  3. 액세스 권한이 있는 주 구성원 탭으로 이동합니다.

  4. 액세스 권한 부여를 클릭합니다.

  5. 새 주 구성원 필드에 Cloud Build 서비스 에이전트의 이메일 주소를 입력합니다. 이메일 주소는 다음 형식이어야 합니다.

    service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
    

    PROJECT_NUMBER를Google Cloud 프로젝트의 숫자 ID로 바꿉니다. Google Cloud 프로젝트 ID는Google Cloud 콘솔 대시보드에서 찾을 수 있습니다. 자세한 내용은 프로젝트 이름, 번호, ID 찾기를 참고하세요.

  6. 역할 선택 메뉴에서 서비스 계정 사용자를 선택합니다.

  7. 저장을 클릭합니다.

cloudbuild.yaml 구성 파일 만들기

Git 저장소의 루트에서 cloudbuild.yaml 파일을 만듭니다. 이 파일을 사용하여 컴파일 결과를 생성하고, 이 컴파일 결과를 라이브로 설정하도록 출시 구성을 업데이트하고, 새 워크플로 호출을 시작하는 다음 다단계 스크립트를 정의합니다.

steps:
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e -o pipefail # Exit script on any error

        # 1. Get the access token
        TOKEN=$(gcloud auth print-access-token)

        # 2. Define API endpoints and resource names
        RELEASE_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/releaseConfigs/${_RELEASE_CONFIG_ID}"
        COMPILATION_RESULTS_API="https://dataform.googleapis.com/v1/projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/compilationResults"

        # 3. Create the new compilation result
        echo "Creating new compilation result from $$RELEASE_CONFIG_RESOURCE..."
        CREATE_PAYLOAD="{\"releaseConfig\": \"$$RELEASE_CONFIG_RESOURCE\"}"
        curl --fail-with-body -X POST \
          -H "Authorization: Bearer $$TOKEN" \
          -H "Content-Type: application/json" \
          -d "$$CREATE_PAYLOAD" \
          "$$COMPILATION_RESULTS_API" | tee /workspace/compilation_response.json

  - name: 'alpine'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error

        # 4. Parse compilation result name
        apk add --no-cache jq
        COMPILATION_NAME=$(jq -r '.name' < /workspace/compilation_response.json)

        echo "Successfully created compilation result: $$COMPILATION_NAME"
        echo $$COMPILATION_NAME > /workspace/compilation_result_name.txt

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error
        # 5. Update the releaseConfig to set the new compilation result as 'live'
        COMPILATION_NAME=$(cat /workspace/compilation_result_name.txt)
        echo "Updating release config to set $$COMPILATION_NAME as live..."
        PATCH_PAYLOAD="{\"releaseCompilationResult\": \"$$COMPILATION_NAME\", \"gitCommitish\": \"$BRANCH_NAME\"}"

        RELEASE_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/releaseConfigs/${_RELEASE_CONFIG_ID}"
        RELEASE_CONFIG_PATCH_API="https://dataform.googleapis.com/v1/$${RELEASE_CONFIG_RESOURCE}"
        curl --fail-with-body -X PATCH \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -d "$$PATCH_PAYLOAD" \
          "$$RELEASE_CONFIG_PATCH_API?updateMask=releaseCompilationResult"

        echo "Successfully updated release config."

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error
        # 6. Launch a workflow config after recompiling the release config
        WORKFLOW_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/workflowConfigs/${_WORKFLOW_CONFIG_ID}"
        CREATE_WORKFLOW_PAYLOAD="{\"workflowConfig\": \"$$WORKFLOW_CONFIG_RESOURCE\"}"

        WORKFLOW_INVOCATIONS_API="https://dataform.googleapis.com/v1/projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/workflowInvocations"
        curl --fail-with-body -X POST \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -d "$$CREATE_WORKFLOW_PAYLOAD" \
          "$$WORKFLOW_INVOCATIONS_API"

        echo "Successfully created a new workflow invocation."

# Define substitution variables that can be set in the trigger
substitutions:
  _DATAFORM_LOCATION: 'us-central1'  # Default, change if needed
  _DATAFORM_REPO_ID: ''              # Required: Set this in the trigger
  _RELEASE_CONFIG_ID: ''             # Required: Set this in the trigger
  _WORKFLOW_CONFIG_ID: ''            # Required: Set this in the trigger
  _PROJECT_ID: ${PROJECT_ID}         # Automatically uses the build's Project ID

options:
  logging: CLOUD_LOGGING_ONLY

Cloud Build 트리거 생성

코드가 저장소로 푸시될 때 빌드 구성을 실행하는 트리거를 만들려면 다음을 수행하세요.

  1. Google Cloud 콘솔에서 Cloud Build 트리거 페이지를 엽니다.

    트리거로 이동

  2. Git 저장소를 연결하지 않은 경우 저장소 연결을 클릭하고 단계를 따릅니다.

  3. 트리거 만들기를 클릭합니다.

  4. 트리거 이름을 입력합니다.

  5. 트리거의 리전을 선택합니다.

  6. 트리거의 이벤트를 선택합니다.

  7. 소스 섹션에서 저장소를 연결된 Git 저장소로 설정합니다.

  8. 저장소의 기본 브랜치로 브랜치를 설정합니다.

  9. 구성 섹션에서 Cloud Build 구성 파일을 선택합니다. YAML 또는 JSON 파일일 수 있습니다.

  10. 파일 위치를 /cloudbuild.yaml 또는 파일 경로로 설정합니다.

  11. 대체 변수 섹션에서 다음 변수와 값을 추가합니다.

    • _DATAFORM_REPO_ID: Dataform 저장소 ID
    • _RELEASE_CONFIG_ID: Dataform 출시 구성 ID
    • _WORKFLOW_CONFIG_ID: Dataform 워크플로 구성 ID
    • (선택사항) _DATAFORM_LOCATION: Dataform 저장소 리전(예: us-central1)
  12. 서비스 계정 섹션에서 맞춤 서비스 계정을 선택합니다.

  13. 만들기를 클릭합니다.

자세한 내용은 빌드 트리거 만들기를 참고하세요.

트리거 테스트

  1. cloudbuild.yaml 파일을 트리거가 모니터링하는 브랜치에 커밋하고 푸시합니다.
  2. Cloud Build 빌드를 보려면 Google Cloud 콘솔에서 빌드 기록 페이지를 엽니다.

    빌드 기록으로 이동

  3. 빌드가 성공하면 Dataform 페이지로 이동합니다.

    Dataform으로 이동

  4. 저장소를 선택합니다.

  5. 출시 및 예약을 클릭하고 출시 구성을 선택합니다.

  6. 수동 / API 컴파일 결과 목록에서 새 항목을 찾습니다. 가장 최근에 성공한 컴파일은 출시 구성의 실시간 컴파일 결과로 표시되어야 합니다.

  7. 워크플로 실행 로그를 클릭합니다.

  8. 선택한 워크플로 구성을 사용하여 시작된 새 워크플로 호출이 표시됩니다.

다음 단계