Administra conexiones de Airflow

En esta página, se describe cómo usar las conexiones de Airflow.

Las conexiones de Airflow te permiten acceder a los recursos en proyectos de Google Cloud desde un entorno de Cloud Composer. Puedes crear los ID de conexión de Airflow para almacenar información, como accesos y nombres de host, y tus flujos de trabajo hacen referencia a los ID de conexión. Las conexiones de Airflow son la forma recomendada de almacenar secretos y credenciales usados en los flujos de trabajo.

Las conexiones de Airflow te permiten almacenar la información de conexión necesaria para que un entorno de Cloud Composer se comunique con otras API, como proyectos de Google Cloud, otros proveedores de servicios en la nube o servicios de terceros.

Una conexión de Airflow puede almacenar detalles, por ejemplo, credenciales, nombres de host o parámetros de API adicionales. Cada conexión tiene un ID asociado que puedes usar en las tareas del flujo de trabajo para hacer referencia a los detalles predeterminados. Recomendamos que uses conexiones de Airflow para almacenar secretos y credenciales para tareas de flujo de trabajo.

El tipo de conexión de Google Cloud habilita las integraciones de Google Cloud.

Clave fernet y conexiones seguras

Cuando creas un entorno nuevo, Cloud Composer genera una clave fernet única y permanente para el entorno y protege los extras de conexión de forma predeterminada. Puedes ver la fernet_key en la configuración de Airflow. Para obtener más información sobre cómo se protegen las conexiones, consulta Protege las conexiones.

Usa las conexiones predeterminadas

De manera predeterminada, Cloud Composer configura las siguientes conexiones de Airflow para Google Cloud Platform:

  • bigquery_default
  • google_cloud_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Puedes usar estas conexiones desde tus DAG mediante el ID de conexión predeterminado. En el siguiente ejemplo, se usa BigQueryOperator con la conexión predeterminada.

task_default = bigquery_operator.BigQueryOperator(
    task_id='task_default_connection',
    bql='SELECT 1', use_legacy_sql=False)

También puedes especificar el ID de conexión de forma explícita cuando creas el operador.

task_explicit = bigquery_operator.BigQueryOperator(
    task_id='task_explicit_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Composer creates a 'google_cloud_default' connection by default.
    bigquery_conn_id='google_cloud_default')

Accede a los recursos de otro proyecto

La forma recomendada para permitir que tu entorno de Cloud Composer acceda a los recursos en los proyectos de Google Cloud es mediante las conexiones predeterminadas y la asignación de los permisos adecuados de la administración de identidades y accesos a la cuenta de servicio asociada con tu entorno.

En las siguientes secciones, se proporcionan ejemplos de cómo permitir operaciones de lectura y escritura en los depósitos de Cloud Storage en your-storage-project para un entorno de Cloud Composer implementado en el ID del proyecto your-composer-project.

Determina la cuenta de servicio asociada a tu entorno

Console

  1. En Cloud Console, abre la página Entornos.

    Abrir la página Entornos

  2. En la columna Nombre, haz clic en el nombre del entorno para abrir la página Detalles del entorno.
  3. Anota la Cuenta de servicio. Este valor es una dirección de correo electrónico, como service-account-name@your-composer-project.iam.gserviceaccount.com.

gcloud

Ingresa el siguiente comando y reemplaza VARIABLES por los valores apropiados:

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION \
    --format="get(config.nodeConfig.serviceAccount)" 

El resultado muestra una dirección, como service-account-name@your-composer-project.iam.gserviceaccount.com.

Otorga los permisos de IAM adecuados a la cuenta de servicio

Para permitir operaciones de lectura y escritura en los depósitos de Cloud Storage en your-storage-project, otorga la función roles/storage.objectAdmin a la cuenta de servicio asociada con tu entorno de Cloud Composer.

Console

  1. Ve a la página IAM y administrador de tu proyecto de almacenamiento.

    Abrir la página IAM y administrador

  2. Haz clic en Agregar miembros.

  3. En el cuadro de diálogo Agregar miembros, especifica la dirección de correo electrónico completa de la cuenta de servicio asociada con tu entorno de Cloud Composer.

  4. En el menú desplegable Seleccionar una función, selecciona los permisos correspondientes. Para este ejemplo, selecciona la función Almacenamiento > Administrador de objeto.

  5. Haga clic en Add.

gcloud

Usa el comando gcloud projects add-iam-policy-binding para agregar permisos de IAM a nivel de proyecto. Reemplaza VARIABLES por los valores adecuados:

gcloud projects add-iam-policy-binding YOUR_STORAGE_PROJECT \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/storage.objectAdmin 

Una vez que se otorgan los permisos adecuados, puedes acceder a los recursos del proyecto your-storage-project con las mismas conexiones de Airflow predeterminadas que usas para acceder a los recursos del proyecto your-composer-project.

Crea conexiones de Airflow nuevas

Antes de comenzar

Otorga los permisos de IAM adecuados a la cuenta de servicio asociada con tu entorno de Cloud Composer y usa las conexiones predeterminadas en tus definiciones de DAG. Si no puedes hacerlo, sigue los pasos que se indican en esta sección.

Crea una conexión a otro proyecto

