Menyediakan resource

Halaman ini menjelaskan cara menyediakan resource untuk pipeline Anda.

Tentang penyediaan resource di Orchestration Pipelines

Orchestration Pipelines menggunakan pendekatan Infrastructure-as-Code (IaC) untuk mengelola Google Cloud resource yang digunakan oleh pipeline data Anda, yang memberikan manfaat berikut:

  • Kontrol Versi Perubahan infrastruktur dilacak di Git.
  • Pengulangan. Lingkungan dapat dibuat ulang dengan andal.
  • Kolaborasi. Anggota tim dapat meninjau dan berkontribusi pada definisi infrastruktur.
  • Otomatisasi. Terintegrasi ke dalam pipeline CI/CD.
  • Opsionalitas dan Koeksistensi. Framework penyediaan resource bersifat opsional. Jika sudah menggunakan Terraform atau praktik IaC lainnya yang sudah mapan untuk penyediaan resource, Anda dapat terus melakukannya. Anda dapat mengelola subset resource yang relevan dengan pipeline atau aplikasi tertentu, yang berpotensi berdampingan dengan resource yang dikelola oleh alat lain.

Di Orchestration Pipelines, project Anda dapat memiliki satu atau beberapa lingkungan deployment. Konfigurasi setiap lingkungan deployment menentukan cara pipeline dan resource yang termasuk dalam lingkungan ini di-deploy. Misalnya, Anda dapat memiliki satu lingkungan deployment untuk pengembangan, dan lingkungan lain untuk produksi.

Contoh konfigurasi lingkungan deployment. Resource yang disediakan ditentukan dalam pemetaan resources.

environments:
  dev:
    project: example-dev-project
    region: us-central1
    variables:
      dataset_name: marketing_analytics_dev
    secrets:
      dts_api_key: "projects/example-dev-project/secrets/dev-dts-key/versions/latest"
    resources:
      - type: dataproc.cluster
        name: example-static-cluster-resource
        definition:
          clusterName: example-static-cluster

Saat Anda men-deploy pipeline, Orchestration Pipelines menggunakan model "buat atau perbarui" tanpa status untuk menyediakan resource yang telah Anda tentukan:

  • Jika resource ditentukan tetapi tidak ada, Orchestration Pipelines akan membuatnya.

  • Jika resource ada:

    • (Default) Perbarui konfigurasi resource agar sesuai dengan definisi.

    • Jika Anda menentukan perilaku ini dalam konfigurasi resource, Orchestration Pipelines dapat mengabaikan perubahan atau membuat ulang resource.

  • Jika Anda menghapus definisi resource dari konfigurasi, tindakan ini tidak akan menghapus resource. Pendekatan ini memprioritaskan keamanan dan mencegah kehilangan data yang tidak disengaja.

  • Jika Anda mengganti nama resource yang ada, Orchestration Pipelines akan membuat resource baru dengan nama baru dan mempertahankan resource aslinya.

Resource yang disediakan dibandingkan dengan profil resource

Profil resource adalah file template yang berisi definisi satu atau beberapa Google Cloud resource. Profil resource berbeda dengan resource yang disediakan dan dapat digunakan bersama dengan resource yang disediakan:

  • Dengan resource yang disediakan: Daripada menentukan konfigurasi resource yang sama secara inline dalam setiap lingkungan pengembangan di deployment.yaml, Anda dapat menentukannya sekali dalam profil, lalu mereferensikannya. Resource yang disediakan mendukung berbagai jenis resource yang dapat ditentukan dalam profil resource.

  • Dengan tindakan pipeline: Anda dapat menggunakan profil resource dalam tindakan saat resource disediakan selama durasi tindakan. Dengan menggunakan profil resource, bukan menentukan konfigurasi resource secara inline, Anda dapat memisahkan konfigurasi resource dari tindakan pipeline dan menggunakan kembali satu konfigurasi untuk beberapa tindakan pipeline. Tindakan pipeline hanya mendukung profil resource untuk resource Managed Service untuk Apache Spark, misalnya saat menjalankan tindakan pipeline di cluster sementara.

Melihat jenis resource yang tersedia

Lihat Jenis resource.

Anda juga dapat melihat semua resource yang tersedia di gcloud CLI dengan perintah berikut:

gcloud beta orchestration-pipelines resource-types list

Menambahkan resource baru

Untuk menambahkan resource yang disediakan baru ke konfigurasi lingkungan deployment, tambahkan definisinya sebagai berikut:

  1. Dalam konfigurasi lingkungan deployment, tambahkan item baru ke daftar environments.DEVELOPMENT_ENVIRONMENT.resources.

  2. Tentukan kunci berikut:

    • type: Jenis resource yang akan disediakan. Google Cloud Contoh: bigquery.dataset, dataform.repository. Anda dapat melihat jenis resource yang tersedia menggunakan perintah gcloud CLI.

    • name: Nama logis untuk resource dalam file deployment.yaml.

    • parent: Menentukan resource induk untuk jenis resource yang memerlukannya. Tempatkan name resource induk sebagai nilai.

    • updateAction: Menentukan tindakan apa yang harus diambil saat perubahan terdeteksi dalam konfigurasi resource:

      • (Default) patch: Perbarui properti resource yang telah berubah.

        Operasi pembaruan hanya mengubah properti yang ditentukan dalam konfigurasi resource (YAML), sehingga properti yang ada lainnya tidak berubah. Anda dapat menggunakan perilaku ini, misalnya, untuk mengelola hanya properti yang penting untuk eksekusi pipeline, dan mempertahankan properti lain yang dikonfigurasi secara manual.

        Jika perubahan memengaruhi kolom yang tidak dapat diubah atau resource tidak dapat diubah, deployment akan gagal. Dalam kasus seperti itu, sebaiknya sesuaikan definisi agar hanya mengubah kolom yang dapat diubah. Jika hal ini tidak memungkinkan, Anda dapat mengubah tindakan pembaruan menjadi recreate.

      • skip: Abaikan perubahan dan jangan perbarui konfigurasi resource.

        Sebaiknya gunakan opsi ini jika Anda ingin mengelola keberadaan resource, tetapi melakukan perubahan dan pembaruan konfigurasi menggunakan cara lain, misalnya, secara manual.

      • recreate: Jika ada perubahan yang terdeteksi, hapus resource yang ada, lalu buat resource baru berdasarkan definisi resource saat ini.

        Sebaiknya gunakan opsi ini untuk resource yang sepenuhnya tidak dapat diubah atau saat perubahan dilakukan pada kolom yang tidak dapat diupdate di tempat.

    • definition: Spesifikasi resource, sebagai pemetaan yang mencerminkan struktur konfigurasi resource di API resource.

    • (Opsional) metadata: Metadata khusus Orchestration Pipelines. Beberapa jenis resource menggunakan kolom metadata untuk mengonfigurasi resource di Google Cloud Misalnya, kolom metadata.location dapat digunakan untuk membuat resource zona.

  3. Validasi dan deploy pipeline Anda. Orchestration Pipelines akan menyediakan resource baru saat pipeline di-deploy.

Contoh: Resource yang berjalan lama

Contoh ini menunjukkan cara menambahkan resource yang berjalan lama, dalam hal ini, cluster Managed Service untuk Apache Spark statis. Setelah disediakan, resource ini dapat digunakan dalam tindakan pipeline. Sebaiknya gunakan pendekatan umum ini saat pipeline Anda menggunakan resource persisten.

Contoh berikut menambahkan cluster Managed Service untuk Apache Spark statis bernama example-static-cluster ke lingkungan deployment dev. Definisi resource disediakan berdasarkan Dataproc API.

environments:
  dev:
    project: "example-project"
    region: "us-central1"
    # A runner environment for executing pipeline actions
    composer_environment: "example-runner-environment"

    resources:
      - type: dataproc.cluster
        name: example-static-cluster
        updateAction: patch
        definition:
          config:
            masterConfig:
              numInstances: 1
              machineTypeUri: n1-standard-4
            workerConfig:
              numInstances: 3
              machineTypeUri: n1-standard-4

Cluster ini dapat digunakan dalam tindakan pipeline seperti biasa. Tidak ada perbedaan dalam penggunaan dibandingkan dengan, misalnya, cluster yang dibuat secara manual.

modelVersion: "1.0"
pipelineId: "example-dataproc-pipeline"
...
actions:
  - pyspark:
      name: "run-pyspark-with-pyfiles-on-existing-cluster"
      engine:
        dataprocOnGce:
          existingCluster:
            clusterName: "example-static-cluster"
            location: {{ region }}
            projectId: {{ project }}
      mainFilePath: "scripts/my_spark_job_with_pyfiles.py"
      pyFiles:
        - "scripts/lib1.py"

Contoh: Proses build dan rilis otomatis untuk Dataform

Contoh ini menunjukkan proses build dan rilis otomatis untuk Dataform. Dalam skenario contoh:

  1. Repositori Dataform terhubung ke repositori GitHub melalui Developer Connect.

  2. Anda mengirimkan perubahan ke repositori GitHub.

  3. Setelah perubahan dikirim, Anda men-deploy pipeline.

  4. Dataform mengambil kode dari repositori GitHub, membuat hasil kompilasi, dan menyiapkannya untuk dieksekusi.

  5. Konfigurasi alur kerja kemudian digunakan untuk menjalankan alur kerja dengan rilis yang dikompilasi secara otomatis ini.

Contoh kode berikut menentukan repositori Dataform, konfigurasi rilis, dan konfigurasi alur kerja untuk repositori tersebut di lingkungan deployment dev:

  • Baris gitCommitish: "{{ COMMIT_SHA }}" mengikat konfigurasi rilis ke commit Git tertentu yang di-deploy. The COMMIT_SHA adalah variabel yang di-resolve ke SHA commit paket pipeline yang di-deploy.
  • Kunci codeCompilationConfig.pipelineConfig.path mengarah ke subfolder yang berisi aset pipeline. Dengan cara ini, Anda dapat menyimpan beberapa pipeline Dataform dalam satu repositori.
  • Menetapkan releaseCompilationResult ke auto dalam definisi releaseConfig akan menginstruksikan Orchestration Pipelines untuk memicu kompilasi Dataform setelah resource releaseConfig dibuat atau diperbarui dengan gitCommitish baru:

    1. Framework ini pertama-tama akan melakukan upsert (memperbarui atau membuat) resource releaseConfig untuk mengarah ke commit yang ditentukan.
    2. Kemudian, karena setelan auto, framework ini akan memanggil Dataform API untuk membuat Hasil Kompilasi baru berdasarkan kode pada commit tersebut.
    3. releaseConfig diperbarui lagi untuk mengarah ke ID Hasil Kompilasi yang baru dibuat, sehingga versi tersebut menjadi versi "aktif".
environments:
  dev:
    project: example-project
    region: us-central1
    composer_environment: example-runner-environment
    artifact_storage:
      bucket: example-bucket
      path_prefix: initialized-artifact-bucket
    pipelines:
      - source: initialized-pipeline.yaml
      - source: dataform_local_pipeline.yaml
      - source: dataform_service_pipeline.yaml
    resources:
      - name: {{ repository_name }}
        type: dataform.repository
        definition:
          labels:
            bigquery-deployment: preview
      - type: dataform.repository.releaseConfig
        name: subfolder-release
        parent: {{ repository_name }}
        definition:
          gitCommitish: {{ COMMIT_SHA }}
          releaseCompilationResult: auto
          codeCompilationConfig:
            pipelineConfig:
              pipelineType: DATAFORM
              path: weather_dataform
      - type: dataform.repository.workflowConfig
        name: {{ workflow_config_name }}
        parent: {{ repository_name }}
        definition:
          releaseConfig: subfolder-release
          invocationConfig:
            serviceAccount: {{ service_account }}
    variables:
      service_account: example-account@example-project.iam.gserviceaccount.com
      network_uri: projects/example-project/global/networks/default
      subnetwork_uri: projects/example-project/regions/us-central1/subnetworks/default
      region: us-central1
      repository_name: weather-aggregation-repo
      workflow_config_name: updated-subfolder-workflow

Contoh tindakan pipeline yang menjalankan alur kerja dengan konfigurasi alur kerja yang dibuat:

modelVersion: '1.0'
pipelineId: dataform_service_pipeline
description: Updated run Dataform pipeline via Dataform Service
runner: airflow
owner: data-eng-team

defaults:
  projectId: {{ project }}
  location: {{ region }}
  executionConfig:
    retries: 1

actions:
  - pipeline:
      name: run_dataform_service
      framework:
        dataform:
          dataformService:
            location: {{ region }}
            projectId: {{ project }}
            repositoryId: {{ repository_name }}
            workflowInvocation:
              workflowConfig: projects/{{ project }}/locations/{{ region }}/repositories/{{
                repository_name }}/workflowConfigs/{{ workflow_config_name }}
  - python:
      name: fibonacci_python
      mainFilePath: scripts/fibonacci.py
      pythonCallable: fibonacciTen
      engine:
        local: {}
  - sql:
      name: dummy_bq_query
      engine:
        bigquery:
          location: {{ region }}
      query:
        inline: 'SELECT COUNT(*) FROM `{{ project }}.weather_data.sensor_readings`'
tags:
  - job:datacloud:vscode