Flujo de trabajo con Cloud Functions

Antes de comenzar

Si aún no lo hiciste, configura un proyecto de Google Cloud y dos (2) buckets de Cloud Storage.

Configura tu proyecto

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. Habilita las API de Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .

    Habilita las API

  5. Instala e inicializa el SDK de Cloud.
  6. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  7. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  8. Habilita las API de Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .

    Habilita las API

  9. Instala e inicializa el SDK de Cloud.

Crea o usa dos buckets (2) de Cloud Storage en tu proyecto.

Necesitarás dos depósitos de Cloud Storage en tu proyecto: uno para los archivos de entrada y otro para los de salida.

  1. En Cloud Console, ve a la página Navegador de Cloud Storage.

    Ir al navegador

  2. Haz clic en Crear bucket.
  3. En la página Crear un bucket, ingresa la información de tu bucket. Para ir al siguiente paso, haz clic en Continuar.
  4. Haga clic en Crear.

Crea una plantilla de flujo de trabajo

Copia y ejecuta los comandos que se indican a continuación en una ventana de la terminal local o en Cloud Shell para crear y definir una plantilla de flujo de trabajo.

Notas:

  • Los comandos especifican la región “us-central1”. Puedes especificar una región diferente o borrar la marca --region si ejecutaste gcloud config set compute/region para establecer la propiedad de la región.
  • La secuencia "-- " (guion guion espacio) pasa argumentos al archivo jar. El comando wordcount input_bucket output_dir ejecutará la aplicación de conteo de palabras del archivo jar en los archivos de texto contenidos en el input_bucket de Cloud Storage y, luego, enviará los archivos de conteo de palabras a un output_bucket. Parametriza el argumento del bucket de entrada de conteo de palabras para permitir que la función proporcione este argumento.

  1. Crea la plantilla de flujo de trabajo.

    gcloud dataproc workflow-templates create wordcount-template \
        --region=us-central1
    

  2. Agrega el trabajo de conteo de palabras a la plantilla de flujo de trabajo.
    1. Especifica tu output-bucket-name antes de ejecutar el comando (tu función proporcionará el bucket de entrada). Después de insertar el nombre de bucket de salida, este debe leerse de la siguiente manera: gs://your-output-bucket/wordcount-output".
    2. El ID del paso "conteo" es obligatorio y, además, identifica el trabajo hadoop agregado.

    gcloud dataproc workflow-templates add-job hadoop \
        --workflow-template=wordcount-template \
        --step-id=count \
        --jar=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
        --region=us-central1 \
        -- wordcount gs://input-bucket gs://output-bucket-name/wordcount-output
    

  3. Usa un clúster administrado y de un solo nodo para ejecutar el flujo de trabajo. Dataproc creará el clúster, ejecutará el flujo de trabajo en él y, luego, borrará el clúster cuando este se complete.

    gcloud dataproc workflow-templates set-managed-cluster wordcount-template \
        --cluster-name=wordcount \
        --single-node \
        --region=us-central1
    

  4. Haga clic en el nombre de wordcount-template en la página Flujos de trabajo de Dataproc para abrir la página Detalles de la plantilla de flujo de trabajo. Confirme los atributos de la plantilla de conteo de palabras.

Parametriza la plantilla de flujo de trabajo.

Parametriza la variable del bucket de entrada que se pasará a la plantilla de flujo de trabajo.

  1. Exporta la plantilla de flujo de trabajo a un archivo de texto wordcount.yaml para la parametrización.
    gcloud dataproc workflow-templates export wordcount-template \
        --destination=wordcount.yaml \
        --region=us-central1
    
  2. Con un editor de texto, abre wordcount.yaml y, luego, agrega un bloque de parameters al final del archivo YAML para que el INPUT_BUCKET_URI de Cloud Storage se pueda pasar como args[1] al conteo de palabras.

    A continuación, se muestra un ejemplo de un archivo YAML exportado. Puedes implementar uno de estos dos enfoques para actualizar tu plantilla:

    1. Copia y pega todo el archivo para reemplazar tu wordcount.yaml exportado después de reemplazar your-output_bucket por el nombre de tu depósito de salida.
    2. Copia y pega solo la sección parameters al final del archivo wordcount.yaml exportado.
    .
    jobs:
    - hadoopJob:
        args:
        - wordcount
        - gs://input-bucket
        - gs://your-output-bucket/wordcount-output
        mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
      stepId: count
    placement:
      managedCluster:
        clusterName: wordcount
        config:
          softwareConfig:
            properties:
              dataproc:dataproc.allow.zero.workers: 'true'
    parameters:
    - name: INPUT_BUCKET_URI
      description: wordcount input bucket URI
      fields:
      - jobs['count'].hadoopJob.args[1]
    
  3. Importa el archivo de texto wordcount.yaml con parámetros. Escribe “Y” cuando se te solicite reemplazar la plantilla.
    gcloud dataproc workflow-templates import  wordcount-template \
        --source=wordcount.yaml \
        --region=us-central1
    

Crea una función de Cloud Functions

  1. Abre la página Cloud Functions en Cloud Console y haz clic en CREAR FUNCIÓN.

  2. En la página Crear función, ingresa o selecciona la siguiente información:

    1. Nombre: Recuento de palabras.
    2. Memoria asignada: Mantén la selección predeterminada.
    3. Trigger:
      • Cloud Storage
      • Tipo de evento: Finalizar/Crear.
      • Bucket: Selecciona tu bucket de entrada (consulta Crea un bucket de Cloud Storage en tu proyecto). Cuando se agrega un archivo a este bucket, la función activará el flujo de trabajo. El flujo de trabajo ejecutará la aplicación de recuento de palabras, que procesará todos los archivos de texto en el bucket.
    4. Código de origen:

      • Editor directo
      • Entorno de ejecución: Node.js 8
      • Pestaña INDEX.JS: Reemplaza el fragmento de código predeterminado por el siguiente código y, luego, edita la línea const projectId para proporcionar -your-project-id- (sin un "-" al principio ni al final).
      const dataproc = require('@google-cloud/dataproc').v1;
      
      exports.startWorkflow = (data) => {
       const projectId = '-your-project-id-'
       const region = 'us-central1'
       const workflowTemplate = 'wordcount-template'
      
      const client = new dataproc.WorkflowTemplateServiceClient({
         apiEndpoint: `${region}-dataproc.googleapis.com`,
      });
      
      const file = data;
      console.log("Event: ", file);
      
      const inputBucketUri = `gs://${file.bucket}/${file.name}`;
      
      const request = {
        name: client.projectRegionWorkflowTemplatePath(projectId, region, workflowTemplate),
        parameters: {"INPUT_BUCKET_URI": inputBucketUri}
      };
      
      client.instantiateWorkflowTemplate(request)
        .then(responses => {
          console.log("Launched Dataproc Workflow:", responses[1]);
        })
        .catch(err => {
          console.error(err);
        });
      };
      
      • Pestaña PACKAGE.JSON: Reemplaza el fragmento de código predeterminado por el siguiente código.
      {
        "name": "dataproc-workflow",
        "version": "1.0.0",
        "dependencies":{ "@google-cloud/dataproc": ">=1.0.0"}
      }
      
      • Función que se ejecutará: Insert: "startWorkflow".
    5. Haga clic en CREAR.

Prueba la función

  1. Copia el archivo público rose.txt en tu bucket para activar la función. Inserta your-input-bucket-name (el bucket que se usa para activar la función) en el comando.

    gsutil cp gs://pub/shakespeare/rose.txt gs://your-input-bucket-name
    

  2. Espera 30 segundos y, luego, ejecuta el siguiente comando para verificar que la función se haya completado correctamente.

    gcloud functions logs read wordcount
    
    ...
    Function execution took 1348 ms, finished with status: 'ok'
    

  3. Para ver los registros de la función desde la página de lista Funciones en Cloud Console, haz clic en el nombre de la función wordcount y, luego, en "VER REGISTROS" en la página Detalles de la función.

  4. Puedes ver la carpeta wordcount-output en tu bucket de salida desde la página Navegador de Storage en Cloud Console.

  5. Una vez que se completa el flujo de trabajo, los detalles del trabajo persisten en Cloud Console. Haz clic en el trabajo count... que aparece en la página Trabajos de Dataproc para ver los detalles del trabajo de flujo de trabajo.

Realiza una limpieza

El flujo de trabajo de este instructivo borra su clúster administrado cuando se completa. Para evitar costos recurrentes, puedes borrar otros recursos asociados con este instructivo.

Borra un proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra depósitos de Cloud Storage

  1. En Cloud Console, ve a la página Navegador de Cloud Storage.

    Ir al navegador

  2. Haz clic en la casilla de verificación del bucket que deseas borrar.
  3. Para borrar el bucket, haz clic en Borrar y, luego, sigue las instrucciones.

Borra la plantilla de flujo de trabajo

gcloud dataproc workflow-templates delete wordcount-template \
    --region=us-central1

Borra tu función de Cloud Functions

Abre la página Cloud Functions en Cloud Console, selecciona la casilla a la izquierda de la función wordcount y, luego, haz clic en BORRAR.

¿Qué sigue?