En los siguientes pasos, se proporcionan ejemplos sobre cómo permitir operaciones de lectura y escritura en los depósitos de Cloud Storage en your-storage-project para un entorno de Cloud Composer implementado en el ID del proyecto your-composer-project.

  1. Crea una cuenta de servicio en your-storage-project y descarga una clave JSON:

    1. En Cloud Console, abre la página Cuentas de servicio.

      Abrir la página Cuentas de servicio.

    2. Haz clic en Seleccionar un proyecto.

    3. Selecciona el proyecto y haz clic en Abrir.

    4. Haz clic en Crear cuenta de servicio.

    5. Ingresa un nombre de cuenta de servicio, selecciona una función que quieras otorgar a la cuenta de servicio, como Almacenamiento > Administrador de objetos.

    6. Marca la opción Proporcionar una clave privada nueva y haz clic en Guardar.

    7. Abre el archivo JSON en un editor de texto sin formato. El contenido debería verse de la siguiente manera:

      { "type": "service_account", "project_id": "your-storage-project", ... }

  2. Crea una conexión nueva:

    IU de Airflow

    1. Accede a la interfaz web de Airflow para tu entorno de Cloud Composer.

    2. En la interfaz web de Airflow, abre la página Administrador > Conexiones.

      Captura de pantalla de Airflow. Abre el menú Conexiones de administrador.

    3. Para abrir el formulario de conexión nuevo, haz clic en la pestaña Crear.

      Captura de pantalla de Airflow. Haz clic en la pestaña Crear.

    4. Crea una conexión nueva:

      1. Para elegir un ID de conexión, completa el campo ID de conexión, como my_gcp_connection. Usa este ID en tus archivos de definición de DAG.
      2. En el campo Tipo de conexión, selecciona la opción Google Cloud Platform.
      3. Ingresa un valor para el ID del proyecto que corresponda al proyecto al que pertenece tu cuenta de servicio.
      4. Realice una de las acciones siguientes:

        1. Copia el archivo de claves JSON de la cuenta de servicio que descargaste en el directorio data/ del depósito de Cloud Storage de tu entorno. Luego, en Ruta de acceso del archivo de claves, ingresa la ruta del archivo local en el trabajador de Airflow a la ubicación del archivo de claves JSON, como /home/airflow/gcs/data/keyfile.json.
        2. En Archivo de claves JSON, copia el contenido del archivo de claves JSON de la cuenta de servicio que descargaste.

        Los usuarios con acceso a las conexiones de Airflow a través de la CLI o la IU web pueden leer las credenciales almacenadas en keyfile_dict. Para proteger estas credenciales, te recomendamos usar Ruta de acceso del archivo de claves y una LCA de Cloud Storage para restringir el acceso al archivo de claves.

      5. Ingresa un valor en el campo Alcances. Se recomienda usar https://www.googleapis.com/auth/cloud-platform como alcance y usar permisos de IAM en la cuenta de servicio para limitar el acceso a los recursos de Google Cloud.

      6. Para crear la conexión, haz clic en Guardar.

        Captura de pantalla de Airflow Haz clic en la pestaña Crear.

    gcloud

    Ingresa el siguiente comando:

    gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION connections -- --add \
    --conn_id=CONNECTION_ID --conn_type=google_cloud_platform \
    --conn_extra '{"extra\__google\_cloud\_platform\__CMD_ARGS": "...",
    "extra\__google\_cloud\_platform\__CMD_ARGS": "...", ...}'
    

    Donde:

    • ENVIRONMENT_NAME es el nombre del entorno.
    • LOCATION es la región de Compute Engine donde se encuentra el entorno.
    • CONNECTION_ID es el identificador de la conexión. Usa caracteres en minúsculas y palabras separadas con guiones bajos.
    • CMD_ARGS son lo siguiente:
      • project es un ID del proyecto. Solo se requiere extra__google_cloud_platform__project.
      • key_path es una ruta de acceso de archivo local en el trabajador de Airflow a un archivo de claves JSON, como /home/airflow/gcs/data/keyfile.json. Si se proporciona, también se requiere scope. Usa key_path o keyfile_dict, no ambos.
      • keyfile_dict es un objeto JSON que especifica el contenido del archivo de claves JSON que descargaste. Si se proporciona, también se requiere scope. Usa keyfile_dict o key_path, no ambos. Los usuarios con acceso a conexiones de Airflow a través de la CLI o la IU web pueden leer las credenciales almacenadas en keyfile_dict. Para proteger estas credenciales, te recomendamos usar key_path y aplicar una LCA de Cloud Storage a fin de restringir el acceso al archivo de claves.
      • scope es una lista separada por comas de los alcances de OAuth.

    Por ejemplo:

    gcloud composer environments run test-environment \
     --location us-central1 connections -- --add \
     --conn_id=my_gcp_connection --conn_type=google_cloud_platform \
     --conn_extra '{"extra\__google\_cloud\_platform\__project": "your-storage-project",
     "extra\__google\_cloud\_platform\__key_path": "/home/airflow/gcs/data/keyfile.json",
     "extra\__google\_cloud\_platform\__scope": "https://www.googleapis.com/auth/cloud-platform"}'

Usa una conexión de Airflow nueva

Para usar la conexión que creaste, configúrala como el argumento de ID de conexión correspondiente cuando construyas un operador de Google Cloud Airflow.

task_custom = bigquery_operator.BigQueryOperator(
    task_id='task_custom_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Set a connection ID to use a connection that you have created.
    bigquery_conn_id='my_gcp_connection')

Configura una conexión a una base de datos externa

Cloud Composer proporciona el proxy de Cloud SQL predeterminado en tu entorno para autorizar de manera remota el acceso a la base de datos de Cloud SQL del entorno desde una aplicación, cliente y otro servicio de Google Cloud.

Para conectar Cloud Composer a una base de datos externa, como una base de datos SQL o una instancia de Cloud SQL de IP privada, debes implementar un pod de proxy de SQL nuevo (yaml) en el clúster de GKE de tu entorno.

Después de implementar el servicio de proxy de SQL nuevo, la conexión a tu base de datos externa se originará desde el clúster de GKE de tu entorno. Para que el servidor web de Airflow acceda a la base de datos externa (en forma de conexión de Airflow, por ejemplo), el servicio de proxy de SQL debería ser accesible desde el servidor web. Para ello, están disponibles las siguientes opciones: