Auf dieser Seite wird erläutert, wie Sie Ressourcen für Ihre Pipelines bereitstellen.
Ressourcenbereitstellung in Orchestration Pipelines
Orchestration Pipelines verwendet einen Infrastructure-as-Code-Ansatz (IaC) zur Verwaltung Google Cloud von Ressourcen, die von Ihren Datenpipelines verwendet werden. Dies bietet folgende Vorteile:
- Versionsverwaltung Infrastrukturänderungen werden in Git verfolgt.
- Wiederholbarkeit Umgebungen können zuverlässig neu erstellt werden.
- Zusammenarbeit Teammitglieder können Infrastrukturdefinitionen überprüfen und dazu beitragen.
- Automatisierung Integration in CI/CD-Pipelines
- Optionalität und Koexistenz Das Framework für die Ressourcenbereitstellung ist optional. Wenn Sie bereits Terraform oder andere etablierte IaC-Methoden für die Ressourcenbereitstellung verwenden, können Sie dies weiterhin tun. Sie können eine Teilmenge von Ressourcen verwalten, die für eine bestimmte Pipeline oder Anwendung relevant sind, und diese möglicherweise zusammen mit Ressourcen verwenden, die von anderen Tools verwaltet werden.
In Orchestration Pipelines kann Ihr Projekt eine oder mehrere Bereitstellungsumgebungen haben. Die Konfiguration jeder Bereitstellungsumgebung definiert, wie Pipelines und Ressourcen, die zu dieser Umgebung gehören, bereitgestellt werden. Sie können beispielsweise eine Bereitstellungsumgebung für die Entwicklung und eine andere für die Produktion haben.
Beispiel für eine Konfiguration der Bereitstellungsumgebung. Bereitgestellte Ressourcen werden in der Zuordnung resources definiert.
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
Wenn Sie Ihre Pipeline bereitstellen, verwendet Orchestration Pipelines ein zustandsloses Modell zum Erstellen oder Aktualisieren, um die von Ihnen definierten Ressourcen bereitzustellen:
Wenn eine Ressource definiert, aber nicht vorhanden ist, wird sie von Orchestration Pipelines erstellt.
Wenn eine Ressource vorhanden ist:
(Standard) Aktualisieren Sie die Konfiguration der Ressource, damit sie mit der Definition übereinstimmt.
Wenn Sie dieses Verhalten in der Konfiguration der Ressource definieren, kann Orchestration Pipelines Änderungen ignorieren oder eine Ressource neu erstellen.
Wenn Sie die Definition einer Ressource aus der Konfiguration löschen, wird die Ressource nicht gelöscht. Dieser Ansatz priorisiert die Sicherheit und verhindert versehentlichen Datenverlust.
Wenn Sie eine vorhandene Ressource umbenennen, erstellt Orchestration Pipelines eine neue Ressource mit dem neuen Namen und behält die ursprüngliche Ressource bei.
Bereitgestellte Ressourcen im Vergleich zu Ressourcenprofilen
Ressourcenprofile sind Vorlagendateien, die die Definition einer oder mehrerer Google Cloud Ressourcen enthalten. Sie unterscheiden sich von bereitgestellten Ressourcen und können zusammen mit ihnen verwendet werden:
Mit bereitgestellten Ressourcen: Anstatt die gleiche Ressourcenkonfiguration inline in jeder Entwicklungsumgebung in Ihrer
deployment.yamlzu definieren, können Sie sie einmal in einem Profil definieren und dann darauf verweisen. Bereitgestellte Ressourcen unterstützen eine Vielzahl von Ressourcentypen, die in Ressourcen profilen definiert werden können.Mit Pipelineaktionen: Sie können Ressourcenprofile in Aktionen verwenden, bei denen Ressourcen für die Dauer einer Aktion bereitgestellt werden. Wenn Sie ein Ressourcenprofil verwenden, anstatt die Konfiguration der Ressource inline anzugeben, können Sie die Ressourcenkonfiguration von der Pipelineaktion trennen und eine Konfiguration für mehrere Pipelineaktionen wiederverwenden. Pipelineaktionen unterstützen Ressourcenprofile nur für Managed Service for Apache Spark-Ressourcen, z. B. bei der Ausführung von Pipelineaktionen in einem kurzlebigen Cluster.
Verfügbare Ressourcentypen ansehen
Weitere Informationen finden Sie unter Ressourcentypen.
Sie können auch alle verfügbaren Ressourcen in der gcloud CLI mit dem folgenden Befehl aufrufen:
gcloud beta orchestration-pipelines resource-types list
Neue Ressource hinzufügen
Wenn Sie der Konfiguration der Bereitstellungsumgebung eine neue bereitgestellte Ressource hinzufügen möchten, fügen Sie die Definition so hinzu:
Fügen Sie in der Konfiguration Ihrer Bereitstellungsumgebung der
environments.DEVELOPMENT_ENVIRONMENT.resourcesListe ein neues Element hinzu.Geben Sie die folgenden Schlüssel an:
type: Der Typ der Google Cloud bereitzustellenden Ressource. Beispiele:bigquery.dataset,dataform.repository. Sie können verfügbare Ressourcentypen mit einem gcloud CLI-Befehl aufrufen.name: Ein logischer Name für die Ressource in der Dateideployment.yaml.parent: Gibt eine übergeordnete Ressource für Ressourcentypen an, die eine solche erfordern. Geben Sie dennameder übergeordneten Ressource als Wert an.updateAction: Gibt an, welche Aktion ausgeführt werden muss, wenn eine Änderung in der Konfiguration der Ressource erkannt wird:(Standard)
patch: Aktualisieren Sie die Attribute der Ressource, die sich geändert haben.Der Aktualisierungsvorgang ändert nur die in der Konfiguration der Ressource (YAML) angegebenen Attribute. Andere vorhandene Attribute bleiben unverändert. Sie können dieses Verhalten beispielsweise verwenden, um nur Attribute zu verwalten, die für die Pipelineausführung wichtig sind, und andere Attribute manuell zu konfigurieren.
Wenn Änderungen unveränderliche Felder betreffen oder die Ressource unveränderlich ist, schlägt die Bereitstellung fehl. In solchen Fällen empfehlen wir, die Definition so anzupassen, dass nur veränderliche Felder geändert werden. Wenn dies nicht möglich ist, können Sie die Aktualisierungsaktion in
recreateändern.skip: Änderungen ignorieren und die Konfiguration der Ressource nicht aktualisieren.Wir empfehlen, diese Option zu verwenden, wenn Sie die Existenz der Ressource verwalten, die Konfigurationsänderungen und ‑aktualisierungen aber auf andere Weise vornehmen möchten, z. B. manuell.
recreate: Wenn Änderungen erkannt werden, löschen Sie die vorhandene Ressource und erstellen Sie dann eine neue Ressource basierend auf der aktuellen Definition der Ressource.Wir empfehlen, diese Option für Ressourcen zu verwenden, die vollständig unveränderlich sind oder wenn Änderungen an Feldern vorgenommen werden, die nicht direkt aktualisiert werden können.
definition: Spezifikation der Ressource als Zuordnung, die die Konfigurationsstruktur der Ressource in der API der Ressource widerspiegelt.(Optional)
metadata: Orchestration Pipelines-spezifische Metadaten. Einige Ressourcentypen verwenden Metadatenfelder, um die Ressource in Google Cloud zu konfigurieren. Mit demmetadata.locationFeld können beispielsweise zonale Ressourcen erstellt werden.
Validieren und stellen Sie Ihre Pipeline bereit. Orchestration Pipelines stellt die neue Ressource bereit, wenn die Pipeline bereitgestellt wird.
Beispiel: Ressourcen mit langer Laufzeit
In diesem Beispiel wird gezeigt, wie Sie eine Ressource mit langer Laufzeit hinzufügen, in diesem Fall einen statischen Managed Service for Apache Spark-Cluster. Nach der Bereitstellung kann er in Pipelineaktionen verwendet werden. Wir empfehlen, diesen allgemeinen Ansatz zu verwenden, wenn Ihre Pipelines persistente Ressourcen verwenden.
Im folgenden Beispiel wird der Bereitstellungsumgebung dev ein statischer Managed Service for Apache Spark-Cluster mit dem Namen example-static-cluster hinzugefügt. Die Definition der Ressource basiert auf der 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
Dieser Cluster kann wie gewohnt in Pipelineaktionen verwendet werden. Es gibt keinen Unterschied zur Verwendung eines manuell erstellten Clusters.
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"
Beispiel: Automatisierter Build- und Releaseprozess für Dataform
In diesem Beispiel wird ein automatisierter Build- und Releaseprozess für Dataform veranschaulicht. Im Beispielszenario:
Ein Dataform-Repository ist über Developer Connect mit einem GitHub-Repository verbunden.
Sie übertragen Änderungen per Push an das GitHub-Repository.
Nachdem die Änderungen übertragen wurden, stellen Sie die Pipeline bereit.
Dataform ruft den Code aus dem GitHub-Repository ab, erstellt ein Kompilierungsergebnis und bereitet es für die Ausführung vor.
Anschließend werden mit einer Workflowkonfiguration Workflows mit diesem automatisch kompilierten Release ausgeführt.
Im folgenden Codebeispiel werden ein Dataform-Repository, eine Releasekonfiguration und eine Workflowkonfiguration dafür in der Bereitstellungsumgebung dev definiert:
- Die
gitCommitish: "{{ COMMIT_SHA }}"Zeile verknüpft die Release Konfiguration mit dem spezifischen Git-Commit, der bereitgestellt wird. DieCOMMIT_SHAist eine Variable, die in die Commit-SHA des bereitgestellten Pipelinepakets aufgelöst wird. - Der Schlüssel
codeCompilationConfig.pipelineConfig.pathverweist auf einen Unterordner, der Pipeline-Assets enthält. So können Sie mehrere Dataform-Pipelines in einem einzigen Repository aufbewahren. Wenn Sie
releaseCompilationResultin der Definition vonreleaseConfigaufautosetzen, wird Orchestration Pipelines angewiesen, eine Dataform-Kompilierung auszulösen, nachdem die RessourcereleaseConfigmit dem neuengitCommitisherstellt oder aktualisiert wurde:- Das Framework führt zuerst ein Upsert (Aktualisieren oder Erstellen) der Ressource
releaseConfigdurch, um auf den angegebenen Commit zu verweisen. - Aufgrund der Einstellung
autowird dann die Dataform API aufgerufen, um ein neues Kompilierungsergebnis basierend auf dem Code in diesem Commit zu erstellen. - Die
releaseConfigwird noch einmal aktualisiert, um auf die neu erstellte Kompilierungsergebnis-ID zu verweisen. Diese Version ist dann die "Live"-Version.
- Das Framework führt zuerst ein Upsert (Aktualisieren oder Erstellen) der Ressource
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
Beispiel für eine Pipelineaktion, die einen Workflow mit der erstellten Workflowkonfiguration ausführt:
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