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. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

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

    Habilita las API

  5. Instala y, luego, inicializa Google Cloud CLI.
  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. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

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

    Habilita las API

  9. Instala y, luego, inicializa Google Cloud CLI.

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

Necesitarás dos buckets 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. Haga clic en Crear bucket.
  3. En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, 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 campo ID de paso es obligatorio y permite identificar el trabajo de Hadoop que se agregó.

    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. Haz clic en el nombre wordcount-template en la página Flujos de trabajo de Dataproc en Cloud Console para abrir la página Detalles de la plantilla del 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 parameters al final del archivo YAML para que Cloud Storage INPUT_BUCKET_URI se pueda pasar como args[1] al objeto binario de recuento de palabras cuando se active el flujo de trabajo.

    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. Activador:
      • 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 funciones desde la página de la 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 el bucket de salida desde la página Navegador de almacenamiento en Cloud Console.

  5. Una vez que se complete el flujo de trabajo, los detalles del trabajo se conservarán 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.

Realice 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 la consola de Cloud, 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 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?