En esta página, se describe el proceso de creación de configuraciones de entornos de implementación para tus canalizaciones de orquestación.
Acerca de los entornos de implementación
Tu proyecto puede tener uno o más entornos de implementación. La configuración de cada entorno de implementación define cómo se implementan las canalizaciones y los recursos que pertenecen a este entorno. Por ejemplo, puedes tener un entorno de implementación para el desarrollo y otro para la producción. Estos entornos de implementación pueden tener conjuntos separados de canalizaciones y ejecutarse en diferentes entornos de ejecutores.
Cada entorno de implementación debe tener un entorno de ejecución. Managed Airflow es el motor de organización que ejecuta tus canalizaciones después de que se implementan. En la versión preliminar, el único entorno de ejecución compatible es un entorno de Managed Airflow que asignaste a tu entorno de implementación.
Puedes especificar un bucket de artefactos para un entorno de implementación. En este bucket, se almacenarán los recursos de canalización versionados que ejecuta la canalización y los resultados de algunas acciones que se generan en el bucket de artefactos.
Acerca de los paquetes de canalizaciones
Las canalizaciones de organización se implementan en paquetes de canalizaciones. Un paquete de canalización contiene una o más canalizaciones y activos de canalización que comparten un ciclo de implementación común.
Cada paquete puede tener varias versiones:
- Cuando implementas un paquete, se implementan juntos todos los canalizaciones y los secuencias de comandos que acompañan al paquete de una versión específica.
- Hay exactamente una versión actual del paquete (la que se implementó como la más reciente), mientras que las ejecuciones individuales de la canalización que se activaron con la versión anterior del código continuarán la ejecución sin interrupciones.
- No puedes activar manualmente la canalización en versiones diferentes de la actual.
- Si se borra una canalización de un paquete y se implementa la nueva versión del paquete, la canalización no se ejecutará en la nueva versión, pero continuarán las ejecuciones anteriores que se estén ejecutando de forma activa.
Antes de comenzar
- Asegúrate de haber creado un entorno de ejecución.
Inicializa el andamiaje del paquete de la canalización
Orchestration Pipelines proporciona un comando de gcloud CLI para inicializar un andamiaje para las canalizaciones de orquestación en tu repositorio.
El andamiaje contiene lo siguiente:
orchestration-pipeline.yaml: Es un ejemplo de definición de canalización que contiene un programa, pero no acciones definidas.deployment.yaml: Es un ejemplo de configuración de implementación de canalización que define cómo se debe implementar tu canalización. Contiene la configuración del entorno del ejecutor, el bucket de artefactos y cualquier otro recurso que usen las acciones de tu canalización..github/workflows/validate.yaml: Es un ejemplo de acción de GitHub que valida tu canalización cuando se crea una solicitud de extracción para la ramamain..github/workflows/deploy.yaml: Es un ejemplo de acción de GitHub que implementa tu canalización cuando combinas cambios en la ramamainde tu repositorio de GitHub.
Para inicializar una canalización de organización, haz lo siguiente:
Navega al directorio de tu repositorio o proyecto. El comando creará archivos nuevos en el directorio en el que lo ejecutes.
Ejecuta el siguiente comando de gcloud CLI:
gcloud beta orchestration-pipelines init PIPELINE_NAME \ --environment DEPLOYMENT_ENVIRONMENT \ --composer-environment RUNNER_ENVIRONMENT \ --artifacts-bucket ARTIFACTS_BUCKET_NAME \ --project PROJECT_ID \ --region REGION \ --service-account SERVICE_ACCOUNTReemplaza lo siguiente:
PIPELINE_NAME: Es el nombre de la canalización inicial.DEPLOYMENT_ENVIRONMENT: Es el nombre del entorno de implementación inicial.RUNNER_ENVIRONMENT: Es el nombre del entorno del ejecutor.ARTIFACTS_BUCKET_NAME: Es un bucket de Cloud Storage que se usará para almacenar artefactos de acciones de la canalización, sin el prefijogs://.PROJECT_ID: Es el ID del proyecto de un Google Cloud proyecto en el que se encuentra el entorno del ejecutor.REGION: Es la región en la que se encuentra el entorno del ejecutor.SERVICE_ACCOUNT: Es la cuenta de servicio que se preestablecerá como una variable. Establece este valor en la cuenta de servicio del entorno del ejecutor. Puedes usar esta variable en las definiciones de canalizaciones y los perfiles de recursos. Por ejemplo, como valor para el parámetroimpersonationChainen acciones que usan una cadena de suplantación.Puedes obtener la cuenta de servicio de tu entorno de ejecución consultando los detalles del entorno. En gcloud CLI, la cuenta de servicio del entorno se proporciona en la clave
nodeConfig.serviceAccount.
Ejemplo:
gcloud beta orchestration-pipelines init example-pipeline \ --environment development \ --composer-environment production-runner-us-central1 \ --artifacts-bucket production-artifacts \ --project example-production-project \ --region us-central1 \ --service-account example-account@example-project.iam.gserviceaccount.com
Agrega la configuración del entorno del ejecutor
El entorno del ejecutor se especifica en la clave composer_environment de un entorno de implementación. Si usas varios entornos de implementación, puedes especificar un entorno de ejecución independiente para cada uno.
El nombre del entorno del ejecutor en la clave composer_environment junto con las claves project y region en la configuración del entorno de desarrollo especifican el entorno del ejecutor en el que se implementa la canalización.
En el siguiente ejemplo, se muestra cómo agregar un entorno de ejecución con el nombre example-runner-environment ubicado en la región us-central1, en el proyecto example-development-project:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "example-runner-environment"
...
Ajusta la configuración del entorno del ejecutor
Puedes configurar tu entorno de ejecución como cualquier otro entorno de Managed Service para Apache Airflow:
- Instala dependencias de Python, por ejemplo, para ejecutar localmente los secuencias de comandos de Python de tu canalización en el entorno del ejecutor.
- Escala los entornos para proporcionar más o menos recursos, o bien cambia la forma en que el entorno del ejecutor debe escalar sus trabajadores de Airflow.
- Anula las opciones de configuración de Airflow para configurar Airflow.
Agrega los recursos de tu canalización y configura las acciones
Edita el archivo de definición de tu canalización para incluir acciones y recursos de canalización:
- Consulta la referencia del DSL de canalizaciones de organización para ver ejemplos de código y descripciones de los parámetros de acción.
- Para ver un ejemplo de guía extendida, consulta Crea canalizaciones de ingeniería de datos en la documentación de la extensión del kit de agentes de datos de Google Cloud.
Ejemplo de acción de Hello World
A continuación, se muestra un ejemplo de una acción de canalización minimalista. Puedes usarlo para probar la configuración del entorno de implementación.
Agrega la siguiente acción a tu canalización de andamiaje y reemplaza
actions: []:actions: - python: name: "hello_world_script_run" executionTimeout: "30m" mainFilePath: "scripts/hello_world.py" pythonCallable: "main" engine: local: {}Crea un subdirectorio nuevo llamado
scriptsen tu repositorio y guarda el siguiente archivo como/scripts/hello_world.py:def main(): print("Hello, World!")
Valida canalizaciones
El comando de validación verifica la sintaxis y la corrección del tipo de los archivos de definición de la canalización, y también realiza verificaciones semánticas para recursos como el proyectoGoogle Cloud y el entorno de Managed Service para Apache Airflow en los archivos de configuración de implementación y de definición de la canalización.
De forma predeterminada, se realiza la validación completa de todos los entornos de implementación, incluido el contacto con los entornos de ejecutores remotos. Puedes validar partes específicas de la configuración de tu implementación con los siguientes parámetros:
--mode: Se establece ensyntax-onlypara no acceder a los entornos de ejecutores remotos. El valor predeterminado esfull.--environment: Valida solo un entorno específico.--pipeline-paths: Es una lista separada por comas de las rutas de acceso a los archivos de definición de la canalización que se validarán.--substitutionsy--substitutions-file: Parámetros de configuración de la implementación de sustitución durante la validación.
Puedes ejecutar este comando como una verificación rápida antes de implementar versiones locales de la canalización y como una acción de GitHub como parte de tu flujo de trabajo de CI/CD.
Ejecuta el siguiente comando en tu repositorio para validar tus canalizaciones:
gcloud beta orchestration-pipelines validate
Implementa un paquete de canalización
En esta sección, se describen diferentes formas de implementar tus canalizaciones.
Las Canalizaciones de organización admiten dos formas de implementar tus paquetes de canalizaciones. Estos enfoques están diseñados para funcionar en conjunto durante las diferentes etapas del flujo de trabajo de desarrollo y lanzamiento:
Implementa una versión del paquete local: Implementa las versiones actuales de los recursos de la canalización, las definiciones de la canalización y la configuración de la implementación. El nuevo ID del paquete se generará automáticamente en función del nombre del espacio de trabajo y el MD5 de los archivos del paquete.
Este tipo de implementación está destinado a fines de desarrollo. También recomendamos crear una configuración de implementación independiente que implemente las canalizaciones en un entorno de ejecución de etapa de pruebas.
Implementa los cambios confirmados: Después de confirmar los cambios en los recursos, las definiciones y la configuración de implementación de la canalización, puedes implementar una versión nueva del paquete de la canalización en el entorno del ejecutor. El ID del nuevo paquete se vinculará al SHA de la confirmación de Git en tu repositorio.
Este tipo de implementación está diseñado para ejecutarse como parte de la CI/CD, por ejemplo, a través de una acción de GitHub. También puedes implementar los cambios confirmados desde un repositorio de Git local.
Las canalizaciones de organización admiten varias formas de sustituir parámetros en los archivos de configuración de implementación y definición de canalización, lo que puede ser útil cuando implementas canalizaciones para el desarrollo local y para los comandos que se ejecutan en las acciones de GitHub. Por ejemplo, puedes sustituir parámetros con el argumento --substitutions en los comandos de la gcloud CLI, configurar una variable de entorno o bien obtener el valor de los secretos de GitHub.
Ejecuta comandos de implementación
Local
Para implementar una versión del paquete local, usa el argumento --local:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT \
--local
Reemplaza lo siguiente:
DEPLOYMENT_ENVIRONMENT: Es el entorno de implementación de la canalización.
Ejemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local
El ejemplo de salida contiene el nombre y la versión del paquete de la canalización, y el estado de la implementación:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
Confirmada
Para implementar los cambios, asegúrate de que se hayan confirmado en tu repositorio. Ejecuta el siguiente comando en gcloud CLI:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT
Reemplaza lo siguiente:
DEPLOYMENT_ENVIRONMENT: Es el entorno de implementación de la canalización.
Ejemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment
El ejemplo de salida contiene el nombre y la versión del paquete de la canalización, y el estado de la implementación:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
Acción de GitHub
El andamiaje de la canalización tiene dos acciones de GitHub de ejemplo que pueden ayudarte a comenzar a implementar y validar tus canalizaciones a través de una acción de GitHub. Cuando subes estos archivos a GitHub, tu repositorio se configura con estas acciones. Para obtener información sobre cómo configurar acciones de GitHub más complejas, consulta Implementación con GitHub Actions en la documentación de GitHub.
Para usar las acciones de GitHub de ejemplo, haz lo siguiente:
Crea una cuenta de servicio independiente que ejecutará los comandos de gcloud CLI desde las acciones de GitHub.
Asigna roles que permitan ejecutar comandos de implementación y validación en esta cuenta de servicio.
Crea una clave de cuenta de servicio para esta cuenta de servicio.
Agrega el secreto
GCP_SA_KEYa tu repositorio de GitHub y establece su valor en la clave de la cuenta de servicio creada. Para obtener más información sobre cómo agregar secretos, consulta Uso de secretos en GitHub Actions.
Configuración de implementación
En esta sección, se proporciona información sobre la configuración adicional que puedes aplicar a un entorno de implementación.
Cómo agregar o quitar otra canalización
Para agregar otra canalización a un entorno de implementación existente, haz lo siguiente:
- Agrega un archivo de definición de canalización y recursos de canalización al repositorio.
- En la configuración de la implementación, agrega una clave
sourcenueva con el valor que apunta al nuevo archivo de definición de la canalización.
Ejemplo:
environments:
dev:
...
pipelines:
- source: example-pipeline.yaml
- source: another-pipeline.yaml
Para quitar una canalización, haz lo siguiente:
- En la configuración de la implementación, quita la clave
sourcede la canalización. - Quita el archivo de definición de la canalización y los recursos de la canalización del repositorio.
- Implementa la nueva versión de la canalización. La canalización no estará presente en la nueva versión del paquete.
Agregar otro entorno de implementación
Para agregar otro entorno de implementación, haz lo siguiente:
- En la configuración de implementación, agrega una clave nueva a la asignación de
environments. - Asegúrate de que tu configuración de implementación y las definiciones de canalización usen variables y variables de configuración de implementación para ejecutar acciones de canalización que requieran diferenciar entre los recursos de Google Cloudque pertenecen a cada entorno.
Ejemplo:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
...
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
...
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
...
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
Variables, secretos y sustitución
Después de definir variables en la configuración de la implementación, puedes usarlas en las definiciones de canalizaciones y los perfiles de recursos.
Agrega variables personalizadas
Puedes agregar tus propias variables a la clave variables en la configuración de implementación:
- En el entorno de configuración de la implementación, agrega la clave
variables. - Agrega una asignación de nombres y valores de variables.
- Para obtener el valor de la variable en las definiciones de tu canalización y los perfiles de recursos, encierra el nombre de la variable entre llaves dobles:
{{ example_variable }}.
En el siguiente ejemplo, se establecen las mismas variables en dos entornos de implementación.
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
artifact_storage:
bucket: "development-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
network_uri: projects/example-development-project/global/networks/default
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
artifact_storage:
bucket: "production-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
network_uri: projects/example-production-project/global/networks/vpc-main
A continuación, se muestra un perfil de recursos de Managed Service para Apache Spark que lee estas variables. Las acciones en el archivo de definición de tu canalización (example-pipeline.yaml) pueden usar el mismo perfil de recursos, y no es necesario que las ajustes entre los entornos de producción y desarrollo.
profileId: serverless-standard
type: dataproc.session
definition:
environmentConfig:
execution_config:
service_account: "{{ service_account }}"
network_uri: "{{ network_uri }}"
Cómo acceder a los parámetros de configuración de la implementación
Algunos parámetros de la configuración de implementación también están disponibles como variables:
projectregioncomposer_environmentCOMMIT_SHA: Es el SHA de la confirmación actual del repositorio de Git. Puedes usar esta variable, por ejemplo, sustituyendo su valor cuando implementes una versión local del paquete de la canalización. De esta manera, las acciones que dependen del valor SHA de la confirmación seguirán operando con el contenido de archivo correcto.
En el siguiente ejemplo, la definición de la canalización establece valores predeterminados para las acciones de la canalización según los parámetros de configuración de la implementación project y region.
pipelineId: example-pipeline
description: Example pipeline
runner: 'airflow'
owner: 'data-eng-team'
modelVersion: '1.0'
defaults:
projectId: {{ project }}
location: {{ region }}
executionConfig:
retries: 1
Accede a los secretos de la acción de GitHub
Puedes usar secretos de GitHub en los archivos de configuración de implementación y definición de tu canalización. Cuando se implementa una canalización a través de una acción de GitHub, los valores de estos secretos se pasan tanto a las definiciones de la canalización como a la configuración de implementación.
Para crear un secreto al que se podrá acceder durante la implementación, haz lo siguiente:
En GitHub, agrega un secreto con el prefijo
DEPLOY_VAR_. Ejemplo:DEPLOY_VAR_API_KEY.Para obtener más información sobre cómo crear secretos, consulta Uso de secretos en GitHub Actions en la documentación de GitHub.
Agrega la misma variable de entorno a tu flujo de trabajo de GitHub. Lee el valor de esta variable de los secretos de GitHub.
Ejemplo:
jobs: deploy: runs-on: ubuntu-latest env: DEPLOY_VAR_API_KEY: ${{ secrets.API_KEY }} steps: ...Para obtener más información sobre cómo agregar variables de entorno a los flujos de trabajo, consulta Almacena información en variables en la documentación de GitHub.
Usa el nombre de la variable (sin el prefijo
DEPLOY_VAR_) en los archivos de definición de la canalización y en la configuración de la implementación. Ejemplo:{{ API_KEY }}.(Opcional) Para implementar una versión local de una canalización que usa secretos de GitHub, puedes sustituir las variables de entorno
DEPLOY_VAR_*del secreto a través de parámetros de la línea de comandos o definiéndolas en el entorno en el que ejecutas los comandos de implementación.
Sustituye variables a través de parámetros de la línea de comandos
Los comandos de implementación de la CLI de gcloud admiten el argumento --substitutions, que puedes usar para anular o establecer variables para las definiciones de tu canalización y la configuración de implementación.
Para sustituir variables a través de parámetros de la línea de comandos, proporciona la lista de variables y sus valores en la línea de comandos:
Ejemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions=VARIABLE_NAME_1=value_1,VARIABLE_NAME_2=value_2
Como alternativa, puedes almacenar sustituciones en un archivo YAML y especificarlo en el argumento --substitutions-file:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions-file=substitutions.yaml
En el archivo de sustituciones, proporciona una asignación de variables:
VARIABLE_NAME_1: value_1
VARIABLE_NAME_2: value_2
Puedes usar el nombre de la variable en tus archivos de definición de canalización y en la configuración de implementación. Ejemplo: {{ VARIABLE_NAME_1 }}.
Proporciona y sustituye variables a través de variables de entorno
Tus definiciones de canalización y tu configuración de implementación pueden usar variables de entorno que tengan el prefijo DEPLOY_VAR_.
Establece una variable de entorno:
export DEPLOY_VAR_VARIABLE_NAME_1=value_1Puedes usar el nombre de la variable (sin el prefijo
DEPLOY_VAR_) en los archivos de definición de la canalización y en la configuración de implementación. Ejemplo:{{ VARIABLE_NAME_1 }}.