Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Flujo de trabajo con Cloud Functions

Antes de comenzar

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

Configura tu proyecto

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del 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.

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 a la página Navegador de Cloud Storage

  2. Haz clic en Crear depósito.
  3. En el diálogo Crear bucket, especifica los siguientes atributos:
  4. Haz clic en Crear.

Crea una plantilla de flujo de trabajo

Copia y ejecuta los comandos que se mencionan 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 ya ejecutaste gcloud config set compute/region para configurar la propiedad de 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 (la función proporcionará el depósito de entrada). Después de insertar el output-bucket-name, el argumento del depósito de salida 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 se complete el flujo de trabajo.

    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 depósito 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. Para actualizar tu plantilla, puedes tomar uno de dos enfoques:

    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 en la parte inferior 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 parametrizado. 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: Conserva la selección predeterminada.
    3. Trigger:
      • Cloud Storage
      • Tipo de evento: Finalizar/Crear.
      • Depósito: Selecciona tu depósito de entrada (consulta Crea un depósito de Cloud Storage en tu proyecto). Cuando se agregue un archivo a este depósito, la función activará el flujo de trabajo. El flujo de trabajo ejecutará la aplicación de recuento de palabras, lo que procesará todos los archivos de texto del depósito.
    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 depósito para activar la función. Inserta your-input-bucket-name (el depósito que se usa para activar tu 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 con éxito.

    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 depósito 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 del flujo de trabajo.

Realiza una limpieza

El flujo de trabajo en este instructivo borra su clúster administrado cuando se completa el flujo de trabajo. 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 a la página Navegador de Cloud Storage

  2. Haz clic en la casilla de verificación del bucket que quieras borrar.
  3. Para borrar el depósito, haz clic en Borrar .

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 haz clic en BORRAR.

¿Qué sigue?