Skip to content

eincioch/AppADF_Pipeline_Parameter

Repository files navigation

ConsoleAppADF_Parameter

Pequeña consola .NET que ejecuta un pipeline de Azure Data Factory (ADF) vía REST, enviando parámetros y verificando lo que ADF registró en el run.

¿Qué hace?

  • Obtiene un token de Azure AD con client credentials para el scope https://management.azure.com/.default.
  • Llama al endpoint de ADF Pipelines - Create Run para iniciar un pipeline y le envía parámetros en el cuerpo JSON (forma plana: claves/valores en la raíz).
  • Muestra en consola el REQUEST BODY, el STATUS/RESPONSE BODY y, tras crear el run, hace un GET a pipelineruns/{runId} para imprimir los detalles del run, incluidos los parameters que ADF registró.

Esto ayuda a:

  • Automatizar ejecuciones de pipelines desde código.
  • Diagnosticar por qué parámetros no están llegando o aparecen con tipos inesperados.

Requisitos

  • .NET 9 SDK
  • Suscripción de Azure con ADF y un pipeline publicado.
  • Aplicación en Azure AD (App registration) con permiso para Azure Service Management y un secreto de cliente (client secret) válido.

Configuración de credenciales y entorno

El proyecto lee la configuración desde variables de entorno y/o User Secrets (solo desarrollo). Las claves requeridas son:

  • AZURE_TENANT_ID
  • AZURE_CLIENT_ID
  • AZURE_CLIENT_SECRET
  • AZURE_SUBSCRIPTION_ID
  • ADF_RESOURCE_GROUP
  • ADF_FACTORY_NAME
  • ADF_PIPELINE_NAME

Puedes definirlas de dos formas:

  1. Variables de entorno (recomendado en CI/CD y producción)
  • Windows PowerShell (temporal en la sesión):
    • $env:AZURE_TENANT_ID = "<tu-tenant-id>"
    • Repite para todas las claves requeridas.
  • Windows (persistente para el usuario):
    • setx AZURE_TENANT_ID "<tu-tenant-id>"
    • Repite para cada clave. Abre una nueva sesión para que apliquen.
  1. User Secrets (solo local)
  • Asegúrate de que el proyecto tenga UserSecretsId (ya configurado en este repo).
  • Crea o edita el archivo secrets.json en el directorio de User Secrets de tu usuario y coloca este contenido de ejemplo:
{
  "AZURE_TENANT_ID": "00000000-0000-0000-0000-000000000000",
  "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
  "AZURE_CLIENT_SECRET": "<no-lo-expongas>",
  "AZURE_SUBSCRIPTION_ID": "00000000-0000-0000-0000-000000000000",
  "ADF_RESOURCE_GROUP": "<tu-rg>",
  "ADF_FACTORY_NAME": "<tu-factory>",
  "ADF_PIPELINE_NAME": "<tu-pipeline>"
}

El código usa Microsoft.Extensions.Configuration para leer primero variables de entorno y después User Secrets.

Parámetros del pipeline

En Program.cs hay un diccionario parameters con las claves/valores a enviar (forma plana):

{
  "Filial": "1000095671",
  "nPActivo": 70005908,
  "nPAnterior": 70005906,
  "Ciclo": 5,
  "Escuela": "1,2,3,...",
  "Tipo": 2,
  "Programa": 1
}

Asegúrate que en ADF el pipeline define parámetros con exactamente esos nombres y tipos.

Importante en ADF:

  • Define los parámetros en el pipeline (no solo en actividades).
  • Dentro de las actividades, usa @pipeline().parameters.<Nombre> (ej.: @pipeline().parameters.Filial).
  • Publica los cambios (Publish All). La API ejecuta la versión publicada.

Ejecución

  • Configura las credenciales y valores de ADF (ver Configuración).
  • Restaura/compila y ejecuta el proyecto.
  • Observa la consola: verás el REQUEST BODY, la respuesta de createRun y luego PIPELINE RUN DETAILS con los parámetros que ADF registró.

Verificación y diagnóstico

  • Si en PIPELINE RUN DETAILS ves que los parameters tienen los valores correctos, pero tu actividad recibe null o valores por defecto, revisa mapeos dentro del pipeline (uso de @pipeline().parameters.*) y publicaciones.
  • Si los parameters aparecen como un string JSON (con llaves y comillas), tu parámetro en ADF es de tipo String. Cámbialo a Object o envía parámetros individuales.
  • Si quieres enviar un único parámetro Object (por ejemplo parameters), cambia tu pipeline para que defina un parámetro Object y adapta el cuerpo a:
{
  "parameters": {
    "parameters": { "Filial": "...", "nPActivo": 70005908, ... }
  }
}

Y dentro de las actividades usa @pipeline().parameters.parameters.Filial.

Endpoint y versión de API

  • POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.DataFactory/factories/{factoryName}/pipelines/{pipelineName}/createRun?api-version=2018-06-01
  • El código también realiza GET .../pipelineruns/{runId} para mostrar los parámetros registrados en el run.

Seguridad

  • No incluyas secretos en el repositorio.
  • Usa User Secrets en desarrollo local y variables de entorno/secretos del sistema en CI/CD.
  • El token se solicita con client_credentials y scope de ARM: https://management.azure.com/.default.

Solución de problemas

  • 401/403: revisa credenciales, rol/permisos del principal y el scope del token.
  • 404: valida subscriptionId, resourceGroup, factoryName y pipelineName.
  • Parámetros vacíos: confirma nombres y tipos, que estén definidos en el pipeline y que uses @pipeline().parameters.*. Publica los cambios.
  • Diferencia de formas del cuerpo:
    • Forma plana (este repo): parámetros en la raíz del JSON.
    • Forma anidada: { "parameters": { ... } } si prefieres seguir literalmente el ejemplo HTTP de la documentación.

Licencia

MIT (o la que prefieras).

About

Ejecutar pipeline de Azure Data Factory

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages