Challenge 06 - Create Functions using VS Code

< Previous Challenge - Home - Next Challenge >

Introduction

In this challenge, you will create two new Azure Functions written in Node.js, using VS Code. These will be triggered by Event Grid and output to Azure Cosmos DB to save the results of license plate processing done earlier by the ProcessImage function. The code for these functions is provided in the challenge instructions below.

Two notes about the code you will use:

Description

Since these new functions will be written in a different language than the ones from the previous challenge (Node.js vs. C#), you will need to open a new Visual Studio code window.

Using the skills you learned in Challenge 02 when creating a “Hello World” function, you will create two new functions and deploy each both to the Function App in Azure with the events in the name that you created earlier in Challenge 03.

Create & Publish savePlateData Function

const { app, output } = require('@azure/functions'); 

const cosmosOutput = output.cosmosDB({ 
    databaseName: 'LicensePlates', 
    containerName: 'Processed', 
    createIfNotExists: true, 
    connection: 'cosmosDBConnectionString', 
}); 

app.eventGrid('savePlateData', { 
    return: cosmosOutput, 
    handler: (event, context) => { 
        context.log('Event grid function processed event:', event); 
        return { 
            fileName: event.data['fileName'], 
            licensePlateText: event.data['licensePlateText'], 
            timeStamp: event.data['timeStamp'], 
            exported: false,
            id: event.id 
        }; 
    }, 
}); 

Create and Publish queuePlateForManualCheckup Function

Now let’s repeat the same steps for the second event function:

const { app, output } = require('@azure/functions'); 

const cosmosOutput = output.cosmosDB({ 
    databaseName: 'LicensePlates', 
    containerName: 'NeedsManualReview', 
    createIfNotExists: true, 
    connection: 'cosmosDBConnectionString', 
}); 

app.eventGrid('queuePlateForManualCheckup', { 
    return: cosmosOutput, 
    handler: (event, context) => { 
        context.log('Event grid function processed event:', event); 
        return { 
            fileName: event.data['fileName'], 
            licensePlateText: '', 
            timeStamp: event.data['timeStamp'], 
            resolved: false,
            id: event.id
        };
    },
});

Success Criteria

  1. Your folder structure looks similar to this:
    • events/
      • host.json
      • package.json
    • events/src/functions/
      • savePlateData.js
      • queuePlateForManualCheckup.js
    • (other files)
  2. Both functions do not have any syntax errors
  3. Both functions have event grid subscriptions
  4. Both functions have the proper Cosmos DB settings as their outputs
  5. Open the Function’s LiveStream, upload a License Plate JPG to the storage account, and validate the event functions are called with the license plate filename, timestamp and text (if successful).
  6. In your CosmosDB, verify the containers contain the information for every scanned license plate.

Learning Resources